The Three Parts
Config File
.aci.yaml tells ACI what framework you use, where contract files live, which routes are CMS-managed, and what render capabilities your site supports.Contracts
Component and layout contracts define content names, Zod schemas, slots, render modes, and optional image slots.
Renderer Entry
ACI calls a
GradialRenderer entrypoint with validated content. Your code returns rendered HTML and optional cache metadata.Config File
.aci.yaml lives in the project root:
framework values are astro, next, sveltekit, and custom.
Component Contracts
Component contracts live in code, but they should stay separate from runtime component implementations. The ACI compiler imports the contract tree to extract schemas and metadata, so contract files must not import Astro, React, Svelte, CSS, browser APIs, or framework runtime modules.src/cms/contracts/components/index.ts:
- Validation: ACI validates authored JSON against the component schema. If an editor or agent puts the wrong shape in a field, the compiler catches it before anything ships.
- Rendering eligibility: Render modes tell ACI whether a block can be statically rendered, server-rendered, or hydrated as a client island.
- Agent guidance: Stable component names and schemas give AI agents a safe, well-described content surface to work against.
Schemas live in code, right next to the components that use them. The developers who build the components also define what content those components accept, so there’s no drift between CMS configuration and what your code actually expects.
Layout Contracts
Layouts declare named slots/regions that pages can fill:layout must match a layout contract, and its regions keys must align with layout slots.
Image and DAM Fields
UseGradialImageSchema for DAM-backed image fields. Components that declare a GradialImageSchema field must also declare an imageSlots contract so ACI knows which derivatives to generate.
.aci/compiled.
Renderer Entry
The renderer entry exports aGradialRenderer:
Code Capsules
When ACI builds your project, it produces a code capsule, a self-contained artifact that includes your built frontend, registry metadata, static client assets, and renderer entrypoint. The same capsule shape is used for preview and publish. Content can change independently from code, and ACI links a content branch to a code artifact when it needs to render or publish.Framework Support
Astro
The recommended starting point. Static-first sites, component islands, and framework-native development.
Next.js
SSR-oriented sites through the App Router integration.
SvelteKit
SvelteKit rendering through the same contract shape, no special-casing required.
What ACI Extracts
ACI extracts a machine-readable registry:- Components: names, schemas, render modes, optional image slots
- Layouts: layout names and slot requirements
- Routes: CMS-managed and framework-owned route patterns from
.aci.yaml - Capabilities: static, SSR, island, and fragment support
Keep compile-time contracts small and deterministic. Runtime component mapping, design-system imports, CSS, and browser behavior belong in your framework code, not in contract files.
Next: Framework Guides →