Ekom.Core 0.2.125

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ekom.Core --version 0.2.125
                    
NuGet\Install-Package Ekom.Core -Version 0.2.125
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ekom.Core" Version="0.2.125" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Ekom.Core" Version="0.2.125" />
                    
Directory.Packages.props
<PackageReference Include="Ekom.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Ekom.Core --version 0.2.125
                    
#r "nuget: Ekom.Core, 0.2.125"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Ekom.Core@0.2.125
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Ekom.Core&version=0.2.125
                    
Install as a Cake Addin
#tool nuget:?package=Ekom.Core&version=0.2.125
                    
Install as a Cake Tool

<h1 align="center"> Ekom

Nuget Nuget Nuget License Publish Ekom.Klaviyo Publish Ekom.Algolia

</h1>

<h2 align="center"> Open Source Ecommerce package for Umbraco </h2>

Supports Umbraco version 10+

Ekom is a versatile and fully customizable eCommerce solution that is free to use forever. This package has been built with ASP NET Core, focusing on performance and security, and is compatible with Umbraco versions 10 and above.

Installation

Install the appropriate Umbraco versioned package to your solution (f.x. Ekom.U10) Install the Ekom.Web package into your sites main project (contains wwwroot)

NuGet: https://www.nuget.org/packages/Ekom.U10

dotnet add package Ekom.U10

PM> Install-Package Ekom.U10

Ekom.Web

dotnet add package Ekom.Web

PM> Install-Package Ekom.Web

  • 100% free and open source forever.
  • Support for both B2B (Business to Business) and B2C (Business to Customer) transactions
  • Headless capabilities, allowing for more flexibility in frontend design and development
  • Multilingual and multicurrency support, making it suitable for international businesses
  • A powerful order management system
  • Out-of-the-box support for multiple payment providers, along with the ability to plug in additional providers as needed
  • Flexible shipping provider configurations, including the ability to connect with external services
  • The capability to set up flexible discounts
  • Support for complex variants, a crucial feature for eCommerce platforms
  • Integration support with external systems like Microsoft Dynamics Business Central, Dynamics AX, DK, Salesforce, and others
  • Advanced inventory management tools
  • Built with ASP NET Core with focus on performance and security
  • The ability to be extended as per your business requirements
  • And many more features....

Appsettings configuration

All Ekom settings live under the Ekom section in appsettings.json.

"Ekom": {
  "PerStoreStock": false,
  "ExamineSearchIndex": "ExternalIndex",
  "ShareBasket": false,
  "BasketCookieLifetime": 1,
  "CustomImage": "images",
  "ReservationTimeout": 30,
  "CategoryRootLevel": 3,
  "VatCalcRounding": "AwayFromZero",
  "VatRoundingScope": "PerUnit",
  "VatIncludedPerUnitPolicy": "PreserveStickerGross",
  "ApplyVatOnShipping": true,
  "UserBasket": false,
  "DisableStock": false,
  "AbsoluteUrls": true,
  "DefaultProductOrderBy": "DateDesc",
  "GlobalCatalog": false,
  "EmailNotifications": "orders@example.com",
  "CustomerData": false,
  "Manager": {
    "SectionAccessGroup": "ekom,commerce-admins",
    "StoreGroupPermissions": {
      "store1": [ "group-a", "group-b" ]
    }
  },
  "Headless": {
    "ReValidateApis": [
      { "Store": "store1", "Url": "https://example.com/api/revalidate", "Secret": "secret" }
    ]
  },
  "Payments": {
    "valitor": {
      "merchantId": "1",
      "verificationCode": "xxxxx",
      "merchantName": "",
      "paymentPageUrl": "https://paymentweb.uat.valitor.is/"
    }
  }
}
  • PerStoreStock (bool, default false): Use per-store stock cache instead of product/variant stock.
  • ExamineSearchIndex (string, default ExternalIndex): Examine index name used for search.
  • ShareBasket (bool, default false): Share baskets between stores; requires same currencies across stores.
  • BasketCookieLifetime (number, days, default 1): Order cookie lifespan in days.
  • CustomImage (string, default images): Media folder alias for product images.
  • ReservationTimeout (number, minutes, default 30): Checkout reservation timeout in minutes.
  • CategoryRootLevel (int, default 3): Minimum Umbraco level for categories.
  • VatCalcRounding (Rounding enum, default AwayFromZero): None, RoundDown, RoundUp, RoundToEven, AwayFromZero.
  • VatRoundingScope (VatRoundingScope enum, default PerUnit): PerUnit, PerTotal.
  • VatIncludedPerUnitPolicy (VatIncludedPerUnitPolicy enum, default PreserveStickerGross): PreserveStickerGross, LineLevelVat.
  • ApplyVatOnShipping (bool, default false): Apply VAT to shipping costs.
  • UserBasket (bool, default false): Single basket per member stored on the member "orderId".
  • DisableStock (bool, default false): Disable stock checks.
  • AbsoluteUrls (bool, default false): Force backoffice URLs to be absolute for multi-site setups.
  • DefaultProductOrderBy (OrderBy enum, default DateDesc): See Ekom.Utilities.Enums.OrderBy values for options.
  • GlobalCatalog (bool, default false): If product not found in current store, search other stores.
  • EmailNotifications (string, optional): Override Umbraco email for MailService notifications.
  • CustomerData (bool, default false): Store checkout customer data in ekmCustomerData table.
  • Manager:SectionAccessGroup (CSV string): Backoffice groups that can access the manager section.
  • Manager:StoreGroupPermissions (object): Store alias to allowed group list mapping.
  • SectionAccessRules (CSV string, legacy): Backwards-compatible alias for Manager:SectionAccessGroup.
  • Headless:ReValidateApis (list): Items with Store, Url, Secret for headless revalidation.
  • Payments (object): Provider-specific configuration used by payment providers.

