Licensing
Unlicensed
Section titled “Unlicensed”You can run ExamineX without a license for FREE but some restrictions apply
If you do not have a license file, your license is expired, or the license information (i.e. your Azure/Elastic Search service name or site friendly name) is inconsistent, then ExamineX will show as unlicensed in the Umbraco back office and some indexing operations will be limited.
Expired/Unlicensed limitations are:
- Indexes will be created and can be rebuilt.
- A maximum of 100 documents will be allowed per index.
License file location
Section titled “License file location”Once you have obtained a license file (follow the product link below to buy one), store it in ~/ (the web root). Each product has its own license file name:
| Product | License file |
|---|---|
| Azure AI Search | ExamineX-Azure-Umbraco.lic |
| Elasticsearch | ExamineX-Elastic-Umbraco.lic |
NOTE: With a subscription license, ExamineX periodically creates a renewed license file next to it, for example ExamineX-Azure-Umbraco.renewed.lic or ExamineX-Elastic-Umbraco.renewed.lic. It’s an updated timestamped copy of the license. Don’t commit it to your code repository or include it in your deploy scripts; ExamineX manages it. In Blob Storage it’s written next to the license file, as <license file>.renewed.lic.
If you cannot store the license file in the web root, it is possible to store the license file in Blob Storage for further flexibility (i.e. when using Azure zip deployments)
To configure the ExamineXBlobLicenseFileOptions, you can either do this with JSON configuration. ExamineX 7 moved the section under ExamineX:
"ExamineX": { "BlobLicenseFileOptions": { "ConnectionString": "YOUR-BLOB-STORAGE-CONNECTION-STRING", "ContainerName": "your-container-name", "ContainerRootPath": "ExamineX", "Disabled": false } } "ExamineXBlobLicenseFileOptions": { "ConnectionString": "YOUR-BLOB-STORAGE-CONNECTION-STRING", "ContainerName": "your-container-name", "ContainerRootPath": "ExamineX", "Disabled": false }or via code, and in this case, you can re-use the blob connection string from your AzureBlobFileSystemOptions:
services.AddOptions<ExamineXBlobLicenseFileOptions>() .Configure<IOptionsMonitor<AzureBlobFileSystemOptions>>((options, blob) => { var media = blob.Get(AzureBlobFileSystemOptions.MediaFileSystemName); options.ConnectionString = media.ConnectionString; options.ContainerName = media.ContainerName; options.ContainerRootPath = "ExamineX"; });Blob Storage with Managed Identity (Token-based)
Section titled “Blob Storage with Managed Identity (Token-based)”Available from ExamineX 9.3.3 and 10.0.2. Earlier versions need a ConnectionString.
If your environment prohibits the use of storage account keys, you can authenticate to Blob Storage using Azure Managed Identity or any other TokenCredential implementation from the Azure.Identity package. In this case a ConnectionString is not required, instead you specify the blob service endpoint with ServiceUri.
First, install the Azure.Identity NuGet package:
dotnet add package Azure.IdentityThe ServiceUri, ContainerName and ContainerRootPath can be set with JSON configuration:
"ExamineX": { "BlobLicenseFileOptions": { "ServiceUri": "https://YOUR-STORAGE-ACCOUNT.blob.core.windows.net", "ContainerName": "your-container-name", "ContainerRootPath": "ExamineX" } }The TokenCredential must be set in code:
using Azure.Identity;
services.Configure<ExamineXBlobLicenseFileOptions>(options =>{ // System-assigned managed identity, or pass a client id for a user-assigned managed identity options.TokenCredential = new ManagedIdentityCredential();});You can supply any TokenCredential implementation (i.e. ManagedIdentityCredential, ClientSecretCredential, etc…). If both a ConnectionString and a TokenCredential are configured, the ConnectionString takes precedence.
The identity must be granted the Storage Blob Data Contributor role on the storage account or container, because ExamineX needs to both read the license file and write the renewed license file (*.renewed.lic) for subscription licenses.
Licensing is Per Site
Section titled “Licensing is Per Site”Each license is licensed against a combination of your Search service name and your site’s Friendly Name that you defined during license creation. This combination is what defines a “single website” and can be used in single server setups to load balancing, auto-scaling, multiple domains, etc…
It is not possible to use the same license on a different Umbraco website because the index file locations are unique to the licenced info. A separate license will need to be purchased for each Umbraco website you with to use with ExamineX. See the ExamineX License Agreement for more details.
Contact support@sdkits.com if you need to change the registered service name or friendly name with your license.
Subscription license
Section titled “Subscription license”The Subscription based (per year fee) license provides you with free software updates for the lifetime of the subscription. If the subscription lapses then the license will expire and the unlicensed limitations will apply.
One-time fee license
Section titled “One-time fee license”The One time fee license will continue to work for the lifetime of your website and provides you with 12 months of updates.
Should you wish to update ExamineX after the 12 month period, an upgrade license can be purchased to provide you with a further 12 months of updates and will cost $1500 USD (exc. VAT). Contact support@sdkits.com to purchase an upgrade license.