Open source · MIT · .NET 8 · v0.1.0-preview

The first GraphQL ORM
for Sitecore headless.

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

Sitecore went headless. The item model didn't come with it.

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.

4
focused packages, each installable on its own
0
third-party GraphQL dependencies in the transport
net8.0
with netstandard2.0 contracts for shared domains

What you get

Built for the way Sitecore developers actually work.

Everything below ships in the v0.1.0-preview package family, today.

Strongly-typed templates

One POCO per template with [SitecoreTemplate] and [SitecoreField]. Read fields through GetField<TextField>() with real IntelliSense.

Synthesis-style axes

Parent, Children, Siblings, GetChildren(predicate) and GetDescendants() — lazy-loaded through an ambient loader wired at startup.

Stampede-safe caching

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.

No GraphQL dependency

The default transport is raw HttpClient plus System.Text.Json. Swap in any custom IGraphQLTransport if you need to.

Two API flavors

Clean Get*Async<T>() returns T? and never throws. Rich Get*WithResultAsync<T>() returns metadata and diagnostics for observability.

Batched queries

GetItemsByPaths chunks paths into batched alias queries and runs them in parallel — one round trip for many items.

From install to first item

Define a template. Fetch an item. That's the loop.

Register with a single call, describe your template as a class, then resolve items through ISitecoreFacade. Axes traversal and caching are already wired.

  1. 1 Add Axlis.ORM and Axlis.ORM.GraphQL from NuGet.
  2. 2 Point AxlisGraphQL:Endpoint at your GraphQL Edge URL.
  3. 3 Call AddAxlisORM() and UseAxlis() at startup.
DictionaryEntry.cs
[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

Four layers, clean dependencies, à la carte.

Reference the whole stack, or just the contracts. Each package points strictly inward.

Where Axlis is going

A Sitecore ecosystem, one component at a time.

Axlis.ORM is the first piece. Here's what's shipped and what's next.

  1. Shipped · v0.1.0-preview

    Axlis.ORM

    The Sitecore Headless GraphQL ORM — typed templates, axes, caching, diagnostics and DI, across four packages.

  2. Planned

    Axlis.Context

    A thread-safe Sitecore context implementation for the multi-threaded scenarios where Sitecore.Context falls short.

  3. Planned

    Axlis.Diagnostics

    Enhanced diagnostics and monitoring for Sitecore applications, building on the diagnostics sink already in the ORM.

  4. Planned

    Axlis.Caching

    Advanced caching strategies for Sitecore data, beyond the stampede-safe item cache shipping today.

For early adopters

Be among the first to build on Axlis.

Star the repo, install the preview, and open a discussion. Your feedback shapes v1 and the components that follow.

Questions

Sitecore GraphQL ORM, answered.

What is a Sitecore GraphQL ORM?

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.

Does Axlis need a third-party GraphQL library?

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.

Does it work with XM Cloud and Experience Edge?

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.

Is Axlis free?

Yes — MIT licensed, open source on GitHub and published on NuGet. Free for commercial and personal use.