Ekom tracking supports order-level Consent and Tracking data for automatic GA4 and Meta purchase dispatch.

  • Ekom:Tracking:Enabled turns tracking features on or off.
  • Ekom:Tracking:CaptureEnabled controls whether Ekom captures consent and browser tracking data from incoming requests.
  • Ekom:Tracking:LogPurchaseEventData controls whether outbound GA4 and Meta purchase payloads are logged before dispatch.
  • Ekom:Tracking:CookieName and Ekom:Tracking:CookieLifetimeDays control Ekom's own tracking cookie.
  • Ekom:Tracking:SiteBaseUrl is used as a fallback base URL when no landing URL can be resolved from the request.
  • Ekom:Tracking:Consent defines the default consent cookie/header names and fallback values.
  • Ekom:Tracking:Consent:Stores lets you override consent handling per store alias.
  • Consent is resolved through a chain of ITrackingConsentResolver services.
  • The first resolver that returns a value wins; if none resolve, Ekom falls back to the configured fallback values.
  • CookieHub consent resolution is built in. Set the relevant consent cookie name(s) to cookiehub for any store that uses CookieHub.
  • Ekom:Tracking:Ga4 configures GA4 purchase dispatching per store.
  • Ekom:Tracking:Meta configures Meta purchase dispatching per store.

Full tracking config example:

"Tracking": {
  "Enabled": true,
  "CaptureEnabled": true,
  "LogPurchaseEventData": false,
  "CookieName": "EkomTracking",
  "CookieLifetimeDays": 30,
  "SiteBaseUrl": "https://www.example.com",
  "Consent": {
    "FallbackAnalyticsConsent": false,
    "FallbackMarketingConsent": false,
    "AnalyticsCookieName": "ekom_consent_analytics",
    "AnalyticsHeaderName": "X-Ekom-Consent-Analytics",
    "MarketingCookieName": "ekom_consent_marketing",
    "MarketingHeaderName": "X-Ekom-Consent-Marketing",
    "Stores": [
      {
        "Alias": "Store",
        "AnalyticsCookieName": "cookiehub",
        "MarketingCookieName": "cookiehub"
      }
    ]
  },
  "Ga4": {
    "Enabled": true,
    "Testing": false,
    "Dispatching": {
      "Capacity": 1000,
      "MaxConcurrency": 2
    },
    "Stores": [
      {
        "Alias": "Store",
        "MeasurementId": "G-XXXXXXXXXX",
        "ApiSecret": "your-ga4-api-secret"
      }
    ]
  },
  "Meta": {
    "Enabled": true,
    "Testing": false,
    "Dispatching": {
      "Capacity": 1000,
      "MaxConcurrency": 2
    },
    "Stores": [
      {
        "Alias": "Store",
        "PixelId": "123456789012345",
        "AccessToken": "your-meta-access-token",
        "TestEventCode": "TEST12345"
      }
    ]
  }
}

