The multi-tenant headless CMS built for agencies, developers, and the AI era.
One deployment. Unlimited clients. Free forever.
Why Sigil?
Every headless CMS forces agencies to choose between cloud lock-in (Sanity), plugin hell (Strapi), or running separate deployments per client. Sigil is the first headless CMS with native multi-tenancy -- one deployment serves unlimited client tenants with Row-Level Security at the database layer. No per-seat pricing traps, no separate instances per client, no vendor lock-in.
Ship client sites with a Design Playground (1,400+ CSS variables, 70+ Google Fonts), block-level Resonance analytics, AI design generation (describe a page, get editable blocks), and 21 built-in plugins covering e-commerce, booking, docs, artist content, and more -- all from a single MIT-licensed codebase you own.
Quick Start
npx sigil-cms create my-site --template website
cd my-site
sigil devOpen http://localhost:4000/admin to launch the admin panel.
# Other templates
npx sigil-cms create my-blog --template blog
npx sigil-cms create my-docs --template docs
npx sigil-cms create my-store --template ecommerce
npx sigil-cms create my-band --template artistWhat Makes Sigil Different
| Feature | Sigil | Strapi | Sanity | Payload |
|---|---|---|---|---|
| Multi-tenancy | Native (RLS) | No | No (per-project billing) | Plugin (buggy) |
| Self-hosting | Free, unlimited | Free, unlimited | Not available | Free, unlimited |
| Visual design editor | Design Playground | No | No | No |
| Block-level analytics | Resonance | No | No | No |
| AI design generation | Stitch + Charlotte | No | AI Assist (text only) | No |
| Built-in plugins | 21 | Marketplace | No | Marketplace |
| Content scheduling | Built-in | Enterprise only | Yes | Yes |
| Copy/paste blocks | Built-in | No | No | No |
| Site cloning | One-click | No | No | No |
| Image focal point | Built-in | No | No | No |
| Data export (JSON/CSV) | Built-in | Paid add-on | Yes | No (51 votes open) |
| 2FA (TOTP) | Built-in | Enterprise only | Yes | No (49 votes open) |
| Tenant audit log | Built-in | No | Enterprise only | No |
| GraphQL API | Yes | Yes | GROQ | Yes |
| Seats at $29/mo | 10 | 5 | 2 ($15/user) | 3 |
| Sites at $29/mo | 5 | 1 | 1 project | 1 |
Features
Native Multi-Tenancy
One Sigil deployment. One database. Unlimited tenants. Each agency client gets their own isolated space with separate sites, themes, users, and media -- all protected by Row-Level Security at the PostgreSQL layer.
Agency (Tenant)
├── Client A (Site) ── pages, blocks, themes, media
├── Client B (Site) ── pages, blocks, themes, media
└── Client C (Site) ── pages, blocks, themes, media
// Every API call is tenant-scoped via JWT const client = createClient({ baseUrl: 'https://cms.agency.com', siteSlug: 'client-a', }); const pages = await client.pages.listPublished();
Users can have different roles per site -- an editor on one client site and a viewer on another, all within the same tenant.
Tenant switcher: Super-admins managing multiple agencies can switch between tenants from a single login — no separate URLs or re-authentication.
Subdomain routing: Each tenant gets a subdomain (client-a.agency.com) that auto-routes to the correct tenant and site. Custom domains (clientsite.com) also resolve automatically.
Site cloning: Onboard a new client in one click. POST /sites/:id/clone duplicates all pages, blocks, theme, and settings into a new site — preserving page hierarchy.
Bulk provisioning: Create a complete tenant environment in one API call — tenant + admin user + site + default theme + starter pages:
curl -X POST /api/v1/tenants/provision \ -d '{ "tenant": { "name": "Acme Agency", "subdomain": "acme" }, "site": { "name": "Client Site", "slug": "client-site" }, "admin": { "email": "admin@acme.com", "name": "Admin", "password": "..." } }'
Audit log: Every write operation is recorded with who, what, when, and which tenant — queryable for SOC2/GDPR compliance. GET /api/v1/audit?resource_type=page&from=2026-01-01
Design Playground
Give designers control without filing tickets. The Design Playground exposes 1,400+ CSS variables through a visual editor -- colors, typography (70+ Google Fonts), spacing, border radius, shadows, backdrop blur, and glass effects. Seven built-in presets provide starting points. Designers work in the browser; developers never need to touch a config file.
- Real-time dark/light mode preview
- Custom CSS injection for edge cases
- Theme duplication and multiple themes per site
- Font browser with Google Fonts search and custom font upload (.woff2, .ttf, .otf)
Resonance Analytics
Block-level engagement metrics that tell you which block users engage with, not just which page they visited. Resonance tracks viewport time, scroll depth, clicks, and bounce points per content block.
- Composite resonance score (0-100) per block per time period
- A/B experiments between block variants with traffic splitting
- AI-generated improvement suggestions per block (via Gemini)
- Embeddable
resonance_insightsblock for in-page analytics
AI Design Generation
Describe a page in plain English. Get structured, editable content blocks.
Stitch integration generates full-page HTML from a text prompt, then the Stitch-to-blocks converter parses it into Sigil blocks (hero, feature grid, CTA, text). Import the result directly to any page.
Charlotte AI provides context-aware design advice grounded in your actual theme tokens and block structure -- not generic tips. She knows your colors, your fonts, and your block types.
POST /api/v1/sites/:siteId/design/generate
{ "prompt": "A dark-themed landing page for a jazz musician with hero and upcoming shows" }
→ Full HTML mockup
POST /api/v1/sites/:siteId/design/import
{ "screenId": "...", "pageId": "..." }
→ Structured Sigil blocks added to page
21 Built-In Plugins
Every plugin is environment-gated -- missing env vars cause a graceful skip, never a crash. The core CMS always works.
| Category | Plugin | What It Does |
|---|---|---|
| Creative | Artist | Releases, events, profiles, 6 block types for musicians |
| Creative | Photos | Multi-provider storage (GCS/Azure/S3), AI tagging via Gemini |
| Commerce | Store | Stripe products, checkout, orders, webhooks |
| Commerce | Printful | Print-on-demand merchandise via Printful |
| Commerce | PayPal | PayPal/Venmo checkout integration |
| Commerce | Booking | Appointment scheduling, Google Calendar sync |
| Communication | Mailing List | GDPR-compliant subscribe/unsubscribe, broadcast |
| Communication | Contact | Form submissions with inquiry types and status workflow |
| Communication | Support | Embeddable support panel widget |
| Developer | SEO | Sitemap.xml, RSS feeds, zero-config |
| Developer | Docs | Knowledge base with categories, versioning, feedback |
| Developer | Webhooks | Event bus with delivery tracking and retry |
| Developer | Migrate | Import from WordPress, Shopify, Square Online |
| Developer | Resonance | Block-level analytics, A/B testing, AI suggestions |
| AI | Advisor | Charlotte AI chat with pgvector RAG and TTS |
| AI | Charlotte | Embeddable voice assistant widget |
| Integration | KAMERA | B2B sales intelligence — OSINT reports, company research, risk scoring |
| Integration | KOG | CRM bridge — sync contacts, organizations, and pipeline data |
| Integration | Intirkast | Social media syndication — auto-publish content to 10+ platforms |
Developer Experience
TypeScript SDK -- zero dependencies, works in Node.js, browsers, and edge runtimes:
npm install @sigil-cms/client
import { createClient } from '@sigil-cms/client'; const cms = createClient({ baseUrl: 'https://cms.example.com', siteSlug: 'my-site' }); const page = await cms.pages.getBySlug('about'); const tree = await cms.pages.getTree(); // hierarchical nav const theme = await cms.sites.getPublicTheme();
Next.js integration -- App Router, server components, static generation, ISR:
npm install @sigil-cms/next @sigil-cms/client
// app/[[...slug]]/page.tsx import { SigilPage, generateSigilMetadata, generateSigilStaticParams } from '@sigil-cms/next'; export const generateMetadata = ({ params }) => generateSigilMetadata(params.slug?.join('/') ?? 'home'); export const generateStaticParams = () => generateSigilStaticParams(); export default async function Page({ params }) { const { slug } = await params; return <SigilPage slug={slug?.join('/') ?? 'home'} />; }
GraphQL API at /graphql with queries for pages, blocks, themes, media, sites, navigation, and search.
CLI for scaffolding, dev server, builds, migrations, and seeding:
npx sigil-cms create my-site # scaffold project sigil dev # dev server with hot reload sigil build # production build sigil migrate # run database migrations sigil seed # seed demo content sigil info # environment diagnostics
REST API versioned at /api/v1/ with public and authenticated endpoints. Bearer JWT auth. Full CRUD on sites, pages, blocks, media, themes, users, and all plugin resources.
23 Built-In Block Types
| Category | Block Types |
|---|---|
| Layout | Hero, Call to Action, Bento Grid |
| Content | Text, Rich Text, Feature Grid, Pricing Table, Testimonials, FAQ, Stats Bar, Timeline, Code Block, Custom HTML |
| Media | Image, Video, Gallery |
| Interactive | Contact Form, Newsletter |
| Artist | Embed Player, Release List, Event List, Social Links, Link Tree, Artist Bio |
Plugins add more: product_grid, buy_button, booking_calendar, service_list, resonance_insights, doc_callout, doc_code. Build your own with the CmsPlugin interface.
Content Management
- Hierarchical pages with computed URL paths, full-text search, and SEO fields (meta title, description, OG image) with database-enforced character limits
- Content versioning -- unlimited revision history with full snapshots, revert to any version
- Content scheduling -- publish and unpublish at specific times via built-in daemon
- 15-language i18n via page-clone model with per-language slug uniqueness
- Media library -- bulk upload (20 files, 50MB each), folder organization, dimension metadata, multi-provider storage, image focal point for responsive cropping
- Block templates -- save and reuse block presets across sites in a tenant. Three scopes: site-only, tenant-wide (all sites), or global (platform presets)
- Block clipboard -- copy blocks from one page and paste them into any other page, even across different sites within the same tenant
- Data export -- export a full site as JSON (pages + blocks + theme) or CSV (pages for spreadsheet reporting). Import bundles into any site.
- Live preview -- split-view editor with desktop/tablet/mobile viewports
Security
- Two-factor authentication -- TOTP (RFC 6238) compatible with Google Authenticator, Authy, and 1Password. Setup via QR code, 8 backup codes, ±30s clock skew tolerance. Pure Node.js crypto — no external dependencies.
- Row-Level Security -- tenant isolation enforced at the PostgreSQL engine level, not the application layer. No shared slug tables, no cross-tenant data leakage.
- Per-tenant media isolation -- uploaded files stored under
media/{tenantId}/{siteId}/paths. Serving validates the tenant prefix matches the requesting user's JWT. - Audit log -- every write operation recorded with user, action, resource, tenant, IP, and duration. Queryable by date range, user, resource type, and site. Compliant with SOC2 and GDPR audit requirements.
- JWT authentication with 4 roles (admin, editor, author, viewer) and per-site permission overrides
Self-Hosting
Sigil runs on Node.js + PostgreSQL. No proprietary dependencies. Self-host for free -- forever, with no feature limits.
| Platform | Monthly Cost | Setup Time | Command |
|---|---|---|---|
| Docker Compose (any VPS) | ~$5-10/mo | 10 min | sigil create --template docker |
| Google Cloud Run | ~$0-5/mo | 10 min | sigil create --template gcp |
| AWS Fargate | ~$3-8/mo | 15 min | sigil create --template aws |
| Fly.io | ~$3-5/mo | 5 min | sigil create --template fly |
| Railway | ~$5/mo | 5 min | sigil create --template railway |
| DigitalOcean | ~$5-12/mo | 10 min | sigil create --template digitalocean |
| Azure Container Apps | ~$5-10/mo | 15 min | sigil create --template azure |
| Coolify / Dokku | $0 + VPS | 15 min | sigil create --template coolify |
| Local / Raspberry Pi | $0 | 15 min | sigil create --template local |
Scale-to-zero on Cloud Run and Fargate means you pay almost nothing when the admin panel is idle. A $5/mo VPS handles thousands of page views.
Cloud Pricing
For teams that want managed hosting, automatic updates, and priority support.
| Solo | Team | Business | Enterprise | |
|---|---|---|---|---|
| Price | $12/mo | $29/mo | $79/mo | $249/mo |
| Seats | 3 | 10 | 25 | Unlimited |
| Sites | 1 | 5 | 25 | Unlimited |
| Content items | 5,000 | 10,000 | 100,000 | Unlimited |
| Media storage | 5 GB | 10 GB | 100 GB | 1 TB |
| API calls | 100K/mo | 500K/mo | 5M/mo | Unlimited |
| Plugins | Core (8) | All (19) | All (19) | All + custom |
| Design Playground | Full | Full | Full | Full + white-label |
| Multi-tenancy | -- | -- | Yes | Yes |
| Resonance analytics | -- | -- | Yes | Yes |
| SSO (SAML/OIDC) | -- | -- | -- | Yes |
| Support | Community | Email (48h) | Email (24h) | Dedicated (4h SLA) |
| SLA | -- | 99.5% | 99.9% | 99.95% |
Annual billing: 2 months free (save 17%). Self-hosted is always free and unlimited.
Architecture
sigil-cms/
├── packages/@netrun-cms/
│ ├── core — TypeScript types, enums (28), Zod schemas, utilities
│ ├── db — Drizzle ORM schema, migrations, PostgreSQL client
│ ├── ui — 64 Shadcn/Radix components + 1,400+ CSS variable design system
│ ├── theme — ThemeProvider + 7 presets
│ ├── blocks — Composable content block components
│ ├── embeds — Platform embed components (Spotify, YouTube, etc.)
│ └── plugin-runtime — Plugin loader, registry, manifest system
├── packages/
│ ├── client — @sigil-cms/client TypeScript SDK
│ ├── cli — sigil-cms CLI (create, dev, build, migrate, seed)
│ └── next — @sigil-cms/next App Router integration
├── apps/
│ ├── api — Express.js backend (REST + GraphQL)
│ └── admin — Vite + React 18 SPA
└── plugins/ — 21 feature plugins (env-gated, graceful skip)
Stack: TypeScript 5.7, Node.js 20+, Express.js, React 18, PostgreSQL, Drizzle ORM, Vite, Turborepo, pnpm workspaces.
Documentation
- TypeScript SDK --
@sigil-cms/clientAPI reference - Next.js Integration --
@sigil-cms/nextApp Router guide - CLI Reference --
sigil-cmscommand reference - Whitepaper -- Full technical architecture and competitive analysis
- Pricing -- Detailed pricing, self-hosting templates, competitor comparison
- Contributing -- How to contribute
Community
- GitHub Issues -- Bug reports and feature requests
- GitHub Discussions -- Questions and ideas
- Contributing -- Fork/branch/PR workflow and code style
- Code of Conduct -- Contributor Covenant v2.1
Built With
Sigil was built by a solo founder with 25 years of cloud infrastructure experience and 20 AI development agents under SDLC v2.3 governance. The entire platform -- API, admin panel, 21 plugins, SDK, CLI, Next.js integration, Design Playground, Resonance analytics, AI design generation -- was architected and shipped by one person coordinating a fleet of specialized AI agents.
We use our own products to bring Sigil to market: KOG CRM for lead tracking, Intirkast for social media scheduling, KAMERA for prospect research, Charlotte for AI assistance. Built, not subscribed.
Netrun Systems -- California, USA.
License
MIT -- use it, modify it, ship it. No feature gating, no watermarking, no betrayal.