Open-source Gen UI pipeline. The Zero before One.
Thesys built C1 — a $49/mo black box Gen UI pipeline. We built C0 — the same pipeline, fully open source.
Zod schema → JSON Schema → LLM structured output → partial JSON streaming → component rendering.
That's the entire Gen UI pipeline. C1 charges for it. C0 opens it.
pnpm add @c0/react @c0/schema zodimport { z } from "zod";
import { defineComponent, buildResponseFormat } from "@c0/schema";
import { useGenUI } from "@c0/react";
const WeatherCard = defineComponent({
name: "weather_card",
description: "Display current weather information",
schema: z.object({
city: z.string(),
temp: z.number(),
condition: z.enum(["sunny", "cloudy", "rainy"]),
}),
});
// That's it. C0 handles the rest:
// schema → JSON Schema → LLM structured output → streaming → renderNote: C0 is in early development. The API above is the target — implementation in progress.
| C1 | Tambo | CopilotKit | C0 | |
|---|---|---|---|---|
| Open source | ✗ | ✓ | ✓ | ✓ |
| Framework-agnostic | ✗ | ✗ (React) | ✗ (React/Angular) | ✓ |
| Pipeline visible | ✗ | Partial | ✗ | 100% |
| Self-hosted | Enterprise | ✓ | ✓ | ✓ |
| No cloud required | ✗ | ✗ | ✗ | ✓ |
| Package | Description |
|---|---|
@c0/core |
Framework-agnostic engine (partial JSON parser, event bus, validation) |
@c0/schema |
Zod → JSON Schema, defineComponent(), buildResponseFormat() |
@c0/stream |
SSE streaming middleware, partial JSON parsing |
@c0/react |
React bindings (useGenUI, GenUIProvider, StreamingMessage) |
┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ ┌──────────────┐ ┌───────────┐
│ Zod Schema │ → │ JSON Schema │ → │ LLM Structured │ → │ Partial JSON │ → │ Component │
│ (you write) │ │ (auto-gen) │ │ Output (any LLM) │ │ Parser │ │ Render │
└─────────────┘ └──────────────┘ └─────────────────┘ └──────────────┘ └───────────┘
@c0/schema @c0/schema your LLM @c0/stream @c0/react
pnpm install
pnpm build
pnpm test
pnpm typecheck