Skip to main content
The core schema is only half of your GraphQL API. Every ExuluContext your backend registers is converted into a table definition at boot and run through the same schema generator as the core tables — producing a full type family plus knowledge-specific operations.
Your deployment’s schema differs from this reference. The generated core SDL this section is verified against contains no context types at all, because contexts are defined per deployment. The patterns below are exact, but the names depend on your context IDs — use /explorer to see the real thing.

From context to type name

The generated table (and type) name is the sanitized context ID — lowercased, spaces replaced with underscores — with an _items suffix: Because the name always ends in s, the singular and plural forms used by the naming conventions are identical — every operation for a context shares the single prefix {context_id}_items.

The generated type family

Take the product_docs context used throughout the developer docs:
The generator produces the object type, an input type, a filter type, per-enum types, and result wrappers:
The chunks field exposes the item’s embedded chunks; its element type is part of the core SDL (verbatim):

Field type mapping

Operations every context gets

The full CRUD convention set applies — product_docs_itemsById, product_docs_itemsPagination, product_docs_itemsCreateOne, and so on:
The returned job is the embedding job’s ID when the context is configured to calculate vectors on insert. On top of CRUD, every context type adds retrieval and pipeline operations. Queries:
Mutations:

Vector search and chunks

VectorSearch is the retrieval workhorse — semantic, hybrid, or full-text search over the context’s chunks, with cutoffs, context expansion, and entity filters. It gets its own page: Vector search. GenerateChunks (re-)chunks and embeds items matching a filter, returning { message, items, jobs }; DeleteChunks removes chunks while keeping the items. ChunkById fetches a single chunk joined with its parent item.

Sources and processors

ExecuteSource triggers one of the context’s registered data sources with runtime inputs, returning { message, jobs, items }:
Contexts that define a processor additionally get:
Both return { message, results, jobs } — direct results when the processor runs inline, job IDs when it runs on a queue.

Entity operations

Contexts with the entity layer enabled maintain a graph of named entities extracted from chunks. EntitiesForItem lists an item’s entities with mention counts, StaleEntityCount reports items needing re-extraction, BackfillEntities re-extracts in bulk, ExtractEntities/DetachEntities operate on a single item, PurgeEntityType drops an entity type, and EntityModel/SetEntityModel read and override the extraction model.

License-gated tables

Some core tables only exist on deployments with an enterprise license (EXULU_ENTERPRISE_LICENSE). On a community-edition deployment their types and operations are absent from the schema entirely: The generated reference SDL includes all of them. The internal rbac sharing table itself is never exposed via GraphQL, even on licensed deployments — you interact with sharing through the RBAC field and RBACInput described in Conventions.

Runtime enums

Two enums are populated from the running deployment rather than from table definitions:
  • QueueEnum — one value per queue registered with ExuluQueues at boot. It parameterizes the jobs and queue queries and the queue-management mutations (pauseQueue, resumeQueue, drainQueue, deleteJob, retryJob). In a deployment with no queues (or in the generated reference SDL) it contains the single placeholder value NO_QUEUES.
  • JobStateEnum — fixed job lifecycle states (verbatim):

Next steps

Vector search

The retrieval query in depth — methods, cutoffs, expansion, entity filters.

Defining contexts

Create the contexts that generate these types.