Blog
How to get started with NomaCMS?
NomaCMS is a headless CMS with auth built in. You model content in the dashboard, deliver it through a REST API, and optionally run signup, login, and sessions for your app's users in the same platform. You can start with content only and add auth when your product needs it. This guide walks you through the first steps, then points you to the right path for your framework and for AI coding tools.
Create your account and project
Start at app.nomacms.com. Sign up, open the dashboard, and click New Project. Each project is its own content space with its own API, locales, and settings. One project usually maps to one site or app.
When the project is ready, copy two values:
- Project ID from the project home page or Project Settings → API Access
- API key from User Settings → API Keys (create one with the abilities you need; copy it right away, it is only shown once)
Model content and publish entries
Inside your project, create a collection. For a simple blog, add a collection called Posts with slug posts, then add fields like title (Text) and body (Rich Text). Create one or two entries, save them, and publish when you are happy with the copy.
Collections can be lists (many entries) or singletons (one record, useful for a homepage or site settings). You can add more field types later, including media, relations, and groups. For now, keep it small and get something on the page.
Install the SDK and fetch content
Install the official client:
npm install @nomacms/js-sdkAdd your credentials to an environment file (never expose the API key in the browser):
NOMA_PROJECT_ID=your-project-uuid
NOMA_API_KEY=your-api-keyFetch published posts from server-side code:
import { createClient } from "@nomacms/js-sdk"
const noma = createClient({
projectId: process.env.NOMA_PROJECT_ID!,
apiKey: process.env.NOMA_API_KEY!,
})
const result = await noma.content.list("posts", { state: "published" })
const posts = "data" in result ? result.data : resultThat is the core loop: define content in NomaCMS, read it in your app through the SDK or REST API. Entries can stay in draft until you publish, so you can iterate safely. See the Quickstart for a full walkthrough.
Next.js
In Next.js, keep NOMA_API_KEY on the server only. Do not prefix it with NEXT_PUBLIC_. A small helper in lib/nomacms.ts and an async Server Component or Route Handler is enough to list entries and render them.
Typical flow: create the helper, call noma.content.list("posts") in a Server Component, map over entry.fields in your JSX. If you need member-only content, NomaCMS project auth runs on the server too. Full patterns live in the Next.js guide and Auth for Next.js.
Nuxt
In Nuxt, store secrets in runtimeConfig, not in public. Set NUXT_NOMA_PROJECT_ID and NUXT_NOMA_API_KEY in .env, then call the SDK from a Nitro server route or a server-only composable inside useAsyncData.
Your pages stay fast and your token stays off the client. See the Nuxt guide and Auth for Nuxt for copy-paste examples.
Astro
In Astro, use the SDK in server context: page frontmatter or a server endpoint. Read NOMA_PROJECT_ID and NOMA_API_KEY from import.meta.env without a PUBLIC_ prefix so they never ship to the client bundle.
Static or hybrid rendering both work; just fetch content where Astro runs on the server. Details are in the Astro guide and Auth for Astro.
Using NomaCMS with AI tools
You do not have to do everything in the dashboard. If you use Cursor, Claude Code, or another MCP-compatible editor, connect the MCP server (@nomacms/mcp-server). It lets your agent create collections, add fields, and manage entries while you build the frontend.
Install Agent Skills from GitHub so the assistant already knows SDK patterns, auth flows, and framework conventions. That cuts down on repeating the same setup instructions in every chat.
Inside the dashboard, NomaCMS AI can help with schema and content through conversation, and inline tools can rewrite or translate fields. MCP is for your editor; dashboard AI is for editors and quick CMS tasks. Both sit on top of the same project and API. If you prefer a visual walkthrough first, the AI Assistant and MCP Server pages summarize what each layer does.
What to explore next
Once content is flowing, you might add locales for multilingual sites, webhooks to rebuild on publish, or project auth if your app needs logged-in users. Pricing includes a 7-day trial on every plan.