Open-source CMS and Visual Page Builder for Next.js
It runs inside your own Next.js app, on your own PostgreSQL or MySQL database.
TypeScript · Self-hosted · MIT · PostgreSQL, MySQL, SQLite · 0.0.2-alpha.72


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.
An illustration of the Visual Page BuilderAn illustration of the Visual Page Builder’s panels, stacked to fit a small screen nothing is saved
The builder itself needs a window at least 1280 pixels wide.
Step 1 of 6Step 1 of 5
Adds at the end of the page
content
media
interactive
Start here: add a ButtonSix of the core blocks, to try.
Product updates
What shipped this month, what is scheduled next, and the thinking behind it.
Build a page from the 20 core blocks. A block’s supports decides which style controls the Visual Page Builder offers for it.
npx create-nextly-app@alpha my-appA Next.js CMS that lives inside your app
Nextly runs in your Next.js app, on your own PostgreSQL or MySQL database. Read content straight from your database in your page code (the Direct API), or over REST.
- Model
- Model content in TypeScript or in the Visual Schema Builder. Both feed the same Nextly runtime, admin and APIs. The Visual Schema Builder runs on your development instance. Limits
- Types
nextly generate:typeswrites types for the collections, singles and field groups in your config.- Access
- 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. The Direct API runs as trusted server code and skips access rules unless you pass
overrideAccess: false. - Extend
- Official plugins: Visual Page Builder, SEO and Form Builder. Write your own with the alpha plugin SDK; parts are marked experimental, so pin exact versions.
// nextly.config.ts
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] });// 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>;
}# REST, with an API key
GET /admin/api/collections/posts/entries?limit=10&sort=-createdAt
Authorization: Bearer <api key>
{
"items": [{ "id": "…", "title": "Release notes: November" }],
"meta": { "total": 1, "page": 1, "limit": 10, "totalPages": 1 }
}What ships in 0.0.2-alpha.72, and where it stops
Each line links to the docs page that states its limits.
Model content
- Content modelModel content in TypeScript or in the Visual Schema Builder. Both feed the same Nextly runtime, admin and APIs.
- Team sign-inSign-in for your team: email and password, sessions and API keys, stored in your own database.
- RolesRole-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.
- MediaFolders, thumbnails and image sizes. Local disk, S3 (and R2), Vercel Blob or UploadThing.
Build pages
- Visual Page BuilderTwenty blocks out of the box, and the page renderer takes your own React blocks.plugin
- BreakpointsStyle a block separately for each breakpoint.
- RenderingPages render on the server, and the core blocks add no JavaScript of their own.limits
- FormsBuild forms and capture submissions with the Form Builder plugin.plugin
Publish with control
- LanguagesTranslate collections, singles and components, with a fallback language when a translation is missing.
- VersionsCompare two versions of the same language and restore an earlier one. Restoring saves the current state first.
- ReleasesGroup up to 200 documents’ changes and publish them together at a time you choose, with a scheduler configured.
- PresenceSee who else is editing a document, and take over deliberately.
Run and extend
- APIsRead content straight from your database in your page code (the Direct API), or over REST.
- WebhooksSigned webhooks for content, media, user and form events, with retries, a delivery log, redelivery and secret rotation.
- JobsBackground jobs, run by calling one endpoint from your scheduler.needs a scheduler
- PluginsAn alpha plugin SDK for schema, services, routes, admin UI and permissions.alpha
Recently shipped
What changed in the last three releases.
0.0.2-alpha.72
- Security: the MCP server SDK, nodemailer, undici and fast-uri move past their published advisories. Apps that send email over SMTP need nodemailer 10.
- New projects ship the route that serves local uploads under `next start`.
- A code access rule now narrows what a role allows: it no longer lets in a signed-in user who lacks the permission.
0.0.2-alpha.71
0.0.2-alpha.70
Milestone
Part of the Vercel Open Source Program.
Milestone
In our test on Nextly 0.0.2-alpha.67, Claude Code and Codex each set up a working Nextly project from an empty folder, from a plain request and the public docs. Working with agents
Questions
What is Nextly?
Nextly is an open-source content platform for Next.js. It runs inside your own Next.js app, on your own PostgreSQL or MySQL database, or SQLite for local work. What Nextly is, in full.
Is Nextly free?
Nextly is MIT licensed and self-hosted. MIT today, and no decision yet about paid offerings. What Nextly costs.
Can I use it in production?
Nextly is in alpha. APIs may change before 1.0. Pin exact versions in production. What alpha means here.
What do I need?
Node.js 22.12+ or 24+ (Node 24 LTS recommended), Next.js 16 with the App Router, React 19, and PostgreSQL 15+, MySQL 8+ or SQLite 3.38+ for local work.
Can a coding agent set it up?
Every new Nextly project ships with an AGENTS.md and CLAUDE.md written for coding agents. In our test on 0.0.2-alpha.67, Claude Code and Codex each set up a working project from an empty folder.
How does it compare with Payload, Strapi or Sanity?
We keep dated comparisons that say where Nextly fits. See the compare pages.


