Small core. Big heart.

A small CMS with a big heart.

Pluto is a layerable CMS powered by Nuxt. Start small, add layers as needed.
npm create pluto@latest

Pluto is in alpha. Expect breaking changes until the first stable release.

One command

From zero to an admin in one command

create-pluto asks a few questions, downloads a template, and installs it. Start the dev server, and your site and its admin are ready.

Layers

A small core. Add a layer when you need it.

Each layer does one job, and it plugs into the admin with one function. Pick layers, and see the admin and the config change.

Core@plutocms/core
AdminGit CMS
  • Home
  • Posts
  • Media
  • Settings
nuxt.config.ts
export default defineNuxtConfig({
  extends: [
    '@plutocms/core',
  ]
})

Everything a CMS needs, as layers

Each layer does one job. A layer plugs into the admin with one function. You add a layer when you need it.

    Layer-based

    Pluto is built on Nuxt layers. The core layer gives the admin. Backend and feature layers add data, auth, and content.

    Generated admin

    Declare a content type once. Pluto makes the list page, the form, the navigation entry, and the dashboard tile.

    Capabilities

    A layer declares capabilities. A user holds capabilities through roles. The admin is for staff only.

    Translated admin

    The admin speaks English and Brazilian Portuguese. A new language is a new JSON file.

    Mail built in

    Pluto sends its own emails through a mail driver. A guided setup page helps you connect Resend.

    One Tailwind build

    Your app owns the only Tailwind build. The admin keeps its own theme, so your site styles do not change it.

Headless

Use it headless, with any stack

The public API gives your published content as JSON. Read it from Next.js, Astro, a mobile app, or a script.

const res = await fetch(
  'https://your-site.dev/api/pluto/v1/content/product?limit=2'
)
const { data } = await res.json()
200 OK · application/json
{

Your backend

Keep the content in Git, or add a database. The admin is the same.

    Content in Git

    Posts are Markdown files in Git. Each save is a commit: in your local repository out of the box, in GitHub on a deployed site. There is no database.

    A backend layer

    A backend layer gives the database, the sign-in, and the roles. Feature layers add a shop, a blog, and a media library. Supabase is the first backend layer.

Why the name?

Pluto is small. People love it anyway.

In 2006, Pluto lost its title of planet. It is smaller than our Moon. Then, in 2015, the New Horizons probe flew past it, and Pluto was not simple at all.

    It has a heart

    Pluto has a big, pale plain in the shape of a heart: Tombaugh Regio. The heart is in our logo. Pluto is free and open source, and we want it to be friendly.

    It is made of layers

    New Horizons saw more than 20 layers of haze in the air of Pluto. Pluto CMS has layers too: a small core, and one layer for each job.

    Small is a feature

    A dwarf planet is still a world. The core is small, and you add only what you need. Your site stays light.

Ready to start small?

Create a project in one command. Read the guides when you want to add your own layer. These docs run on Pluto too, and we edit them in its admin.