Strongly-typed templates
One POCO per template with [SitecoreTemplate] and [SitecoreField]. Read fields through GetField<TextField>() with real IntelliSense.
Open source · MIT · .NET 8 · v0.1.0-preview
Strongly-typed, Synthesis-style item models over the Sitecore
GraphQL Edge — on raw HttpClient and
System.Text.Json. No third-party GraphQL library.
$ dotnet add package Axlis.ORM
The gap
Synthesis and Glass gave classic Sitecore developers strongly-typed templates for years. Headless moved the data behind a GraphQL Edge endpoint — and left teams hand-writing queries and mapping raw JSON. Axlis.ORM brings the typed item model back: define a class per template, fetch by path or ID, traverse the tree, and let caching and diagnostics come for free.
What you get
Everything below ships in the v0.1.0-preview package family, today.
One POCO per template with [SitecoreTemplate] and [SitecoreField]. Read fields through GetField<TextField>() with real IntelliSense.
Parent, Children, Siblings, GetChildren(predicate) and GetDescendants() — lazy-loaded through an ambient loader wired at startup.
Items are dual-indexed by ID and path, so a later lookup by either key resolves without a second fetch. Nulls are never cached, so re-published items reappear.
The default transport is raw HttpClient plus System.Text.Json. Swap in any custom IGraphQLTransport if you need to.
Clean Get*Async<T>() returns T? and never throws. Rich Get*WithResultAsync<T>() returns metadata and diagnostics for observability.
GetItemsByPaths chunks paths into batched alias queries and runs them in parallel — one round trip for many items.
From install to first item
Register with a single call, describe your template as a class, then
resolve items through ISitecoreFacade. Axes traversal and
caching are already wired.
Axlis.ORM and Axlis.ORM.GraphQL from NuGet.AxlisGraphQL:Endpoint at your GraphQL Edge URL.AddAxlisORM() and UseAxlis() at startup.[SitecoreTemplate("{6D1CD897-1936-4A3A-A511-289A94C2A7B1}")]
public class DictionaryEntry : ExtendedItem
{
[SitecoreField("Key")]
public TextField Key => GetField<TextField>("Key");
[SitecoreField("Phrase")]
public TextField Phrase => GetField<TextField>("Phrase");
}
// Fetch, then traverse the tree
var entry = await facade.GetItemByPathAsync<DictionaryEntry>(
"/sitecore/content/dictionary/my-key");
var phrase = entry?.Phrase.RawValue;
var children = entry?.Axes.Children;
var parent = entry?.Axes.Parent;
The package family
Reference the whole stack, or just the contracts. Each package points strictly inward.
The facade, cache manager and DI wiring. Start here with AddAxlisORM().
Default HttpClient + STJ transport, SitecoreService and the batched query builder.
The domain model — Item, field types, ExtendedItem, AxesAdapter and ItemConverter.
Contracts, NoOps, AxlisResult<T> and codegen-hook attributes. Safe from any layer.
Where Axlis is going
Axlis.ORM is the first piece. Here's what's shipped and what's next.
Shipped · v0.1.0-preview
The Sitecore Headless GraphQL ORM — typed templates, axes, caching, diagnostics and DI, across four packages.
Planned
A thread-safe Sitecore context implementation for the multi-threaded scenarios where Sitecore.Context falls short.
Planned
Enhanced diagnostics and monitoring for Sitecore applications, building on the diagnostics sink already in the ORM.
Planned
Advanced caching strategies for Sitecore data, beyond the stampede-safe item cache shipping today.
For early adopters
Star the repo, install the preview, and open a discussion. Your feedback shapes v1 and the components that follow.
Questions
It maps Sitecore items exposed through the GraphQL Edge endpoint onto strongly-typed .NET classes. With Axlis you define one class per template and query items by path or ID — no hand-written GraphQL, no manual JSON mapping.
No. The default transport uses raw HttpClient and System.Text.Json. There's no dependency on GraphQL.Client, StrawberryShake or similar — and the transport is swappable via IGraphQLTransport.
Yes. Axlis targets any Sitecore headless instance exposing a GraphQL Edge endpoint, including XM Cloud and Sitecore Experience Edge. Point AxlisGraphQL:Endpoint at your edge URL.
Yes — MIT licensed, open source on GitHub and published on NuGet. Free for commercial and personal use.