CMS ที่ทีมไทย ใช้ได้ทั้งทีม
หน้า admin ภาษาไทยครบทุกหน้าจอ เอกสารภาษาไทยทุกหน้า บทบาท, SSO และ audit log ฟรีภายใต้ MIT ติดตั้งในแอป Next.js หรือ Nuxt แล้วรันบน server และฐานข้อมูลของคุณเอง ไม่มีค่าใช้จ่ายต่อที่นั่ง
npm create easy-cms@latest

const cms = await getEasyCMS(config)
const { docs } = await cms.find('posts')
// docs: Post[] ได้ type จาก config ของคุณ- Next.js 15+
- Nuxt
- PostgreSQL
- SQLite · Turso
- PGlite
- S3 · R2 · MinIO
- Vercel · Netlify
ไม่ต้องมี server ตัวที่สองให้ดูแล จ่ายเงิน หรือคอย sync
headless CMS ทั่วไปเป็นอีกบริการหนึ่งที่มีฐานข้อมูลและ API key ของตัวเอง Easy CMS เป็นแพ็กเกจ npm ที่แอปของคุณติดตั้งเข้าไป เนื้อหาจึงไปพร้อมกับโค้ดที่แสดงผลมัน
สองแอป สองฐานข้อมูล
- schema อยู่ในหน้าเว็บ ไม่ได้อยู่ใน repo
- ต้องสร้าง type แยกอีกขั้น
- ทุกหน้าต้องเรียกข้ามเครือข่าย
แอปเดียว ฐานข้อมูลเดียว
ecms_- โครงสร้างเนื้อหาอยู่ใน
easy-cms.config.tsและ review ใน PR ได้ - type มาจาก config โดยตรง ไม่ต้อง build
- deploy ได้ทุกที่ที่แอปของคุณรันอยู่แล้ว
สามไฟล์ แอปของคุณก็มี CMS
กำหนด collection และ field ด้วย TypeScript ฟอร์มใน admin การตรวจข้อมูล สิทธิ์การเข้าถึง และ API ที่มี type ถูกสร้างจากไฟล์เดียวนี้
import { defineConfig } from '@easy-cms/core'
import { postgres } from '@easy-cms/db-postgres'
import { seoPlugin } from '@easy-cms/plugin-seo'
export default defineConfig({
secret: process.env.EASY_CMS_SECRET!,
db: postgres({ url: process.env.DATABASE_URL! }),
localization: { locales: ['en', 'th'], defaultLocale: 'en' },
collections: [
{
slug: 'posts',
drafts: true, versions: true, schedule: true,
useAsTitle: 'title',
fields: [
{ name: 'title', type: 'text', required: true, localized: true },
{ name: 'slug', type: 'slug', from: 'title' },
{ name: 'body', type: 'richText', localized: true },
],
},
],
plugins: [seoPlugin({ collections: ['posts'] })],
})// app/admin/[[...path]]/route.ts
import { createAdminRouteHandlers } from '@easy-cms/next'
import config from '@/easy-cms.config'
export const { GET, HEAD } = createAdminRouteHandlers(config)
// app/api/cms/[[...path]]/route.ts
import { createRouteHandlers } from '@easy-cms/next'
import config from '@/easy-cms.config'
export const { GET, HEAD, POST, PATCH, PUT, DELETE, OPTIONS } =
createRouteHandlers(config)
// next.config.ts
import { withEasyCMS } from '@easy-cms/next/config'
export default withEasyCMS({ /* config ของ Next ของคุณ */ })import { getEasyCMS } from '@easy-cms/next'
import config from '@/easy-cms.config'
export const dynamic = 'force-dynamic'
export default async function Posts() {
const cms = await getEasyCMS(config)
const { docs } = await cms.find('posts', { limit: 10 })
return (
<ul>
{docs.map((post) => (
// post.title: string ได้ type จาก config ของคุณ
<li key={post.id}>{post.title}</li>
))}
</ul>
)
}สิ่งที่ editor ต้องการ และสิ่งที่นักพัฒนา review ได้
ฉบับร่างและประวัติเวอร์ชัน
แก้บทความที่เผยแพร่แล้วได้โดยหน้าเว็บจริงไม่เปลี่ยน เทียบเวอร์ชันและกู้คืนเวอร์ชันใดก็ได้
ตัวอย่างสด
หน้าเว็บจริงแสดงข้างฟอร์ม และเปลี่ยนตามที่ editor พิมพ์ ก่อนจะเผยแพร่
เนื้อหาหลายภาษา
แต่ละภาษามีค่าของตัวเอง และทุกรายการบอกสถานะการแปล หน้า admin ใช้ได้ทั้งไทยและอังกฤษ
บทบาทและ single sign-on
ติ๊กว่าแต่ละบทบาททำอะไรได้ใน admin ลงไปถึงระดับ field และ login ด้วย Google, Microsoft หรือ GitHub
คลังไฟล์ที่มีโฟลเดอร์
โฟลเดอร์ อัปโหลดหลายไฟล์พร้อมกัน ไฟล์ส่วนตัวพร้อมลิงก์ที่มีลายเซ็น และเก็บไฟล์บน S3, R2 หรือ Vercel Blob
Audit log และการสำรองข้อมูล
บันทึกที่มีลายเซ็นว่าใครแก้อะไร และสำรองฐานข้อมูลได้เองหรือตั้งเวลาจากหน้า admin
ตั้งเวลาเผยแพร่
เผยแพร่หรือยกเลิกตามเวลาที่ตั้ง งานที่ถึงเวลารันทุกนาทีบน server ที่คุณมีอยู่แล้ว
SEO พร้อมใช้
sitemap, hreflang, JSON-LD และ llms.txt จากเนื้อหาที่มีอยู่แล้ว
API ที่มี type, REST และ GraphQL
Local API ที่มี type ในโค้ดฝั่ง server, REST สำหรับ client ทุกแบบ และ GraphQL กับ MCP เป็น plugin
เพิ่มฟีเจอร์ด้วยบรรทัดเดียวใน plugins
แต่ละ plugin เพิ่ม collection หน้า admin และ API route ของตัวเอง พร้อม migration และเขียน plugin เองได้ด้วย hook ชุดเดียวกัน
@easy-cms/plugin-seofield สำหรับ meta, sitemap, hreflang และ JSON-LD
seo@easy-cms/plugin-form-buildereditor สร้างฟอร์มเอง ข้อมูลที่ส่งมาถูกตรวจ เก็บ และ export เป็น CSV ได้
forms@easy-cms/plugin-redirectsredirect แบบ 301 ถึง 308 สร้างให้อัตโนมัติเมื่อหน้าเปลี่ยนที่อยู่
seo@easy-cms/plugin-nested-docsหน้าย่อยในหน้า พร้อม path และ breadcrumb แยกตามภาษา
pages@easy-cms/plugin-multi-tenantหลายเว็บหรือหลายลูกค้าใน CMS เดียว แต่ละแห่งมีสมาชิกและเนื้อหาของตัวเอง
0.44@easy-cms/plugin-ecommerceสินค้า ตะกร้า และชำระเงินด้วย Stripe, PromptPay หรือโอนเงิน
0.46@easy-cms/plugin-graphqlGraphQL API ที่ใช้สิทธิ์การเข้าถึงเดียวกับ REST
0.43@easy-cms/plugin-mcpMCP server ให้ผู้ช่วย AI ทำงานกับเนื้อหาของคุณ
aiหน้า admin ที่ editor ของคุณจะชอบใช้
สร้างจาก config ของคุณ มีทั้งธีมสว่างและมืด ภาษาไทยและอังกฤษ ไม่ต้องออกแบบหรือ host เอง


