Umbraco Packages

Kraftvaerk.Umbraco.Headless.CacheKeys

Cache Keys

Adds a cacheKey field to responses from the Umbraco Delivery API, making it easier for headless consumers to handle caching and invalidation strategies.

This package also extends the generated OpenAPI (Swagger) schema to include the new field for improved developer experience and tooling support.

Go to Github

Kraftvaerk.Umbraco.Headless.CacheKeys enhances the Umbraco Delivery API by adding a cacheKeys field to content responses, making it easier to implement efficient caching and precise invalidation strategies for headless frontends. It automatically tracks dependencies across content and media, ensuring pages can be invalidated when related items change. The package also extends the OpenAPI (Swagger) schema for better tooling support and developer experience. With built-in support for recursive child keys, it’s especially useful for listings like blogs or news pages, helping keep headless sites fast and responsive.

This particular piece of content has the following cache keys:

cache keys · 2
content-3d9bfe4e-6984-41a1-a638-f7ee36f10ebb
content-35a65b13-4b94-4830-a6ca-53bc9f321544

Kraftvaerk.Umbraco.Headless.BlockPreview

Block Preview

Live preview of your blocks, right inside the backoffice — powered by your frontend.

Go to Github

Kraftvaerk.Umbraco.Headless.BlockPreview brings live, inline previews of blocks directly into the Umbraco backoffice, powered by your frontend.

Supporting Block List, Block Grid, and RTE blocks, it lets editors see real rendered HTML while they edit, using your existing headless setup (Vue, React, Razor, or anything else). It’s multi-site and culture-aware, with settings persisted in blockPreview/state.json so you can commit and share configurations across environments. Flexible and fully configurable, BlockPreview gives developers full control over how previews are rendered, while giving editors a smoother, more intuitive editing experience.

If that doesn't explain it well enough, watch the (silent) video beneath.

Kraftvaerk.Umbraco.Blockfilter

Block Filter

Block Filter is a simple package that replaces the Block Catalogue Modal in Umbraco with one under our control.

Ever wished a block could only be available to certain users or user groups? Only on certain pages? Only if the editor alias is gridContent? Or maybe only if the logged-in user’s first name is Unicorn?

Go to Github

Block Filter (by Kraftvaerk) is an open-source Umbraco package that gives developers full control over the Block Catalogue Modal. By using the RemodelBlockCatalogueNotification, you can decide exactly which blocks should be available — whether based on user groups, content types, editor aliases, or even custom conditions. Compatible with Umbraco 16.0+, it’s easy to install via NuGet and extend with your own notification handlers. With Block Filter, you define who sees what, ensuring a tailored and flexible editing experience.

Kjeldsen.dev currently runs with this nonsense - allowing only the cache key example block above (with the table) to be inserted on this page. 

csharp
public class YourNotificationHandler : INotificationAsyncHandler<RemodelBlockCatalogueNotification>{    private readonly IContentService _contentService;    public YourNotificationHandler(IContentService contentService)    {        _contentService = contentService;    }     public async Task HandleAsync(        RemodelBlockCatalogueNotification notification,         CancellationToken cancellationToken)    {        var id = notification.Model.ContentId;         if(id == null)        {            return;        }         var name = _contentService.GetById(Guid.Parse(id)).Name;                if(!name.Equals("umbraco packages", StringComparison.OrdinalIgnoreCase))        {            notification.Model.Blocks =                notification.Model.Blocks                .Where(x => x.Alias != "cacheKeyExampleBlock").ToList();        }    }} public class YourComposer : IComposer{    public void Compose(IUmbracoBuilder builder)    {        builder.            AddNotificationAsyncHandler<RemodelBlockCatalogueNotification, YourNotificationHandler>();    }}