primo dev runs the full Primo CMS on your machine and keeps it in sync with your local files. You write blocks and content in your editor; the CMS picks up the changes. You make edits in the CMS; they’re written back to disk.
Starting the Dev Server
From a workspace root (the directory containingserver.yaml):
http://my-site.localhost:3000— the published sitehttp://my-site.localhost:3000/admin— the CMS editor
Options
Author Modes
--author controls which side wins when files and the CMS disagree. This is the most important concept in local dev — pick a mode that matches how you’re working.
- files (default)
- cms
- both (beta)
Files are source of truth.
- Edits to local files are imported into the CMS on save.
- The CMS UI is read-only for content that’s tracked in files — you’ll see a banner.
- Use this mode when you’re building blocks or page types in your editor.
Site Layout
Each site folder follows this layout:Uploads
Files dropped intosites/my-site/uploads/ are automatically imported into the CMS as site_uploads records:
- On import, new files become uploads with stable IDs.
- Hash comparison skips re-upload when content is unchanged.
- A file removed from
uploads/becomes an orphan upload warning — clean it up in the CMS or remove the record from the file system to delete it.
uploads/ and reference it from an image field without ever opening the CMS.
site.yaml and Hostname
site.yaml holds the site name, hostname, and group. These round-trip between the CMS and files — editing the name in the dashboard updates site.yaml, and editing site.yaml updates the CMS.
Avatar Uploads
iPhone HEIC photos are automatically converted to JPEG when uploaded as avatars — no manual conversion required.Validating Your Work
Runprimo validate from the workspace root to check site structure:
validate_block, validate_page, validate_site) that agents call automatically.
Next Steps
Sync with a Hosted Server
Pull and push changes against a deployed Primo
Deploy
Ship your workspace to production