# Easy CMS

> The TypeScript backend with an admin built in. One config file (easy-cms.config.ts) defines the data, access rules and logic; Easy CMS serves a typed Local API, REST, sign-in, files, jobs and an admin at /admin, on your own database (SQLite, Turso or Postgres). It runs inside Next.js or Nuxt, or as its own server on Node.js, Bun, Deno or Cloudflare Workers.

All docs in one file: https://easycms.dev/llms-full.txt

## Why Easy CMS

- [Why Easy CMS: more than a CMS](https://easycms.dev/why.md): Easy CMS is the backend your app needs in one TypeScript file: content, sign-in and roles, jobs, files, an API and an admin your clients use. MIT licensed, on your own database, from Next.js and Nuxt to Cloudflare Workers.
- [Easy CMS for developers](https://easycms.dev/why/developers.md): A TypeScript backend you install into Next.js, Nuxt or its own server: data, sign-in, roles, jobs, files and an API from one config, on your own database.
- [Easy CMS for startups and product teams](https://easycms.dev/why/teams.md): Ship the app, its backend and its admin together: sign-in, roles, content, jobs and an admin your operations team uses, without stitching services together. MIT licensed.
- [Easy CMS for agencies](https://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/docs/standalone.md): Run Easy CMS as its own server for a Vite, React, Vue or static frontend, and deploy it.
- [Other frameworks](https://easycms.dev/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://easycms.dev/docs/configuration.md): Every option of easy-cms.config.ts: the top-level settings, collections, globals, branding and plugins.
- [Fields](https://easycms.dev/docs/fields.md): Every field type, its options, what it looks like in the admin, and how it is stored.
- [Custom field types](https://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/docs/hooks.md): How to run your own code when documents are created, changed, read or deleted, with examples for the common cases.
- [Actions](https://easycms.dev/docs/actions.md): Add buttons that run your code on a document, such as confirm a booking, send a quote or refund an order: on its edit page, a list row, or every selected document, with who may press them, a form, and what happened.
- [Drafts, versions & scheduling](https://easycms.dev/docs/drafts.md): Drafts, the version history and restoring, and publishing or unpublishing at a set time.
- [Localization](https://easycms.dev/docs/localization.md): Content in several languages: which fields to translate, how editors switch languages, and how pages read a locale.
- [Uploads & media](https://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/docs/local-api.md): Every function of the typed Local API: finding, creating, updating, deleting, drafts, versions and access options.
- [TypeScript](https://easycms.dev/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://easycms.dev/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://easycms.dev/docs/live-preview.md): Show editors the real page next to the form, updated as they type, before saving.
- [Realtime](https://easycms.dev/docs/realtime.md): Keep a list or a document on your site up to date as editors save, without reloading: subscribe to a collection's changes over Server-Sent Events.

## Plugins

- [Plugins](https://easycms.dev/docs/plugins.md): How to use plugins, and how to write your own with fields, REST endpoints and admin components.
- [Integrations](https://easycms.dev/docs/integrations.md): Settings → Integrations is where a site's admins connect accounts to outside providers: a Telegram bot, an AI provider, a Facebook Page. Plugins declare the providers; admins connect them without editing environment variables.
- [Notifications](https://easycms.dev/docs/notifications.md): Tell the site's admins in a Telegram chat when a form is sent, an order comes in, or something fails.
- [AI](https://easycms.dev/docs/ai.md): Connect Claude, GPT, Gemini or a server of your own for the admin's AI features, and keep their cost and privacy in hand.
- [Social posts](https://easycms.dev/docs/social.md): Write a post once and send it to several channels, each with its own text, now or at a time, and see how each one went.
- [SEO](https://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/docs/databases.md): SQLite, Turso, Postgres and PGlite: how to connect, choose and tune each.
- [Database isolation](https://easycms.dev/docs/database-isolation.md): How far apart to keep Easy CMS from your app's data on Postgres, from sharing its database to a server of its own, and how to set up a schema of its own.
- [Migrations & deployment](https://easycms.dev/docs/deployment.md): How schema changes are applied in development and shipped as migrations to production.
- [Health checks](https://easycms.dev/docs/health-checks.md): What the dashboard's Needs attention and System panels tell admins, and how to fix each problem they report.
- [Observability](https://easycms.dev/docs/observability.md): Send traces and metrics from Easy CMS with OpenTelemetry: what it records, how to set up the SDK in Next.js, Nuxt and easy-cms serve, and a local collector to try it.
- [Jobs](https://easycms.dev/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://easycms.dev/docs/backups.md): What to back up, how to restore, and how to upgrade Easy CMS safely.
- [Email](https://easycms.dev/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.
- [Search](https://easycms.dev/docs/search.md): Search published content by relevance, Thai included, with a search adapter: what is indexed, how it stays current, and how readers' access is kept.
- [Webhooks](https://easycms.dev/docs/webhooks.md): Notify other services when content changes, with signatures and retries that survive restarts.
- [Security](https://easycms.dev/docs/security.md): What Easy CMS protects for you, what stays your job, and a checklist before going live.
- [Upgrading](https://easycms.dev/docs/upgrading.md): What changed between versions, and what to change in your app when you upgrade.
- [Versions and deprecations](https://easycms.dev/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://easycms.dev/docs/deploy.md): Which kind of host fits your site, what every host needs from you, and a checklist before going live.
- [Reference architecture](https://easycms.dev/docs/deploy/production.md): The setup Easy CMS is tested and supported in when one server isn't enough: several instances on Postgres and S3-compatible storage. What each part needs, what the instances share, and what is not supported.
- [Vercel](https://easycms.dev/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://easycms.dev/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.
- [Cloudflare Workers](https://easycms.dev/docs/deploy/cloudflare-workers.md): The standalone server (admin and REST API) as a Cloudflare Worker: content in Turso, uploads in R2, the admin app from Workers Assets, and Cron Triggers for scheduled jobs.
- [Docker](https://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/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://easycms.dev/docs/rest-api.md): The HTTP API at /api/cms: endpoints, queries, authentication, CSRF and errors.
- [GraphQL](https://easycms.dev/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://easycms.dev/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

- [A calendar in a CMS admin: time zones without a plugin, drafts, and a keyboard way to drag](https://easycms.dev/blog/admin-calendar.md): How I added a content calendar to an embedded Node.js CMS: FullCalendar 6, every date in the site's time zone with no plugin, dragging that respects drafts, Undo, and a keyboard alternative to dragging.
- [Live preview without saving in Nuxt and Next.js, and how it works](https://easycms.dev/blog/live-preview.md): Show editors the real page next to the form, updated as they type, before saving. Setup in Nuxt and Next.js, then the postMessage mechanics.
- [Make a Nuxt or Next.js site readable by AI: llms.txt, robots.txt, Markdown](https://easycms.dev/blog/ai-readable-site.md): Crawler rules by group, llms.txt as a table of contents, a Markdown URL per page and IndexNow on publish, with the reasons behind each choice.
- [ทำเว็บ Nuxt หรือ Next.js ให้ AI อ่านได้: llms.txt, robots.txt และหน้า Markdown](https://easycms.dev/th/blog/ai-readable-site-th.md): แยกกฎ crawler ของ AI เป็นกลุ่ม, llms.txt ที่เป็นสารบัญ, URL แบบ Markdown ของทุกหน้า และ IndexNow ตอน publish พร้อมเหตุผลของแต่ละข้อ
- [Moving off WordPress with an import script you can re-run until launch day](https://easycms.dev/blog/wordpress-migration.md): An idempotent WordPress import over the REST API: posts, categories, images, rich text and 301s from old URLs, safe to run again and again.
- [ย้ายเว็บ WordPress ด้วยสคริปต์ที่รันซ้ำได้จนถึงวันเปิดเว็บใหม่](https://easycms.dev/th/blog/wordpress-migration-th.md): สคริปต์ import จาก WordPress REST API ที่รันซ้ำได้ ย้ายบทความ หมวดหมู่ รูป และทำ 301 จาก URL เดิม รวมถึง slug ภาษาไทย
- [ทำ live preview แบบไม่ต้องบันทึกใน Nuxt และ Next.js พร้อมกลไกเบื้องหลัง](https://easycms.dev/th/blog/live-preview-th.md): ให้ editor เห็นหน้าเว็บจริงข้างฟอร์ม อัปเดตตามที่พิมพ์ก่อนบันทึก วิธีตั้งค่าใน Nuxt และ Next.js และกลไก postMessage ที่อยู่ข้างหลัง
- [Build a Nuxt blog end to end: drafts, live preview, SEO and deploy](https://easycms.dev/blog/nuxt-blog-end-to-end.md): A Nuxt blog with a real content model, draft-aware pages, live preview, SEO fields and a sitemap, then migrations and a production deploy.
- [สร้าวเวป Blog ด้วย Nuxt ให้ครบ จนขึ้น production: draft, live preview, SEO และ deploy](https://easycms.dev/th/blog/nuxt-blog-end-to-end-th.md): บล็อก Nuxt ที่มี content model จริง หน้าเว็บที่แยก draft ออกจากของที่เผยแพร่แล้ว live preview, SEO, sitemap และการ deploy พร้อม migration
- [ปฏิทินในหน้าแอดมินของ CMS: เขตเวลาที่ไม่ต้องลง plugin, ฉบับร่าง และทางลากด้วยคีย์บอร์ด](https://easycms.dev/th/blog/admin-calendar-th.md): เล่าการเพิ่มปฏิทินเนื้อหาให้ CMS ที่ฝังในแอป Node.js ตั้งแต่การเลือก FullCalendar 6, การแสดงทุกวันที่ตามเขตเวลาของเว็บโดยไม่ลง plugin, การลากที่ไม่ข้ามขั้นตอนฉบับร่าง, Undo และทางเลือกแทนการลากสำหรับคนใช้คีย์บอร์ด
- [Easy CMS 1.13: รองรับล้านเอกสาร](https://easycms.dev/th/blog/easy-cms-1-13-th.md): หก release หลัง 1.7 สำหรับ collection ขนาดล้านเอกสาร: cursor, ค้นภาษาไทยด้วย trigram index, HTTP caching, outbox และ search adapter
- [Easy CMS 1.13: built for a million documents](https://easycms.dev/blog/easy-cms-1-13.md): Six releases since 1.7 for collections of a million posts: cursors, Thai search with trigram indexes, HTTP caching, an outbox and search adapters.
- [Building a Payload-style CMS that lives inside your Nuxt app](https://easycms.dev/blog/payload-style-cms-nuxt.md): Easy CMS is an embedded, code-first headless CMS for Nuxt and Next.js. Content in TypeScript, an admin at /admin, no second server.
- [รัน Easy CMS หลาย server ด้วย Docker และ Postgres](https://easycms.dev/th/blog/run-easy-cms-on-several-servers-th.md): Easy CMS สอง instance หลัง load balancer บน Postgres และ bucket เดียวกันด้วย Docker Compose ปิดตัวไหนเว็บก็ยังตอบ
- [Easy CMS 1.7: พร้อมรันหลาย server](https://easycms.dev/th/blog/easy-cms-1-7-th.md): สาม release หลัง 1.4 ทำให้ Easy CMS พร้อมรันหลาย server: pooler ของ Postgres, log แบบ JSON พร้อม request id, health check และ Docker image อย่างเป็นทางการ
- [Run Easy CMS on several servers with Docker and Postgres](https://easycms.dev/blog/run-easy-cms-on-several-servers.md): Two Easy CMS instances behind a load balancer, on one Postgres and one bucket, with Docker Compose. Stop either one and the site keeps answering.
- [Easy CMS 1.7: ready to run on several servers](https://easycms.dev/blog/easy-cms-1-7.md): Three releases since 1.4 make Easy CMS ready to run on several servers: Postgres poolers, JSON logs with request ids, health checks, and an official Docker image.
- [Easy CMS 1.4: เห็นงานเบื้องหลัง และรันครั้งเดียวแม้มีหลาย server](https://easycms.dev/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://easycms.dev/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://easycms.dev/th/blog/google-sign-in-for-your-team.md): ไม่ต้องแจกรหัสผ่านให้ทุกคนในทีมอีกต่อไป ตั้งค่าให้ทีมเข้าหน้า admin ของ Easy CMS ด้วยบัญชี Google ในไม่กี่ขั้นตอน และเลือกได้ว่าใครเข้าได้บ้าง

## ภาษาไทย (Thai)

- [ทำไมต้อง Easy CMS: มากกว่า CMS](https://easycms.dev/th/why.md): Easy CMS คือ backend ที่แอปต้องมี ในไฟล์ TypeScript เดียว: เนื้อหา การล็อกอินและบทบาท งานเบื้องหลัง ไฟล์ API และหน้า admin ที่ลูกค้าใช้ได้เอง เป็น MIT บนฐานข้อมูลของคุณ ตั้งแต่ Next.js และ Nuxt ถึง Cloudflare Workers
- [เปรียบเทียบ Easy CMS กับ Payload, Strapi, Directus, WordPress และ Sanity](https://easycms.dev/th/why/compare.md)
- [เอกสารภาษาไทย](https://easycms.dev/th/docs.md): every docs page in Thai, at /th/docs/<page>.md
- [บล็อกภาษาไทย](https://easycms.dev/th/blog)
