Release 26.3.0
This release introduces Docker image support, new extensibility APIs, distributed caching, Azure AD authentication, startup validation, and numerous bug fixes and improvements across the library.
🛠️ Changes
Docker Image Support
A pre-built Docker image is now published to Docker Hub and GitHub Container Registry, enabling zero-setup deployment:
docker run -p 8080:8080 -v ./documents:/app/Files groupdocs/viewer-ui:latestAll settings are configurable via environment variables (VIEWER_TYPE, VIEWER_STORAGE_PATH, VIEWER_CACHE_PATH, etc.). Includes health check endpoint at /health and docker-compose example.
New Extensibility APIs
AddCustomScript(path)— Inject custom JavaScript into the viewer UI pageReadFileStreamAsynconIFileStorage— Stream-based file reading to avoid loading entire files into memoryRemoveAsynconIFileCache— Cache invalidation API for all cache providers (Local, InMemory, Distributed)- Comprehensive XML documentation and README examples for
IPageFormatter,IFileTypeResolver,ISearchTermResolver,IFileNameResolver, andIErrorMessageProvider
Distributed Cache Provider
New GroupDocs.Viewer.UI.Api.Distributed.Cache package wrapping IDistributedCache, enabling Redis, SQL Server, or NCache as cache backends:
builder.Services.AddControllers()
.AddGroupDocsViewerSelfHostApi()
.AddDistributedCache();Azure AD Authentication
Azure Blob Storage now supports TokenCredential (e.g., DefaultAzureCredential) and connection string authentication in addition to account name/key:
.AddAzureBlobStorage(options =>
{
options.AccountName = "myaccount";
options.ContainerName = "documents";
options.TokenCredential = new DefaultAzureCredential();
})Startup Validation
Two new IHostedService validators warn at startup about common misconfigurations:
ConfigurationValidator— DetectsRenderingMode/ViewerTypemismatchServiceRegistrationValidator— Warns whenIFileStorageis not registered
Browser-Side Response Caching
New ResponseCacheDurationSeconds config property adds Cache-Control headers to GET endpoints (/get-page, /get-thumb, /get-pdf, /get-resource).
Configuration Improvements
appsettings.jsonbinding now works for SelfHost API config properties (LicensePath,ViewerType)- Configurable
SizeLimitforInMemoryCacheto cap memory usage - Root endpoint (
/) support for the viewer UI
Async and Cancellation Improvements
CancellationTokenpropagated throughIViewer,IFileStorage, andIFileCacheinterfacesThread.Sleepreplaced withawait Task.Delayin async paths
Version Scheme
Switched to company versioning scheme (YY.M.0). This release is 26.3.0 (March 2026).
🐛 Bug Fixes
- Fix
PngViewerusingJpgViewOptionsforViewInfo - Fix thumb URL using
PageExtensioninstead ofThumbExtension - Fix duplicate
FontsToExcludeassignment - Fix broken URL in Cloud API sample
- Fix
MemoryStreamnot disposed inReadFileFromRequest - Fix duplicate
UserSecretsIdbetween samples - Fix missing
System.Drawing.EnableUnixSupportin SelfHost samples - Fix indexer setter using
Insertinstead of assignment inPagesandThumbs - Fix
JpgPageandPngPageSetContentencoding bug - Fix network roundtrip on every operation when using Azure Blob Storage
- Add
BucketNamevalidation toAwsS3FileStorageconstructor
🔧 Infrastructure
- Update GitHub Actions to v4
- Target Dockerfiles and samples to .NET 8.0
- Update .NET SDK prerequisite to 8.0
- Remove stage publishing workflow
- Fix typos in README files
📦 Packages
Thirteen NuGet packages available including the new GroupDocs.Viewer.UI.Api.Distributed.Cache.
- GroupDocs.Viewer.UI
- GroupDocs.Viewer.UI.Api
- GroupDocs.Viewer.UI.Api.AwsS3.Storage
- GroupDocs.Viewer.UI.Api.AzureBlob.Storage
- GroupDocs.Viewer.UI.Api.Cloud.Storage
- GroupDocs.Viewer.UI.Api.Distributed.Cache
- GroupDocs.Viewer.UI.Api.InMemory.Cache
- GroupDocs.Viewer.UI.Api.Local.Cache
- GroupDocs.Viewer.UI.Api.Local.Storage
- GroupDocs.Viewer.UI.Cloud.Api
- GroupDocs.Viewer.UI.Core
- GroupDocs.Viewer.UI.SelfHost.Api
- GroupDocs.Viewer.UI.SelfHost.Api.CrossPlatform
Thank you for using GroupDocs.Viewer.UI! If you encounter any issues or have suggestions, please don't hesitate to provide feedback here on GitHub or at our Free Support Forum.