Primo is a CMS for developers who build sites for clients who need to manage them afterward. Your entire site stays in sync as both a database and a folder of files, so Claude Code, Cursor, and any AI agent can edit it directly. Your clients manage content visually in the browser.
In active development since 2019. Self-hosted by freelancers, agencies, and small teams.
One-click deploy:
One Go binary. PocketBase (SQLite) for storage. Svelte 5 for the editor UI and for the blocks you write. The same server hosts the CMS and serves your published sites — no external services, no separate frontend to wire up.
Every site lives in two synchronized representations: a relational database (powering the visual editor and multi-site serving) and a folder of structured files (powering code editors, version control, and AI agents). Edit either side, both stay in sync.
primo pull yourserver.com # pull your site down as local files
claude # edit with Claude Code, Cursor, or any agent
primo push # push changes back — CMS updates liveYour clients keep editing content in the browser the whole time. Code and content stay in sync.
- Visual editor — non-technical editors work within the guardrails you define. No more "I broke the site" texts.
- Block library — reusable Svelte components, shared across all your sites.
- Static output — clean, fast, SEO-friendly HTML. Deploy to any static host, or let Primo serve it.
- Multi-site — one server, many sites, one dashboard. Connect a domain per site.
- Local-file workflow (beta) — pull/edit/push with the CLI, AI-agent compatible.
The easiest way to get started is Railway:
Or run it anywhere Docker runs:
docker run -d -p 8080:8080 -v primo-data:/app/pb_data ghcr.io/palacms/palacms:latestThen open your server's URL to create your first site.
Next steps:
- Quickstart — key concepts
- Build your first site
- Write your first block
Freelancers, small agencies, and small teams who code their clients' sites and need the clients to manage content afterward — without breaking anything.
- vs. WordPress — same mental model (CMS + blocks + multi-site) but built on modern tooling: Svelte instead of PHP, static output instead of server rendering, one binary instead of themes + plugins + hosting.
- vs. Webflow / Framer — your clients get a similar visual editor, but you write real code instead of using a proprietary builder. Self-hostable, no vendor lock-in.
- vs. Astro / Eleventy — Primo is a static site generator too, but bundles the CMS, block library, and multi-site hosting with it. You get the SSG workflow and the client handoff.
- vs. Sanity / Storyblok — structured content and component blocks, but monolithic: no separate frontend to wire up, no API tokens, no deployment glue.
- Stable: visual CMS, block library, static output, multi-site, self-hosted deployment.
- Beta: CLI + local-file workflow (
primo pull/primo push), AI-agent compatibility.
- Installation — self-host or run locally
- Quickstart — key concepts
- Writing Blocks — Svelte components
- Field Types — content field reference
- Managing Sites — site groups
- Page Types — custom page structures
- Collaboration — working with editors
- Keyboard Shortcuts
- GitHub Issues — bugs and feature requests
- GitHub Discussions — questions
- CONTRIBUTING.md — if you want to hack on Primo itself
