# Easy CMS > The embedded, code-first headless CMS for Nuxt and Next.js. It runs inside your app: the content model is TypeScript in your repo, the admin is at /admin, and pages read content with a typed Local API or REST, on your own database (SQLite or Postgres). All docs in one file: https://easy-cms-website.vercel.app/llms-full.txt ## Why Easy CMS - [Why Easy CMS](https://easy-cms-website.vercel.app/why.md): Why teams choose Easy CMS: it runs inside your Next.js or Nuxt app, the content model is TypeScript, roles and SSO are free under MIT, and the admin and docs are in Thai and English. - [Easy CMS for developers](https://easy-cms-website.vercel.app/why/developers.md): A headless CMS that installs into your Next.js or Nuxt app: content defined in TypeScript, a typed Local API, your own database, one deployment. - [Easy CMS for content and marketing teams](https://easy-cms-website.vercel.app/why/teams.md): Drafts, scheduled publishing, live preview, SEO fields with a search preview, forms and translations, in an admin your team can use in Thai or English. - [Easy CMS for agencies](https://easy-cms-website.vercel.app/why/agencies.md): Build client sites on an MIT-licensed CMS: roles, SSO and an audit log for free, several clients in one CMS, backups, and an admin your clients can use in Thai. - [Easy CMS compared with Payload, Strapi, Directus, WordPress and Sanity](https://easy-cms-website.vercel.app/why/compare.md): Easy CMS next to Payload, Strapi, Directus, WordPress and Sanity: license, where it runs, content model, databases, pricing, APIs, Thai admin, roles and SSO, with sources. - [Easy CMS vs Payload](https://easy-cms-website.vercel.app/why/compare/payload.md): Payload is the closest to Easy CMS: MIT, code-first and installed into your Next.js app. It is far more mature, with a large community. Easy CMS also runs in Nuxt or on its own, and keeps team features such as SSO in the free license. - [Easy CMS vs Strapi](https://easy-cms-website.vercel.app/why/compare/strapi.md): Strapi is the most popular open-source headless CMS: a separate Node server with its own admin. Its Community Edition is MIT, while live preview, content history, SSO and audit logs are in paid plans. Easy CMS runs inside your app and keeps those features in the free license. - [Easy CMS vs Directus](https://easy-cms-website.vercel.app/why/compare/directus.md): Directus puts a data studio and APIs on top of any SQL database, with the model built in its interface. Its license is source-available, not OSI open source, and the free Core is capped. Easy CMS is MIT with no caps, and its model lives in your repo. - [Easy CMS vs WordPress](https://easy-cms-website.vercel.app/why/compare/wordpress.md): WordPress runs a large share of the web, with themes and plugins for almost anything, on PHP and MySQL. Used headless, it is a separate PHP app next to your frontend. Easy CMS keeps everything in your TypeScript app, with a typed content model. - [Easy CMS vs Sanity](https://easy-cms-website.vercel.app/why/compare/sanity.md): Sanity pairs an MIT-licensed Studio, configured in code, with a hosted content backend you can't self-host. It is strong at real-time collaboration and visual editing, billed by seats and usage. Easy CMS keeps your content in your own database. ## Introduction - [What is Easy CMS?](https://easy-cms-website.vercel.app/docs.md): What Easy CMS is, how its parts fit together, the words the rest of the guide uses, and when it is (and isn't) a good fit. - [One-click deploy](https://easy-cms-website.vercel.app/docs/one-click-deploy.md): How to get a site with its admin running on Vercel or Netlify in a few clicks, and what to do next. - [Getting started](https://easy-cms-website.vercel.app/docs/getting-started.md): Add Easy CMS to a Nuxt or Next.js project (or run it on its own), create the first admin and read content in a page. - [Tutorial: build a blog](https://easy-cms-website.vercel.app/docs/tutorial.md): Build a small blog from an empty project to production: content model, admin, pages, drafts, live preview, SEO and deployment. It takes about 30 minutes. Pick Nuxt or Next.js in the code tabs; everything else is the same. - [Nuxt](https://easy-cms-website.vercel.app/docs/nuxt.md): How the Nuxt module mounts the admin and the API, its options, and how to read content in server routes and pages. - [Next.js](https://easy-cms-website.vercel.app/docs/next.md): How the Next.js route handlers mount the admin and the API, and how to read content in server components. - [Standalone server](https://easy-cms-website.vercel.app/docs/standalone.md): Run Easy CMS as its own server for a Vite, React, Vue or static frontend, and deploy it. - [Other frameworks](https://easy-cms-website.vercel.app/docs/other-frameworks.md): Run Easy CMS inside a framework without its own package: Astro, SvelteKit, React Router, Hono or any server that handles Web Requests. ## Content - [Configuration](https://easy-cms-website.vercel.app/docs/configuration.md): Every option of easy-cms.config.ts: the top-level settings, collections, globals, branding and plugins. - [Fields](https://easy-cms-website.vercel.app/docs/fields.md): Every field type, its options, what it looks like in the admin, and how it is stored. - [Custom field types](https://easy-cms-website.vercel.app/docs/field-types.md): Use field types from packages, such as color from @easy-cms/fields, and write your own: a type with its own checks, its own input in the admin and its own look in lists. - [Single sign-on](https://easy-cms-website.vercel.app/docs/sso.md): How people sign in to the admin with Google, Microsoft, GitHub or any OpenID Connect provider, who gets in, and how to set up each provider. - [Audit log](https://easy-cms-website.vercel.app/docs/audit-log.md): How to keep a record of who changed what and when, who signed in, and what admins did, and how to check that the record wasn't tampered with. - [Access control](https://easy-cms-website.vercel.app/docs/access-control.md): How to decide who may read, create, update and delete, per collection, per document and per field. - [Roles from the admin](https://easy-cms-website.vercel.app/docs/roles.md): How admins add roles and tick what each one may do, per collection, global and admin page, without writing code. - [Hooks](https://easy-cms-website.vercel.app/docs/hooks.md): How to run your own code when documents are created, changed, read or deleted, with examples for the common cases. - [Drafts, versions & scheduling](https://easy-cms-website.vercel.app/docs/drafts.md): Drafts, the version history and restoring, and publishing or unpublishing at a set time. - [Localization](https://easy-cms-website.vercel.app/docs/localization.md): Content in several languages: which fields to translate, how editors switch languages, and how pages read a locale. - [Uploads & media](https://easy-cms-website.vercel.app/docs/uploads.md): The media library, its folders and file types, image sizes, file limits, and storing files on disk or S3, Cloudflare R2 and MinIO. - [Users & auth](https://easy-cms-website.vercel.app/docs/auth.md): Who can log in to the admin, how roles work, how to create users, and how sessions and tokens authenticate requests from browsers and other apps. - [API keys](https://easy-cms-website.vercel.app/docs/api-keys.md): How to give scripts, other apps and AI assistants their own key to the REST API, limited to the collections and actions they need. ## Using content - [Local API](https://easy-cms-website.vercel.app/docs/local-api.md): Every function of the typed Local API: finding, creating, updating, deleting, drafts, versions and access options. - [TypeScript](https://easy-cms-website.vercel.app/docs/typescript.md): How document types come from your config with no build step, how to name them in your code, and how to generate a types file for apps that can't import the config. - [Rich text](https://easy-cms-website.vercel.app/docs/rich-text.md): What editors can do in a rich text field, how it is stored, and how to show it safely on your pages with Nuxt, Next.js or any frontend. - [Live preview](https://easy-cms-website.vercel.app/docs/live-preview.md): Show editors the real page next to the form, updated as they type, before saving. ## Plugins - [Plugins](https://easy-cms-website.vercel.app/docs/plugins.md): How to use plugins, and how to write your own with fields, REST endpoints and admin components. - [SEO](https://easy-cms-website.vercel.app/docs/seo.md): Add SEO fields with a search preview to the admin, fill your pages' metadata from them, and publish a sitemap, robots.txt and structured data. - [AI search](https://easy-cms-website.vercel.app/docs/ai-search.md): How AI search and assistants (ChatGPT, Claude, Perplexity, Google's AI answers…) find and read your content, and what the SEO plugin gives them: crawler rules, llms.txt, Markdown versions of pages and IndexNow. - [Redirects](https://easy-cms-website.vercel.app/docs/redirects.md): Send visitors (and search engines) from old addresses to new ones: redirects editors manage in the admin, and automatic ones when a page's address changes. - [Nested pages](https://easy-cms-website.vercel.app/docs/nested-docs.md): Put pages inside pages (About → Team → Alice), give each its full address (/about/team) and its breadcrumbs, and keep them right when a page above moves or changes its slug. - [Forms](https://easy-cms-website.vercel.app/docs/forms.md): Let editors build forms in the admin (contact, sign-up, surveys), collect what visitors send, get an email for each submission, and keep bots out. - [MCP (AI assistants)](https://easy-cms-website.vercel.app/docs/mcp.md): How to let AI assistants such as Claude, Cursor or VS Code read and write your content through the Model Context Protocol, with an API key that limits what they can do. - [Multi-tenant](https://easy-cms-website.vercel.app/docs/multi-tenant.md): How to run several sites or clients in one CMS: each tenant with its own content, members and settings, a tenant switcher in the admin, and frontends that read one tenant. - [The admin: menu, search, layouts](https://easy-cms-website.vercel.app/docs/admin.md): How to shape the admin for your editors: the menu's groups, badges and pins, the command palette (⌘K) and shortcuts, and edit pages with tabs, sections that fold, rows and fields that show only when they apply. - [Shop (ecommerce)](https://easy-cms-website.vercel.app/docs/ecommerce.md): How to sell on your site: products with variants and prices in several currencies, a cart that guests keep too, checkout with Stripe or a bank transfer, orders made exactly once, stock, customer accounts, emails and events. - [Site members](https://easy-cms-website.vercel.app/docs/members.md): How people sign in on your site, not the admin: customers, subscribers, members of a club. Signing up with email confirmation, the site's own pages for email links, and what members may see. ## Operations - [Databases](https://easy-cms-website.vercel.app/docs/databases.md): SQLite, Turso, Postgres and PGlite: how to connect, choose and tune each. - [Migrations & deployment](https://easy-cms-website.vercel.app/docs/deployment.md): How schema changes are applied in development and shipped as migrations to production. - [Health checks](https://easy-cms-website.vercel.app/docs/health-checks.md): What the dashboard's Needs attention and System panels tell admins, and how to fix each problem they report. - [Jobs](https://easy-cms-website.vercel.app/docs/jobs.md): Run your own background work on a schedule (jobs), at a time of day in your time zone, and see, pause or reschedule it from Settings → Jobs. - [Backups & upgrades](https://easy-cms-website.vercel.app/docs/backups.md): What to back up, how to restore, and how to upgrade Easy CMS safely. - [Email](https://easy-cms-website.vercel.app/docs/email.md): How Easy CMS sends email (for password links, forms and your own hooks), how to connect SMTP, and what happens when sending fails. - [Webhooks](https://easy-cms-website.vercel.app/docs/webhooks.md): Notify other services when content changes, with signatures and retries that survive restarts. - [Security](https://easy-cms-website.vercel.app/docs/security.md): What Easy CMS protects for you, what stays your job, and a checklist before going live. - [Upgrading](https://easy-cms-website.vercel.app/docs/upgrading.md): What changed between versions, and what to change in your app when you upgrade. - [Versions and deprecations](https://easy-cms-website.vercel.app/docs/versioning.md): What a version number promises, which parts of Easy CMS the promise covers, how old names are retired, and how long releases get security fixes. ## Deploy - [Choosing a host](https://easy-cms-website.vercel.app/docs/deploy.md): Which kind of host fits your site, what every host needs from you, and a checklist before going live. - [Vercel](https://easy-cms-website.vercel.app/docs/deploy/vercel.md): A Next.js or Nuxt site with Easy CMS on Vercel: content in a hosted database, uploads in Vercel Blob, migrations on every deploy and a cron for scheduled publishing. - [Netlify](https://easy-cms-website.vercel.app/docs/deploy/netlify.md): A Next.js or Nuxt site with Easy CMS on Netlify: content in Postgres, uploads in Netlify Blobs, migrations on every deploy and a scheduled function for scheduled publishing. - [Docker](https://easy-cms-website.vercel.app/docs/deploy/docker.md): A container image of your site with Easy CMS, run with Docker Compose: with Postgres in a second container, or with SQLite on a volume. The same image runs on any server or platform that runs containers. - [VPS (Linux server)](https://easy-cms-website.vercel.app/docs/deploy/vps.md): Your site with Easy CMS on one Linux server you control (Ubuntu or Debian): Node.js, SQLite and uploads on the server's disk, systemd to keep it running, Caddy for HTTPS, and daily backups. - [Other hosts](https://easy-cms-website.vercel.app/docs/deploy/other-hosts.md): What any Node.js host needs to run Easy CMS, and notes for Railway, Render, Fly.io and Coolify. ## Recipes - [All recipes](https://easy-cms-website.vercel.app/docs/recipes.md): Short, complete answers for common tasks. Each one is a few steps you can copy into your project. - [Authors edit only their own posts](https://easy-cms-website.vercel.app/docs/recipes/own-posts.md): An author role that can write posts but change only its own, while editors and admins manage everything. Uses: roles, access control, hooks. - [Rebuild a static site on publish](https://easy-cms-website.vercel.app/docs/recipes/rebuild-on-publish.md): A site generated at build time (Astro, Nuxt generate, Next.js export, Hugo…) that rebuilds by itself when content is published. Uses: webhooks. - [Reading time with a hook](https://easy-cms-website.vercel.app/docs/recipes/reading-time.md): A "minutes to read" number that the CMS computes on every save and editors can see but not change. Uses: hooks, field access. - [A landing page from blocks](https://easy-cms-website.vercel.app/docs/recipes/landing-page.md): A pages collection whose content is a list of blocks (hero, features, call to action) that editors add, reorder and fill in, and a page that renders them. Uses: blocks. - [A navigation menu in a global](https://easy-cms-website.vercel.app/docs/recipes/navigation-menu.md): One menu for the whole site that editors change in the admin, with labels in every language. Uses: globals, arrays, localization. - [Image galleries](https://easy-cms-website.vercel.app/docs/recipes/image-galleries.md): A gallery of photos on each post, in the order editors choose, shown as a grid on the page. Uses: uploads, arrays. - [Move from SQLite to Postgres](https://easy-cms-website.vercel.app/docs/recipes/sqlite-to-postgres.md): The same site on Postgres instead of SQLite: before launch (easy), or with content you want to keep. Uses: databases, migrations, backups. - [Move from WordPress](https://easy-cms-website.vercel.app/docs/recipes/wordpress.md): Your WordPress posts, pages, categories and images in Easy CMS, with a redirect from every old address, from a script you can run again until launch day. Uses: the Local API, uploads from a link, rich text and redirects. - [Automate backups](https://easy-cms-website.vercel.app/docs/recipes/automate-backups.md): Daily backups of the database and the uploads, old ones cleaned up, and a restore drill so you know they work. Uses: backups, CLI. - [Get ready for search engines](https://easy-cms-website.vercel.app/docs/recipes/search-engines.md): Pages with good titles, descriptions and share cards, a sitemap and robots.txt, links between the Thai and English versions, and structured data, then the site submitted to Google. Uses: SEO plugin, localization. ## Reference - [Config](https://easy-cms-website.vercel.app/docs/reference/config.md): Every option of easy-cms.config.ts, grouped by where it goes. For explanations and examples, follow the links to the guide. A test checks this page against the types in @easy-cms/core, so every option is listed here. - [Fields](https://easy-cms-website.vercel.app/docs/reference/fields.md): Every field option, checked against the types in @easy-cms/core by a test. For how fields look in the admin and how they are stored, see Fields. - [Local API](https://easy-cms-website.vercel.app/docs/reference/local-api.md): Every method of the cms object you get from useEasyCMS() (Nuxt), getEasyCMS(config) (Next.js) or createEasyCMS(config). A test checks this list against the EasyCMS class. For examples, see Local API. - [REST API](https://easy-cms-website.vercel.app/docs/rest-api.md): The HTTP API at /api/cms: endpoints, queries, authentication, CSRF and errors. - [GraphQL](https://easy-cms-website.vercel.app/docs/graphql.md): How to add a GraphQL API next to the REST API: the schema it makes from your config, queries, mutations, limits, and how to add your own fields. - [CLI](https://easy-cms-website.vercel.app/docs/cli.md): The two command-line tools: create-easy-cms to set up a project, and easy-cms for migrations, users, types, backups, scheduled jobs and the standalone server. ## Blog - [Easy CMS 1.4: เห็นงานเบื้องหลัง และรันครั้งเดียวแม้มีหลาย server](https://easy-cms-website.vercel.app/th/blog/easy-cms-1-4-th.md): สี่เวอร์ชันหลังจาก 1.0: หน้า admin ที่บอกว่ากำลังโหลด งานเบื้องหลังที่รันครั้งเดียวไม่ว่าจะมีกี่ server และหน้า ตั้งค่า → งานเบื้องหลัง - [Easy CMS 1.4: background work you can see, and safe on several servers](https://easy-cms-website.vercel.app/blog/easy-cms-1-4.md): Four releases since 1.0: an admin that shows when it is loading, background work that runs once however many servers you have, and Settings → Jobs. - [ให้ทีมเข้าหน้า admin ด้วยบัญชี Google](https://easy-cms-website.vercel.app/th/blog/google-sign-in-for-your-team.md): ไม่ต้องแจกรหัสผ่านให้ทุกคนในทีมอีกต่อไป ตั้งค่าให้ทีมเข้าหน้า admin ของ Easy CMS ด้วยบัญชี Google ในไม่กี่ขั้นตอน และเลือกได้ว่าใครเข้าได้บ้าง - [Easy CMS กับ WordPress: เลือกอะไรดีสำหรับเว็บของทีม](https://easy-cms-website.vercel.app/th/blog/easy-cms-vs-wordpress.md): WordPress อยู่เบื้องหลังเว็บจำนวนมาก และยังเป็นตัวเลือกที่ดีในหลายกรณี บทความนี้บอกตรงๆ ว่าเมื่อไรควรใช้ WordPress และเมื่อไร Easy CMS เหมาะกว่า - [เลือก headless CMS ให้ทีมไทย: 6 คำถามที่ควรถามก่อน](https://easy-cms-website.vercel.app/th/blog/choosing-a-headless-cms-for-thai-teams.md): CMS ที่เลือกวันนี้จะอยู่กับทีมไปอีกหลายปี หกคำถามนี้ช่วยให้เลือกได้ตรงกับทีมจริง ไม่ใช่แค่ตามกระแส ไม่ว่าสุดท้ายจะเลือก Easy CMS หรือไม่ - [Easy CMS 1.0](https://easy-cms-website.vercel.app/blog/easy-cms-1-0.md): Easy CMS 1.0 is out. What 1.0 promises, what it took to get here, and how to upgrade from 0.x. - [The new admin](https://easy-cms-website.vercel.app/blog/the-new-admin.md): Easy CMS 0.47 rebuilds the admin around a growing site: menu groups, ⌘K, badges, and edit pages with tabs and fields that show when they apply. - [Multi-tenant sites and a shop](https://easy-cms-website.vercel.app/blog/multi-tenant-sites-and-a-shop.md): Two new plugins: run several sites or clients from one CMS, and sell from your site with carts, Stripe, PromptPay or bank transfer. - [A media library for real sites](https://easy-cms-website.vercel.app/blog/a-media-library-for-real-sites.md): Folders, several files at a time, private folders and files too big for your host's request limit: the media library grew up in 0.38 to 0.41. - [Deploy Easy CMS in one click](https://easy-cms-website.vercel.app/blog/deploy-easy-cms-in-one-click.md): A button that copies a Next.js blog with its admin to your GitHub and deploys it, database and file storage included. You type one thing: a setup code. - [Roles, single sign-on and an audit log](https://easy-cms-website.vercel.app/blog/roles-single-sign-on-and-an-audit-log.md): Easy CMS 0.33 to 0.36 make it ready for teams: roles you set up in the admin, sign-in with your company account, and a record of who changed what. - [One installer for npm, pnpm, Yarn and Bun](https://easy-cms-website.vercel.app/blog/one-installer-for-npm-pnpm-yarn-and-bun.md): Easy CMS 0.22 picks your package manager from the lockfile or the --pm flag, prints the next steps in its own commands, and the docs remember the one you chose. - [Nested pages, with paths and breadcrumbs](https://easy-cms-website.vercel.app/blog/nested-pages-with-paths-and-breadcrumbs.md): About → Team → Engineering. The new plugin keeps every path and breadcrumb up to date when a page moves, in every language. - [Forms and email, built in](https://easy-cms-website.vercel.app/blog/forms-and-email-built-in.md): Editors build forms in the admin. Submissions are validated on the server, emails retry for a day, and bots meet a honeypot. - [Why we put the CMS inside your app](https://easy-cms-website.vercel.app/blog/why-we-put-the-cms-inside-your-app.md): A hosted headless CMS is a second service with its own deploy and database. Easy CMS is a package your app mounts instead. Here is what that changes. - [Moving from SQLite to Postgres](https://easy-cms-website.vercel.app/blog/moving-from-sqlite-to-postgres.md): Start on a SQLite file, grow into Postgres. One CLI command copies every document, version and user between the two. - [Rebuild a static site when an editor publishes](https://easy-cms-website.vercel.app/blog/rebuild-a-static-site-when-an-editor-publishes.md): Point a webhook at your host's deploy hook and the site rebuilds when content goes live, and only then. ## ภาษาไทย (Thai) - [ทำไมต้อง Easy CMS](https://easy-cms-website.vercel.app/th/why.md): เหตุผลที่ทีมเลือก Easy CMS: รันในแอป Next.js หรือ Nuxt ของคุณ โครงสร้างเนื้อหาเป็น TypeScript บทบาทและ SSO ฟรีภายใต้ MIT และมีหน้า admin กับเอกสารทั้งภาษาไทยและอังกฤษ - [เปรียบเทียบ Easy CMS กับ Payload, Strapi, Directus, WordPress และ Sanity](https://easy-cms-website.vercel.app/th/why/compare.md) - [เอกสารภาษาไทย](https://easy-cms-website.vercel.app/th/docs.md): every docs page in Thai, at /th/docs/.md - [บล็อกภาษาไทย](https://easy-cms-website.vercel.app/th/blog)