The headless CMS that lives in your codebase.
Define your content schema in TypeScript, manage it through the admin panel, and consume it with zero-overhead Direct API in Server Components or REST endpoints for external clients. No separate backend to deploy or pay for.
Dual Approach
Define content types in TypeScript or build them visually in the Schema Builder. Your editors use the admin panel either way.
Direct API
Zero-overhead server-side access in Next.js Server Components. Query your database directly, no HTTP round-trip needed for SSR.
Type-Safe
Generated TypeScript types from your schema. Full IntelliSense from collection definition to frontend rendering.
Your Database
PostgreSQL, MySQL, or SQLite. Your data on your servers, no cloud content platform, no per-seat pricing, no vendor lock-in.
Separate CMS, separate problem.
Most headless CMS products are separate services. You pay for another subscription, manage another deployment, deal with API latency on every page render, and duplicate your content model across two systems. When you query your CMS from a Server Component, you're adding a network hop for every request.
Nextly runs inside your Next.js app. The admin panel, the database queries, and your frontend all share the same process. No extra service to keep alive.
Define Manage Consume
1. Define your collections
import {
defineCollection, text, richText,
relationship, select, upload,
} from"@revnixhq/nextly/config";
export default defineCollection({
slug:"posts",
fields: [
text({ name:"title", required: true }),
text({ name:"slug", unique: true }),
richText({ name:"content" }),
upload({ name:"featuredImage", relationTo:"media" }),
relationship({ name:"author", relationTo:"users" }),
relationship({
name:"categories",
relationTo:"categories",
hasMany: true,
}),
select({
name:"status",
options: [
{ label:"Draft", value:"draft" },
{ label:"Published", value:"published" },
],
}),
],
});2. Manage in the admin panel
Your editors log in to /admin and create, edit, and publish content. No developer involvement needed.
3. Consume via Direct API in Server Components
import { getNextly } from"@revnixhq/nextly";
export default async function BlogPost({ params }) {
const nextly = getNextly();
// Direct database query - no HTTP round-trip
const { data } = await nextly.find({
collection:"posts",
where: { slug: { equals: params.slug } },
});
const post = data[0];
return (
<article>
<h1>{post.title}</h1>
<div dangerouslySetInnerHTML={{ __html: post.content }} />
</article>
);
}Start building with Nextly
Free, open source, and yours to own. No sign-up required.
npx create-nextly-app@latest