个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 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.查看完整 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
| Editing, with a side panel | Live preview of unsaved changes |
| A calendar of posts by publish date | Roles, set from the admin |
/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] Stable since 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), and the changelog what each release added.
A good fit if you build sites with Nuxt or Next.js, or want a CMS on your own server for another frontend; if you want the content model in code, reviewed and deployed like the rest of the app; and if one deployment and one database is what you want to run.
Look elsewhere if you want a hosted service with nothing to deploy, if people who don't write code should design the content model, or if you need a large marketplace of third-party plugins: so far there are the official ones.
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) | Model Context Protocol server for AI assistants |
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 new features, 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.
| 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) |