CMS for Next.jsA CMS that lives inside your Next.js app.

Nextly is an open-source content platform for Next.js.

MIT licensed, self-hosted.

After a developer sets up and deploys Nextly, editors manage content and pages in the admin.

npx create-nextly-app@alpha my-app

What it does

Model content in TypeScript or in the Visual Schema Builder. Both feed the same Nextly runtime, admin and APIs.

Model content visually on your development instance with the Visual Schema Builder.

The Visual Schema Builder
The Author collection in the Visual Schema Builder: its system fields, then its own fields.

A Lexical rich text editor with tables, code blocks with syntax highlighting, images from the media library and YouTube or Vimeo embeds.

See who else is editing a document, and take over deliberately.

Fields
A post open in the entry editor, with its status and its languages in the document panel.

Read content straight from your database in your page code (the Direct API), or over REST.

Pages that read through Nextly’s cached queries update when their content changes.

The Direct API

app/blog/page.tsx

import { getNextly } from "nextly";
import config from "@/nextly.config";

export default async function BlogPage() {
  const nextly = await getNextly({ config });
  const { items: posts } = await nextly.find({
    collection: "posts",
    where: { status: { equals: "published" } },
    sort: "-createdAt",
    limit: 10,
  });
  return <ul>{posts.map((p) => <li key={p.id}>{p.title}</li>)}</ul>;
}

For your team

In the admin

  • Add, remove, drag to reorder and choose the width of each dashboard card. Docs
  • An activity feed of who created, changed or deleted entries, and a security audit trail. Docs
  • A media library, stored on local disk by default, or on S3 (and R2 or MinIO), Vercel Blob or UploadThing. Docs

For developers

In your code

  • Typed, code-defined schemas and APIs: nextly generate:types writes types for the collections, singles and field groups in your config. Docs
  • Role-based permissions for each collection and action, plus field-level read and write rules in code, on a collection’s or single’s fields, fields inside field groups included. Docs
  • Hooks in code run before and after a change, a read or a delete. Docs
  • Signed webhooks for content, media, user and form events, with retries, a delivery log, redelivery and secret rotation. Docs
import { defineCollection, defineConfig, richText, text } from "nextly/config";

const Posts = defineCollection({
  slug: "posts",
  admin: { useAsTitle: "title" },
  fields: [
    text({ name: "title", required: true }),
    text({ name: "slug", required: true, unique: true }),
    richText({ name: "content" }),
  ],
  status: true,
});

export default defineConfig({ collections: [Posts] });

Try Nextly here, before you install it.

Pick a tour. Each one is a short, hands-on illustration of the product, and nothing here is saved.

A short tour, in your browser, and nothing is saved. Every control it draws is one Nextly 0.0.2-alpha.70 has; a dashed button is a tour shortcut.

An illustration of the Nextly admin and APIs nothing is saved

Step 1 of 3

1 · Define the field

1 · Define the field

In your code

export const Posts = defineCollection({
  slug: 'posts',
  fields: [
    { name: 'title', type: 'text' },
    { name: 'excerpt', type: 'textarea' },
  ],
})
Add one field. Watch the two panels on the right.Add one field. Watch the two panels below.

2 · The admin · Entry editor

Release notes: November

Excerpt

Content releases and version history.

3 · Your API

3 · Your API
const { items } = await nextly.find({
  collection: 'posts',
})

// response
{ "items": [{
    "title": "Release notes: November",
    "excerpt": "Content releases and…",
  }], "meta": { … } }

The Direct API reads straight from your database in your page code.

Code and the Visual Schema Builder both feed the same Nextly runtime, admin and APIs. The Visual Schema Builder runs on your development instance.

Add a field once, in TypeScript or in the Visual Schema Builder, and it reaches the editor and the API.

npx create-nextly-app@alpha my-app
Read the quick start

In 0.0.2-alpha.70

What ships today

CMS for Next.jsAt a glance
Package
nextly
Release
0.0.2-alpha.70 · 25 Oct 2026
Licence
MIT
Runs in
Your own Next.js app, self-hosted
Databases
PostgreSQL 15+, MySQL 8+, SQLite 3.38+ for local work
Requires
Node.js 22.12+ or 24+; Next.js 16 with the App Router; React 19
APIs
The Direct API and REST

Not today

Where it stops

The Visual Schema Builder
Model content visually on your development instance with the Visual Schema Builder. Docs
Access rules and the Direct API
The Direct API runs as trusted server code and skips access rules unless you pass overrideAccess: false. Called that way with no user, it is judged as a signed-out visitor: it can read where no rule names the read, and a create, update or delete needs a rule that allows it. Docs
Sign-in
Sign-in for your team: email and password, sessions and API keys, stored in your own database. Docs
Database versions
PostgreSQL 15 or later, MySQL 8 or later, SQLite 3.38 or later for local work. Docs

Nextly is in alpha. APIs may change before 1.0. Pin exact versions in production.

Questions

Does Nextly run inside my Next.js app?

MIT licensed, self-hosted. Runs inside your own Next.js app, on your own PostgreSQL or MySQL database, or SQLite for local work.

Do I model content in code or in the admin?

Model content in TypeScript or in the Visual Schema Builder. Both feed the same Nextly runtime, admin and APIs.

Model content visually on your development instance with the Visual Schema Builder.

Does Nextly have a GraphQL API?

No. Nextly offers REST and the Direct API.

Is Nextly free?

Nextly is MIT licensed and self-hosted.

MIT today, and no decision yet about paid offerings.

Can a coding agent set it up?

Every new Nextly project ships with an AGENTS.md and CLAUDE.md written for coding agents.