Skip to main content
Primo is a visual CMS that represents your entire site as files. Pull it down, edit with Claude Code, Cursor, or any agent, push it back. Your team manages content visually in the browser.
docker run -d -p 8080:8080 ghcr.io/primocms/primo:latest

What Makes Primo Different

Most web tools force a tradeoff: code control or visual editing. Primo keeps both in the same source of truth.

Files as the source of truth

Blocks, pages, fields, and content all live as YAML and Svelte on disk. Version them in Git, edit them in any editor.

AI agents edit files

Any tool that reads files works — Claude Code, Cursor, Cline. The official MCP server gives agents live schema validation and scaffolding.

Humans edit visually

Non-technical teammates open the site in the browser, click anything, and edit it. No code, no broken designs.

Self-hosted and open source

Run it on Railway, Fly, a VPS, or your laptop. MIT license, single Docker container, SQLite under the hood.

How It Works

  1. Build with code. Write Svelte components and attach content fields with YAML. The CLI runs the full CMS locally and watches your files.
  2. Hand off visually. Invite collaborators — they edit content in the browser without touching code.
  3. Edit anywhere, anytime. Pull the site to your laptop, let an agent change a layout, push it back. Or stay in the browser. Same files either way.

Who It’s For

Primo is built for developers who build sites for other people — freelancers, agencies, and small teams who want full code control without leaving clients stranded.

Quick Start

Quickstart

Build your first site in 5 minutes — local or deployed

Install

Self-host with Docker, Railway, or Fly.io

Build with the CLI

Develop sites locally with primo dev and files as the source of truth

MCP for AI Agents

Wire up Claude Code, Cursor, or any MCP client

Built on Svelte

Primo blocks are written in Svelte 5. If you’re new to Svelte, the official tutorial covers what you need: scoped styles, simple HTML-based syntax, and reactive runes ($state, $derived, $effect).