Notes:

  • Ga4:Stores[*] uses MeasurementId and ApiSecret for Measurement Protocol purchase events.
  • Meta:Stores[*] uses PixelId and AccessToken for Conversion API purchase events.
  • Ga4:Testing sends events through the GA4 debug endpoint.
  • Meta:Testing uses TestEventCode when configured for the store.
  • Dispatching:Capacity and Dispatching:MaxConcurrency control the background queue used for provider dispatching.

Default consent config example:

"Tracking": {
  "Consent": {
    "FallbackAnalyticsConsent": false,
    "FallbackMarketingConsent": false,
    "AnalyticsCookieName": "ekom_consent_analytics",
    "AnalyticsHeaderName": "X-Ekom-Consent-Analytics",
    "MarketingCookieName": "ekom_consent_marketing",
    "MarketingHeaderName": "X-Ekom-Consent-Marketing"
  }
}

Store-specific override example:

"Tracking": {
  "Consent": {
    "FallbackAnalyticsConsent": false,
    "FallbackMarketingConsent": false,
    "Stores": [
      {
        "Alias": "Store",
        "AnalyticsCookieName": "cookiehub",
        "MarketingCookieName": "cookiehub"
      }
    ]
  }
}

When a store points AnalyticsCookieName and/or MarketingCookieName to cookiehub, Ekom automatically reads the CookieHub cookie, decodes its JSON payload, and maps CookieHub categories to OrderConsent. Additional notes and config examples are available in Samples/U10/Ekom.Site/CookieHubConsentResolver.md.

Manager access rules

  • A user can open the Ekom manager when they belong to Manager:SectionAccessGroup or to any group configured under Manager:StoreGroupPermissions.
  • Store access is still checked per store. A user only sees and can query stores where one of their groups matches that store's configured group list.
  • Stores missing from Manager:StoreGroupPermissions are denied.
  • Umbraco administrators bypass these restrictions and can access all stores.

Example:

"Manager": {
  "SectionAccessGroup": "ekom",
  "StoreGroupPermissions": {
    "Store": ["StoreGroup"],
    "Store2": ["Store2Group"]
  }
}

With this setup:

  • members of ekom can access the manager section
  • members of StoreGroup can access the manager and work only with Store
  • members of Store2Group can access the manager and work only with Store2
  • users without a matching group cannot access the related store

Plugins

Documentation

Link to documentation

Contributing

We use squash merges and Conventional Commit style PR titles so release-please can generate release PRs.

If you must use merge commits, every individual commit message still has to be Conventional Commits.

Example PR titles:

feat: add vat rounding settings to docs
fix: handle null payment provider in checkout
chore: update dependencies
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Ekom.Core:

Package Downloads
Ekom.Web

Ekom Web. This Package has all the web files that Ekom requires.

Ekom.AspNetCore

Ekom ASP.NET Core - Vettvangur E-Commerce solution

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.134 0 4/30/2026
0.2.133 0 4/30/2026
0.2.132 150 4/28/2026
0.2.131 155 4/28/2026
0.2.130 178 4/27/2026
0.2.129 211 4/27/2026
0.2.128 278 4/23/2026
0.2.127 287 4/23/2026
0.2.126 286 4/23/2026
0.2.125 320 4/22/2026
0.2.124 299 4/22/2026
0.2.123 319 4/22/2026
0.2.122 321 4/22/2026
0.2.121 345 4/21/2026
0.2.120 347 4/21/2026
0.2.119 348 4/20/2026
0.2.118 372 4/20/2026
0.2.117 364 4/20/2026
0.2.116 369 4/20/2026
0.2.115 367 4/20/2026
Loading failed