AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Embedded, code-first headless CMS for Nuxt and Next.js
Developer toolsTypeScript · VueGitHub @maritonxOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
The embedded, code-first headless CMS for Nuxt and Next.js.
A headless CMS that lives inside your Nuxt or Next.js app: the content model is TypeScript in
your repository, the admin and APIs come with it, and there is no extra server to run.Read the full README ↗The embedded, code-first headless CMS for Nuxt and Next.js.
A headless CMS that lives inside your Nuxt or Next.js app: the content model is TypeScript in your repository, the admin and APIs come with it, and there is no extra server to run.
Website · Documentation · เอกสารภาษาไทย · Getting started · Examples · Sponsor
/admin and
the API at /api/cms. One deployment, one database (yours, with prefixed tables).__Host- and HSTS is on in production, unreadable
documents answer 404, and the audit log is signed against tampering.[!NOTE] Easy CMS 1.0 is out (2026-10-17), the first version meant for production use. From 1.0, breaking changes come only in a major release, with an upgrade guide; renamed APIs keep working until the next major, with a warning. Versions and deprecations says what is covered (the shop, GraphQL and MCP plugins are still experimental). Upgrading from 0.x: From 0.x to 1.0.
To try it without installing anything, use the Deploy buttons above: a blog with its admin on Vercel or Netlify, with a database and file storage made for you (one-click deploy).
In a Nuxt 4 or Next.js 15+ project:
npm create easy-cms@latest # or: pnpm create easy-cms · yarn create easy-cms · bun create easy-cms
npm run dev # then open http://localhost:3000/admin
create-easy-cms installs the packages with your package manager, writes easy-cms.config.ts
with a sample collection and a secret in .env, and wires up the framework. Describe your
content in the config:
// easy-cms.config.ts
import { defineConfig } from '@easy-cms/core'
import { sqlite } from '@easy-cms/db-sqlite'
export default defineConfig({
secret: process.env.EASY_CMS_SECRET!,
db: sqlite({ url: 'file:./cms.db' }),
collections: [
{
slug: 'posts',
drafts: true,
fields: [
{ name: 'title', type: 'text', required: true },
{ name: 'slug', type: 'slug', from: 'title' },
{ name: 'body', type: 'richText' },
],
},
],
})
Then read it in your pages, fully typed:
// Nuxt: server/api/posts.get.ts
export default defineEventHandler(async () => {
const cms = await useEasyCMS()
return cms.find('posts', { sort: '-createdAt', limit: 10 })
})
Next.js uses getEasyCMS(config) in Server Components; any other client uses REST at
/api/cms/posts.
No Nuxt or Next.js? Run the same command in an empty directory to get a standalone server:
npm create easy-cms@latest my-cms
cd my-cms && npm run dev # http://localhost:4000/admin
Content modeling
Admin
APIs
where queries, a GraphQL
API (plugin), and generated types for frontends in other repositoriesData and operations
easy-cms CLI: migrations, backups, copying between databases, scheduled jobsSEO and AI
llms.txt, Markdown versions of pages and AI crawler rules| Plugin | What it adds | Guide |
|---|---|---|
@easy-cms/plugin-seo | Meta fields, search preview, sitemap, robots.txt, structured data, llms.txt | SEO |
@easy-cms/plugin-form-builder | Forms built in the admin, submissions with an overview and a dashboard panel, email notifications, spam protection, <easy-form> | Forms |
@easy-cms/plugin-redirects | Redirects managed in the admin, automatic redirects when a page moves | Redirects |
@easy-cms/plugin-nested-docs | Pages inside pages: parents, full paths, breadcrumbs, a tree in the admin | Nested pages |
@easy-cms/plugin-graphql (experimental) | GraphQL API: queries and mutations for every collection and global, with your access rules | GraphQL |
@easy-cms/plugin-mcp (experimental) |
Experimental plugins share the version number but may still change in a minor release, even after 1.0, until they are declared stable.
Plugins are functions over your config: write your own with fields, endpoints, admin components,
admin pages, dashboard panels and CLI commands. See
Plugins. Packages can also add field types, such as color from @easy-cms/fields: see
Custom field types.
| Package | |
|---|---|
@easy-cms/core | Config, Local API, REST handler, auth, access control, hooks, localization, versions, webhooks |
@easy-cms/nuxt | Nuxt 4 module: REST API, admin, typed useEasyCMS() |
@easy-cms/next | Next.js adapter: route handlers, typed getEasyCMS() |
easy-cms | CLI: migrations, types, users, backups, standalone serve |
create-easy-cms | Adds Easy CMS to a project, or creates a standalone server |
@easy-cms/db-sqlite | SQLite / libSQL database adapter |
@easy-cms/db-postgres | Postgres adapter (postgres.js or PGlite) |
@easy-cms/storage-s3 | Uploads on S3, Cloudflare R2 or MinIO |
@easy-cms/storage-vercel-blob | Uploads on Vercel Blob |
| Example | |
|---|---|
examples/nuxt-blog | Nuxt 4 blog on SQLite, with every official plugin |
examples/next-blog | Next.js 16 blog on Postgres (PGlite locally) |
examples/standalone | Standalone server with a plain HTML frontend on another origin |
examples/shop | Next.js 16 shop: products, cart, checkout (bank transfer, or Stripe), customer accounts |
examples/multi-tenant | Two brands in one CMS, each with its own content, media and members |
Issues and pull requests are welcome. CONTRIBUTING.md explains how to build, test and propose changes; docs/DESIGN.md and the architecture decisions explain why things are the way they are.
Please report security issues privately, as described in SECURITY.md.
Easy CMS is built in spare time. If it saves you or your team time, consider sponsoring its development: sponsorship pays for the work toward 1.0, docs (in English and Thai) and faster fixes. Sponsors at $5 a month or more are listed here, and company sponsors also get their logo on the website.
The first 10 sponsors, at any tier, are listed here permanently, even if they stop sponsoring later. Spots left: 10 of 10.
| Model Context Protocol server for AI assistants |
| MCP |
@easy-cms/plugin-multi-tenant | Several sites or clients in one CMS: content, members, roles and settings per tenant, a tenant switcher | Multi-tenant |
@easy-cms/plugin-ecommerce (experimental) | A shop: products and variants, prices in several currencies, carts, checkout with Stripe or bank transfer (unpaid orders expire and return their stock), orders, stock, customer accounts, React and Vue hooks | Shop |
@easy-cms/storage-netlify-blobs| Uploads on Netlify Blobs |
@easy-cms/email-smtp | Email over SMTP |
@easy-cms/auth-oauth | Single sign-on: Google, Microsoft, GitHub, OpenID Connect |
@easy-cms/richtext | Rich text to safe HTML or Markdown |
@easy-cms/fields | More field types: color, with a picker and swatches |
@easy-cms/admin | The admin UI (installed by the adapters) |
@easy-cms/drizzle | Shared database layer (installed by the database adapters) |