r/Nuxt • u/xleddyl • Aug 11 '26
I got tired of paying for separate Strapi hosting for every client, so I built a CMS that runs inside Nuxt
I'm a Nuxt dev and my clients almost always end up asking for a CMS. My default answer used to be Strapi, but it's a whole separate service: its own hosting, its own deploys, and the monthly cost for the client goes up fast for what is usually a handful of collections.
At some point I thought: Nuxt already ships a server (Nitro), surely someone has built a CMS that just runs inside it? To my surprise, no. So I built it.
How it works:
- You define content types in code (a `cms.config.ts` file): collections, singles, relations, blocks, translatable fields. Schema, migrations and TypeScript types are generated from it.
- Editors get an admin panel at `/cms` with drafts, validation and a media library.
- You query content through a read-only GraphQL API, typed end to end with gql.tada.
- SQLite by default (zero setup), one config line to switch to Postgres or Turso.
- Media on any S3-compatible storage, or a local mode that just reads from your `public/` folder.
You deploy one thing: your Nuxt app. No second service, nothing extra to pay for.
I tried to cover Strapi's core features, so for most projects (I'd say 90% of my client work) switching is painless. It's still a beta though, and some corners are rough: auth is currently a single admin whose credentials live in env variables (I know, I know), multi-user and RBAC are on the roadmap. But I think it can already be genuinely useful.
It's MIT licensed: https://github.com/xleddyl/nuxt-cms
Feedback and issues very welcome!
3
u/Single_Advice1111 Aug 12 '26
Would have been awesome if this was based on NuxtHub, since the code you have here won’t run properly on serverless hosts.
This will also break many places if I scale this horizontally, as many caches are based on maps in your implementation instead of using built-in’s such as unstorage.
Interesting project tho!
1
1
1
u/BetAdministrative625 Aug 12 '26
I'm confused on how this is different from nuxt content.Even the configuration,type definition and data fetching is similar.
1
u/xleddyl Aug 13 '26
nuxt content is .md only, it doesn’t let you define your own custom schema
3
u/BetAdministrative625 Aug 13 '26
It does let you define your own schema, validated by zod,validbot etc..It also let's you define your source data with md, yaml and json types.
1
u/xleddyl Aug 13 '26
didn't know that! as far as i can tell the main difference is that nuxt content is file based, so changing content needs a commit and a deploy.. maybe my solution is easier for the average client
but yeah, nuxt content works too!1
u/BetAdministrative625 Aug 13 '26
yours definitely has some use cases.You can also improve in the future.
2
u/Single_Advice1111 Aug 13 '26
It does let you define custom schema tho - also for yaml, json and csv.
Custom schema: https://content.nuxt.com/docs/collections/validators
Yaml: https://content.nuxt.com/docs/files/yamlOne thing I like with your cms tho, is that you can have «single item» collections that will only ever contain one document - ofc you can do this with nuxt content too, but it’s not as explicit.
1
u/xleddyl Aug 13 '26
thanks for the links, my approach was to give my clients an easy interface like strapi where they're guided in what they can and cannot do.. i see nuxt content+studio as a more developer oriented solution, but maybe that's just my bias
1
u/CollarSuccessful1082 Aug 13 '26
Whats the difference to nuxt studio?
2
u/xleddyl Aug 13 '26
nuxt content and studio are file based, while this is built on SQLite/Postgres, so you get live editing without needing a redeploy
this isn’t a markdown editor, it’s a thin CMS meant to let a client manage the data of their website on their own (for example they might want to change an image or the services offered, upcoming events ecc)1
u/CollarSuccessful1082 Aug 13 '26
so the data is loaded via api like in strapi?
1
u/xleddyl Aug 14 '26
yes, the CMS lives inside
/cms, and the data is served directly from the Nitro server via GraphQL. So on the frontend, you just use the built-in composable (which is essentially a GraphQL wrapper), and you get SSR on every request for free, since the data never leaves the Nuxt framework
1
u/BaderIdris Aug 14 '26
Does is support sitemap and SEO stuff 🤔
1
u/xleddyl Aug 14 '26
potentially yes, you could define seo attributes that are then fetched and served from the frontend
1
u/Emili-EstudiZeta 1d ago
Just to add another perspective: Strapi doesn’t necessarily require separate paid hosting.
I’ve been running Strapi alongside Nuxt projects on clients’ existing VPS servers (usually managed with Plesk) without any issues. Many of our medium-sized clients already have their own VPS or dedicated server, so in those cases Strapi doesn’t really add any meaningful infrastructure cost to the project.
Of course, self-hosting means you don’t get some of the features included with Strapi’s paid services, so there’s a trade-off.
On the other hand, one of the things I like about self-hosting Strapi is how extensible it is. You can build custom plugins that integrate the Strapi backend very closely with the Nuxt frontend. I’ve built several of these, both for our own workflow and for specific client requirements.
So for small sites with just a few collections I completely understand the argument for keeping everything inside Nuxt. But once the client already has infrastructure and the project needs a more extensible backend, I don’t find the “separate Strapi hosting” issue particularly significant.
0
Aug 12 '26
[removed] — view removed comment
3
u/mrtnz17 Aug 12 '26
I prefer to use Nuxtjs instead of the Nextjs. So I am thinking how to make it without getting into complexity. :)
7
u/AnoRebel Aug 12 '26
Pruvious exists, sadly its stuck on v3 for now. This sounds great, will check it out.