บทความและคู่มือล่าสุด
ให้ทีมเข้าหน้า admin ด้วยบัญชี Google
ไม่ต้องแจกรหัสผ่านให้ทุกคนในทีมอีกต่อไป ตั้งค่าให้ทีมเข้าหน้า admin ของ Easy CMS ด้วยบัญชี Google ในไม่กี่ขั้นตอน และเลือกได้ว่าใครเข้าได้บ้าง
Easy CMS กับ WordPress: เลือกอะไรดีสำหรับเว็บของทีม
WordPress อยู่เบื้องหลังเว็บจำนวนมาก และยังเป็นตัวเลือกที่ดีในหลายกรณี บทความนี้บอกตรงๆ ว่าเมื่อไรควรใช้ WordPress และเมื่อไร Easy CMS เหมาะกว่า
เลือก headless CMS ให้ทีมไทย: 6 คำถามที่ควรถามก่อน
CMS ที่เลือกวันนี้จะอยู่กับทีมไปอีกหลายปี หกคำถามนี้ช่วยให้เลือกได้ตรงกับทีมจริง ไม่ใช่แค่ตามกระแส ไม่ว่าสุดท้ายจะเลือก Easy CMS หรือไม่
เสถียรตั้งแต่ 1.0
- breaking change มาเฉพาะใน major release และมีคู่มืออัปเกรดทุกครั้ง
- API ที่เปลี่ยนชื่อยังใช้ได้จนถึง major ถัดไป พร้อมคำเตือน
- ทุกการเปลี่ยนแปลงทดสอบกับฐานข้อมูลที่สร้างจาก release เก่า ทั้ง SQLite และ Postgres
- major ก่อนหน้ายังได้ security fix ต่ออีกหกเดือนหลัง major ถัดไปออก
ส่งเนื้อหาไปพร้อมกับโค้ดที่แสดงผลมัน
สร้างโปรเจกต์ Next.js หรือ Nuxt พร้อม Easy CMS ได้ในราวหนึ่งนาที ใช้สัญญาอนุญาต MIT และรันบนโครงสร้างของคุณเอง