Pull your entire site as files.
Pages, page types, components, content, and fields—all local on your machine.
Build with your AI agent. Edit and publish in Primo.
Files for your agent.
Buttons for your clients.
Pull your entire site as files.
Pages, page types, components, content, and fields—all local on your machine.
Build with any agent.
Change the design, copy, or features with your AI tool.
Hand it off to your client.
Push to your server. Clients edit, add pages, and publish.
Working with an agent
Bring a site, a brief, or an idea. See what your agent can turn it into—and what your client can edit.
Give your agent the current site and its content. Bring the pages and design into Primo, with editing fields for your client.
“Rebuild my current site in Primo, keeping its content and overall design.”

“Rebuild my current site in Primo, keeping its content and overall design.”
Share a brief, documents, or meeting notes. Ask your agent to organize the material and draft the pages your site needs.
“Use this brief and these documents to draft our story, menu, and private dining pages.”
Neighborhood café + wine bar
Seasonal menu, local growers
Private dinners: 8–20 guests
Warm, welcoming, no fuss
Seasonal food, good wine, and a room of your own. Gather 8–20 guests for an evening at Maison Verde.
Plan your evening ↗“Use this brief and these documents to draft our story, menu, and private dining pages.”
Try a new layout, palette, or type style. Compare a few directions before choosing one to take further.
“Show me three directions for this homepage, using the same copy.”
“Show me three directions for this homepage, using the same copy.”
Help visitors work out the cost before they enquire. Your agent builds the calculator; your client updates the menus and prices in Primo.
“Build a private dining calculator with guest count, menu choices, and an optional drinks package. Show an itemised estimate and let visitors copy their choices into an enquiry.”
“Build a private dining calculator with guest count, menu choices, and an optional drinks package. Show an itemised estimate and let visitors copy their choices into an enquiry.”
Ask your agent to review page titles, descriptions, headings, and image descriptions. Get clear, useful metadata alongside the content it describes.
“Review our site’s SEO. Improve the page titles and descriptions, and add useful descriptions to our images.”
Gather 8–20 guests for seasonal food, natural wine, and a room of your own. Explore private dining at Maison Verde and plan your evening.
Guests sharing dinner around a long table at Maison Verde.
“Review our site’s SEO. Improve the page titles and descriptions, and add useful descriptions to our images.”
Turn a page into a template with fields for the details that change. Your client can create the next one without starting from scratch.
“Turn our private dining page into a reusable template so my client can add new dining packages.”
Fields for every package
Seasonal plates to share, a few good bottles, and an afternoon of your own.
Enquire about your date ↗“Turn our private dining page into a reusable template so my client can add new dining packages.”
The editor
Hand off control, with guardrails built in.
Give clients a powerful, simple CMS to edit content, build pages, and publish changes—all within the structure and design you’ve defined.
Everything your clients need to keep their site growing.
A starting point for your next client project.
Choose a starter, make it your own, and hand your client the editor.
Swipe to explore
Every starter includes the site’s code, content, page types, and fields. Yours to change.
Custom code.
A client-ready editor.
Primo brings your components, content, and page types into one system—files for your agent and an editor for your clients.
| Capabilities | Primo | WordPress | Headless CMS | Site Builders |
|---|---|---|---|---|
| Code | Svelte components as files | PHP themes and plugins | Frontend files | Builder; export options vary |
| Client editing | On the rendered page | Block editor or admin | CMS studio or custom editor | Visual canvas |
| Content model | Fields and page types as files | Core, plugins, or code | Code or admin, depending on CMS | Managed in the builder |
| Agent workflow | Entire site as local files | Code; content via CLI or API | Code; content via CMS API | Custom code and integrations |
| Hosting | Self-hosted · MIT | Self-hosted or managed · GPL | Hosted or self-hosted | Usually platform hosting |
Scroll to compare
Frequently asked questions.
What happens to my content if Primo disappears?
Your content lives in SQLite (via PocketBase); your code lives in your repo. primo pull gives you a static export of both at any time. Primo is MIT-licensed — even if we vanished tomorrow, the code you’ve been running keeps running, and every site you’ve built keeps shipping.
Is this production-ready, or a side project?
Seven years in, v3.3. Production sites include agencies shipping client work, small commerce stores, documentation sites, and our own marketing pages. Same model since 2019 — agents are a new client of the same system, not a new product.
How is this different from Payload, TinaCMS, or Sanity Studio?
Payload is a headless CMS — your schema lives in their admin, content is fetched via API. TinaCMS puts a git-backed editor in front of markdown files. Sanity Studio is a React-based admin on top of their hosted content lake. Primo is none of those: the editor and the renderer both read the same Svelte files and database rows, with no API translation layer between them.
Can I use React instead of Svelte?
Not today. Primo is built around Svelte’s compile-time approach — it’s what lets blocks be “just files” the editor and renderer can both read directly. React support inside Primo blocks is not on the roadmap. What is on the roadmap is primo integrate <framework> — a way to layer Primo on top of an existing SvelteKit (and eventually Astro, with Next.js aspirational after that) app, where your production components stay in the framework and Primo just owns content + the editor. So you’d get a visual CMS for pages that live inside your app’s codebase, even though the blocks themselves are still Svelte.
What does a block actually look like?
Two files, co-located. The component renders; the schema tells the editor which fields it has.
# blocks/hero/fields.yaml
- name: headline
label: Headline
type: text
- name: subheadline
label: Subheadline
type: text
- name: cta
label: CTA
type: link
How do agents authenticate and push?
The CLI reads a PRIMO_TOKEN from your environment — you generate one per site in the admin. primo pull <host> clones the project; primo push uploads only the files that changed. Same auth an editor uses; no API surface to learn. Works over HTTPS to any Primo instance, including self-hosted.
I built Primo because there was no good way to build custom sites I could hand off to my clients with confidence. Seven years later, the model still holds — it just also happens to be the shape agents want, too.
Build with an agent.
Hand it to a human.
Start with your agent or the CLI. Build locally, then deploy an editable CMS when you’re ready.
Create a new Primo site for my client. Set up a local workspace, help me choose a marketplace starter, and open the Primo editor. Read the Primo docs at https://docs.primo.build before starting.
MIT · open source · free forever