Getting started
What is Pluto
Pluto is a CMS that you build from Nuxt layers. Use it in your Nuxt app, or headless with any stack.
Pluto is a layer-based CMS. Its admin and its API run on Nuxt. Your site can be the same Nuxt app, or a site in any other framework or stack that reads the content through the API. See Use Pluto headless.
You do not install one big system. You install a core layer. Then you add the layers that you need.
Pluto is in alpha. Expect breaking changes, incomplete features, and rough edges.
Main ideas
- Layers. Pluto uses Nuxt layers. Each layer has one job.
- Opt-in features. A layer adds its features only when you extend it.
- TypeScript first. The contracts of Pluto are typed.
- Your backend. Pluto keeps the content in Git, with no database, or in a database from a backend layer.
- Data access. A Nuxt site reads its data through composables. A site in any stack reads it through the Public API.
The layers
| Layer | Package | Job |
|---|---|---|
| Core | @plutocms/core | The admin shell, the content model, the extension registry, mail, i18n. It also holds the Git CMS. |
| Supabase | @plutocms/supabase | Supabase database, auth, users, roles, and migrations. |
| Shop (Supabase) | @plutocms/supabase-shop | Products, with photos from the media library. |
| Blog (Supabase) | @plutocms/supabase-blog | Blog posts with a rich text editor. |
| Docs | @plutocms/docs | An admin editor for the pages of a Nuxt Content site. It builds on the Git CMS. |
| 3D | @plutocms/3d | 3D models (.glb) in the media library, for every backend. |
A layer brings the layers that it builds on. For example, @plutocms/supabase-shop extends @plutocms/supabase, which extends @plutocms/core. Your app extends only the top layer that it uses. See Layers.
Requirements
- Node.js 22 or newer, or Bun.
- A package manager: npm, pnpm, yarn, Bun, or Deno. The CLI asks which one to use.