suggest edits


Primo is a new kind of monolithic CMS that makes it significantly easier to publish websites by providing a delightful content management experience and an embedded development environment. Primo sites get uploaded to a Github repository as a static site bundle, from where they can be deployed to any web host (usually for free).


Primo is most technically different from traditional monolithic CMSs like WordPress, Drupal, and Joomla in that it doesn't host your site for you, but instead builds the site as a static bundle so that they can be hosted by a separate server. Additionally, Primo offers more immediate control over the site's code by embedding a modular development environment, where custom development in a traditional monolithic CMS is a much more involved process.

Project Status

Primo version 2 is in Public Beta as of April 28, 2023. Version 2 introduces significant usability and stability improvements over version 1 and is much more scalable since it stores sites, pages, and sections in a database instead of a flat file backend.

How it works

Primo is a SvelteKit application using Supabase as a backend. Sites, pages, page sections, and symbols (i.e. parent components) are all stored in the database as individual rows containing each's code, fields, and content.

On-page editing works by matching a block's field values to text, link, and image values or explicitly set data-key attributes within the block's rendered HTML. Editable text is powered by contentEditable = true and a TipTap/ProseMirror editor for Markdown fields. The dev environment is powered by CodeMirror.

Rollup and the Svelte compiler are used to compile page blocks into Svelte components (alongside PostCSS for nesting) and to build the static files for the deployed website, which Primo then uploads to Github via its REST API.