Show navigationHide navigation
Introduction
This CMS is a Next.js app that stores content as JSON files in the repository (cms/content/). There is no database: the file tree is the source of truth. You edit content in a browser UI at /cms, signed in with GitHub (GitHub App via NextAuth).
The CMS follows a config-as-code approach: the schema lives in your codebase, content is Git-backed, and the admin UI runs inside the same Next.js app as your public site.
What you get#
- Editor UI at
/cms— browse collections, open entries, edit fields, upload media, save (with required-field and reference validation when configured). - Schema in code —
cms/octocms.config.tsdefines collections and field types; public routes use the query API (for examplequery('homePage').first()andquery('blog').first()behind cached helpers). - Public pages — routes such as
/and/blogread entries viaquery()(markdown stays raw forreact-markdown; references and image UUIDs are resolved). - GitHub integration — in production, saves commit to your GitHub repo. Branch names (
git.baseBranch, optionalgit.publishedPointerBranch) are set incms/octocms.config.ts, not in environment variables. See Editorial workflow.
Local vs production (high level)#
| Local development | Production (e.g. Vercel) | |
|---|---|---|
| Content reads | Files on disk under cms/content/ | Often GitHub API (deployed disk may not include latest commits) |
| Media files | public/media/ on disk | Served via /media/... from GitHub or disk |
| Sign-in | Same GitHub App flow; see Installation | Same; plus repo env vars for GitHub writes |
Next steps#
- Follow the Getting started guide to install OctoCMS and configure the GitHub App.
- Work through the Tutorial to create your first schema and content page.
- Read Content model and Fields to understand how entries are structured.