2 min read
Live preview for your website in four steps
Show editors their draft on the real website, updating as they type. Here are the four small pieces your website needs, and what each one does.
Free trials of CMS Orbit open in
Developers
CMS Orbit is headless. Read content with an official SDK for JavaScript, PHP, Swift or Kotlin, or over REST or GraphQL, and refresh your website the moment something's published.
Official SDKs
Every SDK is typed, MIT-licensed and reads the same delivery API, so your website and your apps show the same content.
The JavaScript SDK
The JavaScript SDK, @bifrost-orbit-cms/sdk, is MIT-licensed and on npm. It gives you a typed client, a React renderer, Next.js helpers for preview, cache refresh and sitemaps, SEO output, a mock client for tests and a type generator.
Building in Laravel or Symfony, or a native iOS or Android app? The SDKs for PHP, Swift and Kotlin read the same content, and the type generator writes types for each of them.
import { notFound, redirect } from 'next/navigation'import { CmsPage } from '@bifrost-orbit-cms/sdk/react'import { toMetadata } from '@bifrost-orbit-cms/sdk/seo'import { cms } from '@/lib/cms'import { registry } from '@/cms/registry'export async function generateMetadata({ params }) { const { slug = [] } = await params const result = await cms.resolve({ path: '/' + slug.join('/') }) return result.kind === 'page' ? toMetadata(result.page) : {}}export default async function Page({ params }) { const { slug = [] } = await params const result = await cms.resolve({ path: '/' + slug.join('/') }) if (result.kind === 'redirect') redirect(result.to) if (result.kind !== 'page') notFound() return <CmsPage page={result.page} registry={registry} />}Typed end to end
Generate types from your space and register a React component for each component in the CMS. A missing or misspelt one is a type error, so a schema change that would break the website gets caught before it ships.
REST and GraphQL
Read pages, lists, menus, settings and campaigns over REST, or several at once in a single GraphQL request. Responses carry cache headers and match what the editor shows in its API response view.
Also for developers
Getting started
Webhooks
The handler checks the signature, rejects messages more than five minutes old and refreshes only the pages, menus and sitemaps that changed. Without the SDK, you can verify the HMAC signature in any language.
// app/api/revalidate/route.tsimport { createRevalidateHandler } from '@bifrost-orbit-cms/sdk/next'export const POST = createRevalidateHandler({ secret: process.env.CMS_WEBHOOK_SECRET!,})Bring your own stack
Render CMS Orbit content in Next.js and React, Laravel and Symfony, or iOS and Android apps with the official SDKs, or read it from any framework over REST and GraphQL. Connect the AI assistant your team already uses over MCP.
From the blog
2 min read
Show editors their draft on the real website, updating as they type. Here are the four small pieces your website needs, and what each one does.
4 min read
Laravel and Symfony websites and native iOS and Android apps get official SDKs too. All four are typed, open source and read the same content.
5 min read
Search brings the visitors you don't pay for each time, but small mistakes undo months of work. Here's how CMS Orbit catches them before they cost you.
Create a space, generate your types and render your first page. The trial is free for 14 days.