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 codecms/octocms.config.ts defines collections and field types; public routes use the query API (for example query('homePage').first() and query('blog').first() behind cached helpers).
  • Public pages — routes such as / and /blog read entries via query() (markdown stays raw for react-markdown; references and image UUIDs are resolved).
  • GitHub integration — in production, saves commit to your GitHub repo. Branch names (git.baseBranch, optional git.publishedPointerBranch) are set in cms/octocms.config.ts, not in environment variables. See Editorial workflow.

Local vs production (high level)#

Local developmentProduction (e.g. Vercel)
Content readsFiles on disk under cms/content/Often GitHub API (deployed disk may not include latest commits)
Media filespublic/media/ on diskServed via /media/... from GitHub or disk
Sign-inSame GitHub App flow; see InstallationSame; plus repo env vars for GitHub writes

Next steps#

  1. Follow the Getting started guide to install OctoCMS and configure the GitHub App.
  2. Work through the Tutorial to create your first schema and content page.
  3. Read Content model and Fields to understand how entries are structured.