Features Apograph CMS on GitHub

Package map

Every app and package, one line each, so you can find the right one quickly.

Documents 0.5.2 Updated Edit this page Report a problem

On this page

Two apps, two test suites, and the packages that make up the system — a lockstep set under the @apograph scope, one version number across the whole set (sixty published at 0.5.2, and the number goes up with each plugin group added).

Three do not follow that rule. create-apograph-app is unscoped, so that both npx create-apograph-app and npm create apograph-app work; it is released in lockstep with everything else. nx and copilot-provider-fake are private and never published at all — the first is repository tooling, the second is the end-to-end suite’s model fixture.

Apps

ProjectWhat it is
adminReact 19 + Vite SPA. Composes admin plugins via createAdmin.
serverNestJS API. Composes server plugins via createServer. Owns your content types.
admin-e2ePlaywright page-object suite for the admin, with /api mocked.
server-e2eIn-process testcontainer and supertest suite for the API.

Hosts and infrastructure

PackageRole
bootstrap-adminHost. createAdmin({ plugins }) — React root, router, providers.
bootstrap-serverHost. createServer({ plugins }) — Nest app, /api prefix, validation, API reference.
databasePlugin. One Drizzle connection, the unit of work, and the transactional outbox.
utils-server, utils-adminShared plumbing. The admin’s apiClient, query client, slots and error handling.
design-systemshadcn/ui component library and Tailwind tokens.
nxNx plugin. Infers the db:generate, db:migrate and db:studio targets.
cliThe apograph binary — build, run and migrate an installed app.
create-apograph-appThe scaffolder. Unscoped, so npx create-apograph-app works.

cli and nx are two adapters over one implementation. Everything needed to operate an app used to live in nx, which is private and will never be published — so an app installed from npm had no way to migrate its database at all. See the CLI reference.

Content

PackageRole
content-domainThe framework-free kernel: validation, the publish gate, rich-text rules.
content-serverPlugin. The registry, the DSL, entries, revisions, the public API.
content-adminPlugin. The content library, the records table, the entry editor.
content-graphqlPlugin. GraphQL as a protocol adapter over the public API.
alarms-serverPlugin. Content rules and findings. Two tables; never blocks a write.
alarms-adminPlugin. The rules page, the entry rail’s checks block, “Save as rule”.
segments-domainThe framework-free entitlement kernel: the canRead rules.
segments-serverPlugin. Audiences, per-entry access, and the public read predicate.
segments-adminPlugin. The audience directory and the entry’s access controls.
protection-domainThe framework-free kernel: evaluateProtection, which counts approvals against a rule.
protection-serverPlugin. Three tables, the publish guard, /api/protection. Published with the next release.
protection-adminPlugin. The entry’s Review section and publish verdict, the settings tab, the Reviews page.

Webhooks

PackageRole
webhooks-domainThe framework-free kernel: the event catalogue, the envelope, the signature, the retry ladder, the URL policy.
webhooks-serverPlugin. Three tables, the outbox fan-out subscriber, the delivery worker, /api/webhooks.
webhooks-adminPlugin. The global /webhooks pages in the directory group: endpoints, the delivery log, redeliver, rotate, test.

The domain package is what a receiver can import to verify a signature with the same code that produced it. See webhooks.

Identity, users and workspaces

PackageRole
identity-domainThe framework-free SSO seam: the provider port, the profile, the conformance kit.
identity-serverPlugin. Auth, sessions, RBAC, API tokens, preferences, SSO.
identity-adminPlugin. Login and accept-invite pages, auth state.
identity-provider-oidcGeneric OpenID Connect, plus presets for five named vendors.
identity-provider-githubGitHub and GitHub Enterprise. OAuth2, so not a preset.
identity-provider-samlSAML 2.0 — a POST binding and XML signatures.
identity-provider-fakeScripted and offline. Published and installed everywhere, registered nowhere.
users-serverPlugin. Member management — list, invite, edit, disable, sessions.
users-adminPlugin. The members roster, invite flow, user detail, preferences.
workspaces-serverPlugin. Workspaces, memberships, content grants.
workspaces-adminPlugin. The workspace table, create wizard, and workspace shell.
api-tokens-adminPlugin. The API Tokens page.
activity-serverPlugin. The audit schema and read API.
activity-adminPlugin. Activity logs and the home recent-activity panel.

Media, localization and editing

PackageRole
media-serverPlugin. Assets, folders, derivatives, the public media API.
media-adminPlugin. The media library, the entry editor’s Media tab.
media-provider-localLocal filesystem storage adapter. The default install.
media-provider-s3S3-compatible: AWS, R2, MinIO, Spaces, B2, Wasabi.
media-provider-azureAzure Blob Storage — the one store with no S3 compatibility.
media-provider-gcsGoogle Cloud Storage, with native Google auth.
media-provider-vercel-blobVercel Blob. Every blob is world-readable.
media-provider-memoryIn-memory. For tests and offline development, never a deployment.
media-provider-testkitThe contract suite a storage provider is written against.
transfer-domainThe transfer kernel: the document contract, the four formats, identity.
transfer-serverPlugin. One-hop export, two-phase import. Owns no tables.
transfer-adminPlugin. Export and import in the Content Library’s menus.
i18n-serverPlugin. Locale policy, bound to content’s entry-extension port.
i18n-adminPlugin. Locale switcher, locale panel, coverage card. No routes.
wysiwyg-adminPlugin. The rich-text control. One slot contribution, no routes.
query-builder-adminThe filter and query-builder UI.
shell-adminPlugin. The authenticated chrome — sidebar, layout, home.
insights-adminPlugin. The Insights dashboard frame. Ships no widgets.

AI and agents

PackageRole
copilot-domainThe framework-free core: the model port, tool contracts, the untrusted-content fence.
copilot-serverPlugin. The run engine, the SSE route, the write path, skills.
copilot-adminPlugin. The docked chat window and the full-page Agents view.
copilot-provider-anthropicNative Claude adapter. The only one that may import a vendor SDK.
copilot-provider-openaiAny OpenAI-wire endpoint — Ollama, vLLM, Azure, OpenAI.
copilot-provider-fakeScripted and deterministic. Private and unpublished — the e2e fixture.
tools-serverThe shared, transport-neutral agent tool registry.
mcp-serverPlugin. The Model Context Protocol endpoint. Owns no tools.

How they resolve

Workspace packages are consumed from source: their exports point at ./src/index.ts, and a custom TypeScript condition makes that resolve. No build step is needed to consume one.

That is also why publishing has a pack step that rewrites each manifest — a consumer outside the workspace cannot resolve from source.

Run npx nx sync after changing cross-project dependencies, and npx nx graph to see the graph.