The runtime

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

app/kyc/page.tsxreal components
import { DashBlueprint } from '@dashforge/blueprint'

export default function Screen({ contract }) {
  return <DashBlueprint {...contract} lib="tw" />
}
Identity check
Rendered by the runtime — your components, no eval.
Legal name
Ada Lovelace
Country
United Kingdom
The problem

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.

What it is

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.

Your design system

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.

Tailwind flavor · lib="tw"
Identity check
Legal nameAda Lovelace
CountryUnited Kingdom
MUI flavor · lib="mui"
Identity check
Legal nameAda Lovelace
CountryUnited Kingdom

Same JSON. Same nodes. Two design systems — your choice, at render time.

Never a wall

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.

screen.tsx
<DashBlueprint
  {...contract}
  lib="tw"
  customNodes={{ currencyField: CurrencyField }}
  forms={{ kyc: { schema, onSubmit } }}
/>
The difference

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.

Fits your stack

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.

Next.jsRemixViteReact 18 & 19
One core, more surfaces

The runtime is one half of the picture.

The contract it renders is authored, filled, and shipped by the rest of Blueprint.

The Builder

Author the contract visually and export portable JSON.

Learn more

The SDK

Your backend binds data into the contract, server-side, in any language.

Learn more

See it end to end

The whole path, from contract to a rendered screen.

Learn more
Get started

Render UI you own.