Render your UI from JSON — on your own components.
@dashforge/blueprint is the thin, open-source runtime you host. Hand it a contract and it renders real React on your design system — no eval, no iframe, no lock-in.
npm i @dashforge/blueprint · React 19 · self-hosted · CSP-clean · no data egress
import { DashBlueprint } from '@dashforge/blueprint' export default function Screen({ contract }) { return <DashBlueprint {...contract} lib="tw" /> }
Server-driven UI shouldn't mean shipping an interpreter.
Every other way to render UI from your backend forces a bad trade. The runtime refuses all three.
An interpreter in the browser
Config that gets eval'd is a CSP hole and an audit you'll lose.
An iframe or a webview
A foreign box you can't theme — it never looks like your product.
A vendor's black box
Someone else owns your rendering, your data path, and your bill.
It maps contract nodes to your components. That's the whole trick.
No interpreter. No eval. No iframe. The runtime walks the JSON and mounts real React from a registry you control.
Real components
Your own React in your own tree — testable, themeable, native.
No eval, ever
It resolves nodes to components. Nothing is evaluated; CSP stays strict.
You host it
Open-source, on your infrastructure. No data egress, no per-render meter.
One contract. Your components.
The same contract renders on Tailwind or MUI — with your tokens, your components. It looks like your product, because it is.
Same JSON. Same nodes. Two design systems — your choice, at render time.
Drop in real React where you need it.
Anything the catalog doesn't cover, you supply as typed React — customNodes, slots, forms. The contract stays declarative; your logic stays reviewable.
<DashBlueprint {...contract} lib="tw" customNodes={{ currencyField: CurrencyField }} forms={{ kyc: { schema, onSubmit } }} />
A runtime you host yourself.
The runtime is open-source and self-hosted. Nothing leaves your environment, there's no per-render meter, and there's no black box — which is exactly why a regulated team can ship on it.
SSR-safe. Framework-agnostic.
It touches no browser-only API at render, so you server-render the first paint and hydrate. Next.js, Remix, Vite — any React 18+ — just work; in the App Router it lives inside a client boundary.
The runtime is one half of the picture.
The contract it renders is authored, filled, and shipped by the rest of Blueprint.