Open-source headless CMS

The CMS that fits
your database,
not the other way around

Nivaro puts a metadata layer, workflow engine, and full React admin on top of your existing MSSQL tables. Your schema stays yours. No migration required.

TypeScript Fastify v5 MSSQL / Knex React 19 Socket.io GraphQL

Built for how enterprise
content actually works

Most CMS tools force your data into their schema. Nivaro maps to yours — and adds the operational infrastructure your teams need to run complex approval and ownership workflows.

Workflow Engine

Define states, transitions, and role-gated approvals as a state machine on any collection. The engine enforces the process; editors see only the transitions they're allowed to take.

Draft In Review Published Needs Revision Published

Pipeline / Owner Matrix

Route records through multi-dimensional ownership chains. Assign responsibility by field value, department, or workflow state. Priority and inheritance rules handle edge cases.

RBAC Permissions

Fine-grained access control at the collection and field level. Roles, policies, and Microsoft Entra group sync without a separate identity store.

GraphQL + REST

Auto-generated schema from your metadata registry. GraphQL subscriptions via WebSocket. REST for everything else. Rebuilt live with one request.

TypeScript SDK

A typed client for reading, writing, and filtering records. Real-time subscriptions via Socket.io. Ships as @nivaro/sdk.

import { createNivaro } from '@nivaro/sdk'

const cms = createNivaro ( { url })

Audit Log + Revisions

Every mutation logged with a full snapshot and field-level delta. Compare any two versions side-by-side. Immutable history that holds up to compliance requirements.

Query your data
from anywhere

The TypeScript SDK wraps the Nivaro API with full type safety, filter helpers, and real-time subscriptions. One import replaces hundreds of ad-hoc fetch calls.

Inferred TypeScript types for every collection
Filter, sort, paginate with a typed query builder
Socket.io subscriptions with subscribe()
Workflow transitions and pipeline ownership reads
Published to GitLab npm registry as @nivaro/sdk
SDK reference
fetch-articles.ts TypeScript
import { createNivaro, readItems, createItem } from '@nivaro/sdk'

const cms = createNivaro({
  url: 'https://cms.example.com',
  token: process.env.CMS_TOKEN
})

// Fetch published articles with filters
const articles = await cms.request(
  readItems('articles', {
    filter: {
      status: { _eq: 'published' },
      department: { _in: ['engineering', 'product'] }
    },
    sort: ['-published_at'],
    limit: 20
  })
)

// Subscribe to real-time updates
const unsub = cms.subscribe('articles', (event) => {
  console.log(event.action, event.item)
})

How it fits in your stack

Nivaro sits between your existing database and your applications. It adds a permission-aware API layer without altering your table structure.

Operational depth
for complex orgs

Nivaro was built to replace a paid enterprise CMS. Every feature exists because a real team needed it, not because a roadmap demanded it.

Read the docs View source
Microsoft OIDC + Entra
PKCE auth flow, AD group sync, and role assignment. No separate identity store.
Multi-workspace
Isolated environments with separate collections, roles, and permission scopes per workspace.
SLA Tracking
Business-hours-aware SLA rules per workflow state. Warning and breach notifications with escalation.
Alert Engine
Threshold alerts on any numeric field with cooldown windows, in-app and email delivery.
Data Import Queue
CSV import with column mapping, deduplication strategies, and live progress via Socket.io.
Inngest Job Queue
Scheduled flows, retries, and background jobs via self-hosted Inngest. No cloud dependency.
Public Submission Forms
Token-gated forms with rate limiting, optional password protection, and scrypt hashing.
Field-Level Watches
Subscribe to changes on specific fields. Notifications delivered in-app and via email when values change.

Your data. Your schema.
Your CMS.

Nivaro is open source and self-hosted. Bring your own MSSQL database and deploy with Docker in minutes.

Self-hosted · No vendor lock-in · MIT licensed