A headless CMS for Next.js

Mountain Labs is a headless CMS with a GraphQL API that fits the way the App Router works. Fetch pages in Server Components, cache them with Cache Components, prerender every slug, and let editors preview drafts, with no GraphQL client shipped to the browser.

Read the Next.js guide or see pricing.

Built for the App Router

  • Server Components first. A page is one GraphQL request made on the server, so your client bundle stays the size of your UI.
  • Prerendered, then fresh. generateStaticParams builds every published page at deploy time, and cacheLife keeps each one cached for as long as suits you.
  • Publish straight away. Tag your fetches with cacheTag and clear them with revalidateTag from a route you call after publishing.
  • Draft previews. With Draft Mode, editors see unpublished changes on your real site while everyone else gets the cached version.

One query per page

Every page has a slug, so a catch-all route like app/[...slug]/page.tsx serves your whole site. Ask for the page and the sections you render:

query Page($slug: String!) {  page(ref: { slug: $slug }) {    title    children {      __typename      slug      ... on TextSection {        markdown      }    }  }}

Text sections are plain Markdown, so you render them with the components you already use, and your content is never tied to our editor.

Structure that matches your routes

Pages live in directories, and a page's slug is its path: /blog/hello is the page you serve at /blog/hello. Sections inside a page can nest, so a feature grid or an FAQ is a group of sections rather than a block of HTML. The Directories API gives you the content tree for navigation and sitemaps.

For the people who write the content

Editors work in a visual page editor with Markdown shortcuts, save drafts, and publish when they're ready. Permissions decide who can read, edit and publish each page, so a draft stays private until it goes live.

Get started

  1. Create a page and publish it. Hello, World takes a few minutes.
  2. Follow the Next.js guide to render it in an App Router site, with caching and draft previews.
  3. Pick a plan on the pricing page when you're ready to go live.