TRENDSHIFT · 2026.06.16

json-render 딥다이브
— AI가 만드는 UI를, "안전한 JSON"으로 가두는 프레임워크

json-render(vercel-labs/json-render)는 Generative UI(생성형 UI) 프레임워크다. "대시보드 만들어줘" 같은 자연어 프롬프트를 LLM에 주면, LLM은 자유롭게 코드를 뱉는 게 아니라 당신이 미리 정의한 컴포넌트 카탈로그 안에서만 JSON 명세(spec)를 생성한다. 그 JSON을 렌더러가 받아 실제 React/Vue/Svelte/Solid 화면으로 그린다. 한마디로 "AI에게 그림 그릴 도화지와 색연필만 정해 주고, 그 안에서만 그리게 하는" 안전장치다. (저장소: vercel-labs/json-render · Apache-2.0 · pnpm 모노레포 · 코어 v0.19.0 · 30개 이상 패키지)

이 문서는 README 번역이 아니다. packages/core의 스키마·카탈로그·스트리밍 엔진, 30여 개 렌더러 패키지의 설계, AI SDK 연동 코드까지 직접 뜯어보고 "이 레포에서 무엇을 배울 수 있는가"에 초점을 맞췄다.
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

이 레포가 정확히 무엇을 하는 물건인가.

핵심 메시지

"AI에게 화면을 자유롭게 코딩하게 두지 말고,
당신이 정한 부품으로만 조립한 'JSON 설계도'를 받아라."

LLM에게 "HTML/JSX 코드를 직접 작성해줘"라고 하면 결과는 매번 다르고, 깨진 마크업·존재하지 않는 컴포넌트·보안 위험(XSS)이 섞일 수 있다. json-render는 그 대신 당신이 정의한 컴포넌트 카탈로그(Card, Button, Metric…)를 LLM에게 알려주고, LLM은 그 부품들로 구성한 JSON 트리(spec)만 생성하게 한다. 당신의 앱은 그 JSON을 미리 만들어 둔 안전한 컴포넌트로 렌더링한다.

즉 흐름은 ① 프롬프트 → ② AI + 카탈로그 → ③ JSON spec → ④ 렌더러의 4단계다. AI의 출력은 "코드"가 아니라 데이터(JSON)이기 때문에, 검증(validate)·스트리밍·재현이 가능하고, React Native·PDF·이메일·3D·터미널 등 같은 JSON을 여러 플랫폼에서 재사용할 수 있다.

// AI가 생성하는 것은 코드가 아니라 이런 "평면 spec" JSON
{
  "root": "card-1",
  "elements": {
    "card-1": { "type": "Card", "props": { "title": "안녕" }, "children": ["btn-1"] },
    "btn-1":  { "type": "Button", "props": { "label": "클릭" }, "children": [] }
  }
}
핵심 용어
Generative UI (생성형 UI)
사용자의 자연어 요청에 맞춰 화면(UI)을 그때그때 AI가 생성하는 패러다임. 텍스트만 생성하던 챗봇을 넘어, 답변 자체를 버튼·차트·폼 같은 인터랙티브 컴포넌트로 만들어 보여준다. json-render는 이걸 "정해진 부품 안에서만" 하도록 가둔다.

2왜 주목받는가

왜 Vercel Labs가 이걸 내고, 트렌딩에 올랐는가.

2024~2025년 "AI가 만드는 UI"는 큰 화두였다. Vercel의 AI SDK에는 이미 generative UI(툴 호출로 React 컴포넌트를 스트리밍) 기능이 있었지만, 그건 개발자가 코드로 컴포넌트를 미리 짜 두고 AI가 그중 하나를 고르는 방식에 가까웠다. json-render는 한 발 더 나아가 AI 출력 자체를 검증 가능한 데이터 명세로 표준화하고, 그 명세를 거의 모든 렌더 타깃으로 확장했다. 트렌딩 이유를 셋으로 정리한다.

강점 1 — 가드레일(Guardrailed)

AI는 카탈로그에 정의된 컴포넌트와 액션만 쓸 수 있다. 존재하지 않는 태그를 만들거나 임의 코드를 실행할 수 없다. 출력은 항상 당신의 스키마(zod로 정의)에 맞는 JSON이라, "AI가 이상한 걸 그렸다"는 사고를 구조적으로 차단한다.

강점 2 — 크로스 플랫폼(One Catalog, Many Targets)

같은 spec JSON을 React·Vue·Svelte·Solid(웹), React Native(모바일), Remotion(영상), react-pdf(문서), react-email(이메일), Ink(터미널), R3F(3D), Image(OG 카드)로 렌더한다. UI를 "코드"가 아닌 "데이터"로 다루기에 가능한 일이다.

강점 3 — 스트리밍 + 예측 가능성

LLM이 토큰을 흘리는 동안 SpecStream 컴파일러가 부분 JSON을 조금씩 받아 화면을 점진적으로 그린다(progressive rendering). 사용자는 빈 화면을 기다리지 않고 UI가 채워지는 걸 본다. 그러면서도 최종 결과는 스키마에 맞게 예측 가능하다.

구분"AI가 코드 직접 생성"json-render (JSON spec)
출력물JSX/HTML 코드(문자열)검증 가능한 JSON 데이터
안전성임의 코드·XSS 위험카탈로그로 가드레일
재현성매번 다름스키마로 고정
플랫폼보통 한 곳(웹)웹·모바일·PDF·영상·터미널…
스트리밍까다로움SpecStream 내장
균형 잡힌 시각
한계도 분명하다

① 표현력의 천장. AI는 당신이 만든 부품으로만 조립하므로, 카탈로그에 없는 UI는 절대 못 만든다(그게 핵심 안전장치이자 동시에 제약). ② 카탈로그 설계 비용. 좋은 결과는 좋은 카탈로그(컴포넌트·props 스키마·description)에서 나온다 — 초기 설계 품질이 곧 결과 품질이다. ③ 신생 프로젝트. v0.x대로 API가 바뀔 수 있고, 에코시스템·예제가 아직 성장 중이다.

3기술 스택 전체 지도

코어 / 렌더러 / 상태·도구 / 빌드·인프라로 나눠 본다.

json-render는 pnpm + Turborepo 모노레포다. 30개가 넘는 npm 패키지(@json-render/*)가 한 저장소에 들어 있고, 모두 @json-render/core 위에 얹힌다. 핵심은 "코어는 프레임워크를 모른다"는 점 — core는 순수 TypeScript + zod로 스키마·검증·스트리밍만 담당하고, React/Vue/Svelte 의존성은 각 렌더러 패키지가 가진다.

① 코어 (프레임워크 무관 두뇌)

기술역할
TypeScript 5.9전 패키지 타입 안전성. 카탈로그→props 타입 추론까지 제네릭으로 구현
Zod 4컴포넌트 props 스키마 정의·런타임 검증. 카탈로그의 진실원
스키마 빌더defineSchema/defineCatalog — spec 형태와 카탈로그가 제공할 것을 선언
SpecStreamcreateSpecStreamCompiler — 부분 JSON 청크를 점진적 spec으로 컴파일
Directives$state/$cond/$template/$computed 등 동적 표현식 해석 엔진

② 렌더러 (타깃별 출력)

패키지타깃
react / vue / svelte / solid웹 UI (4대 프레임워크)
react-native모바일 (iOS/Android)
shadcn / shadcn-svelte36종 사전 제작 shadcn/ui 컴포넌트
remotion영상 (타임라인 spec)
react-pdf / react-emailPDF 문서 / HTML 이메일
ink터미널 TUI
imageSatori 기반 SVG/PNG (OG 이미지)
react-three-fiber3D 씬 (가우시안 스플랫 포함)
nextNext.js 풀 앱 (라우트·레이아웃·SSR·메타데이터)

③ 상태·도구·연동

패키지역할
redux / zustand / jotai / xstate외부 상태 라이브러리를 StateStore에 어댑터로 연결
devtools(-react/vue/svelte/solid)드롭인 인스펙터: spec 트리·상태 편집·액션 로그·DOM 피커
directives$format·$math·$concat·$t(i18n) 등 즉시 쓰는 7+종 디렉티브
mcpMCP Apps 연동 — Claude·ChatGPT·Cursor·VS Code에 UI 서빙
yamlJSON 대신 YAML 와이어 포맷(스트리밍 파서·편집 모드)
codegenUI 트리에서 실제 코드 생성

④ 빌드·인프라

기술역할
pnpm 11 + Turborepo모노레포 의존성·태스크 캐싱 빌드
tsup각 패키지 ESM/CJS 동시 번들
Vitest 4단위 테스트(코어에만 수십 개 *.test.ts)
Vercel AI SDK (ai)예제의 LLM 연동 — pipeJsonRender로 스트림 변환
Next.js (apps/web)문서 사이트 + 플레이그라운드(MDX)
비유

json-render의 구조는 "공용 어댑터 + 멀티 콘센트"와 같다. core는 표준 전압(JSON spec)을 만드는 발전기이고, 각 렌더러는 그 표준 전기를 나라별 콘센트(React·Vue·PDF·영상…)에 맞게 꽂아주는 어댑터다. 새 플랫폼이 필요하면 어댑터(렌더러 패키지) 하나만 더 만들면 된다.

4아키텍처 심화 분석

프롬프트가 화면이 되기까지, 그리고 핵심 설계 패턴.

전체 파이프라인은 단순하지만 각 단계가 명확히 분리돼 있다. 아래 그림은 "사용자 입력 → LLM → JSON spec → 렌더러 → 화면"의 흐름과, 그 안에서 가드레일·스트리밍·상태가 어디서 작동하는지를 보여준다.

┌──────────────────────────────────────────────────────────────────┐ │ 1) 카탈로그 정의 (개발자, 1회) │ │ defineCatalog(schema, { components, actions }) │ │ · 컴포넌트(zod props) · 액션 · 설명(description) │ │ │ │ │ ▼ catalog.prompt() → 시스템 프롬프트 자동 생성 │ └──────────────┼─────────────────────────────────────────────────────┘ │ 사용자 프롬프트 "매출 대시보드 만들어줘" │ ▼ ┌──────────────────────── LLM (AI SDK / Gateway) ───────────────────┐ │ 시스템 프롬프트(카탈로그) + 사용자 프롬프트 │ │ → 토큰을 흘리며 JSON spec 생성 ░░░░░▒▒▒▓▓▓ (스트리밍) │ └──────────────┬─────────────────────────────────────────────────────┘ │ 부분 JSON 청크 ▼ ┌──────────── SpecStream 컴파일러 (@json-render/core) ──────────────┐ │ compiler.push(chunk) → { result(부분 spec), newPatches } │ │ 불완전한 JSON도 안전하게 파싱 → 화면 점진 갱신 │ └──────────────┬─────────────────────────────────────────────────────┘ │ spec (root + elements 맵) ▼ ┌──────────────────── Renderer (react / vue / …) ───────────────────┐ │ root부터 children 트리를 순회 │ │ 각 element.type → registry의 실제 컴포넌트로 매핑 │ │ │ │ ┌── 동적 해석 계층 (렌더 시 매번 평가) ──────────────────┐ │ │ │ $state(상태 읽기) · $cond(분기) · $template(보간) │ │ │ │ $computed(함수) · visible(조건부 표시) · watch(감시) │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ emit(action) │ │ ▼ │ │ StateStore ──(setState)──► 상태 변경 → 재평가 → 리렌더 │ │ (redux/zustand/jotai/xstate 어댑터로 교체 가능) │ └────────────────────────────────────────────────────────────────────┘

핵심 설계 패턴 4가지

패턴 1 — 카탈로그가 시스템 프롬프트가 된다

가장 영리한 부분. 개발자가 defineCatalog로 컴포넌트·props·설명을 선언하면, catalog.prompt()가 그걸 읽어 LLM용 시스템 프롬프트를 자동 생성한다. "어떤 부품이 있고 props는 무엇인지"를 사람이 두 번 적을 필요가 없다. 카탈로그 = 진실원(single source of truth).

패턴 2 — 평면 spec (root + elements 맵)

UI 트리를 중첩 객체로 두지 않고 elements 맵 + children ID 배열로 평탄화했다. 스트리밍 중 부분 파싱이 쉽고, 특정 노드만 패치(부분 갱신)하기 좋다. 이것이 SpecStream의 newPatches와 맞물린다.

패턴 3 — 정적 데이터 + 동적 디렉티브 분리

props 값은 고정 데이터일 수도, {"$state":"/path"}·{"$cond":…} 같은 표현식일 수도 있다. 렌더러는 렌더 시점에 이 디렉티브를 상태(StateStore) 기준으로 해석한다. JSON 안에 "선언적 로직"을 담되, 실행은 안전한 해석기가 한다.

패턴 4 — 어댑터로 갈아끼우는 상태/렌더

상태는 StateStore 인터페이스 뒤에 숨겨 redux·zustand·jotai·xstate 무엇이든 끼울 수 있고, 렌더는 core 위에 프레임워크별 패키지를 얹는다. 코어는 어떤 UI 라이브러리도 import하지 않는다 — 의존성 역전의 모범.

코드로 보기
setState 액션 + 동적 visible
버튼이 setState로 상태를 바꾸면, 그 상태를 읽는 visible 조건과 $cond props가 자동 재평가돼 화면이 갱신된다. 아래는 탭 전환 UI가 JSON만으로 동작하는 예다.
{
  "type": "Pressable",
  "props": {
    "action": "setState",
    "actionParams": { "statePath": "/activeTab", "value": "home" }
  }
}
// 다른 노드: 상태 값에 따라 아이콘이 자동으로 바뀜
{
  "type": "Icon",
  "props": {
    "name": { "$cond": { "$state": "/activeTab", "eq": "home" },
              "$then": "home", "$else": "home-outline" }
  }
}

5디렉토리 구조 해부

모노레포의 어디에 무엇이 있는가.

루트는 pnpm 워크스페이스 설정과 Turborepo 파이프라인이고, 실제 코드는 packages/(라이브러리), apps/web(문서 사이트), examples/(데모), skills/(AI 에이전트용 사용법)로 나뉜다.

json-render/ ├── package.json ← 모노레포 루트 (turbo·vitest 스크립트) ├── pnpm-workspace.yaml ← 워크스페이스 범위 + 빌드 정책 ├── turbo.json ← 태스크 그래프·캐싱 │ ├── packages/ ← 30+ 개 배포 패키지 (@json-render/*) │ ├── core/ ★ 두뇌 — 프레임워크 무관 TS + zod │ │ └── src/ │ │ ├── schema.ts (defineCatalog/defineSchema) │ │ ├── prompt.ts (catalog.prompt / buildUserPrompt) │ │ ├── types.ts (Spec·UIElement·DynamicValue) │ │ ├── directives.ts ($format 등 커스텀 디렉티브) │ │ ├── visibility.ts (조건부 표시 평가) │ │ ├── props.ts (동적 props 해석) │ │ ├── state-store.ts (StateStore 추상화) │ │ ├── spec-validator.ts (validateSpec/autoFixSpec) │ │ └── *.test.ts (Vitest 단위 테스트 다수) │ ├── react/ vue/ svelte/ solid/ ← 웹 렌더러 │ ├── react-native/ remotion/ react-pdf/ react-email/ │ ├── ink/ image/ react-three-fiber/ next/ ← 비웹 타깃 │ ├── shadcn/ shadcn-svelte/ ← 36종 사전 제작 컴포넌트 │ ├── redux/ zustand/ jotai/ xstate/ ← 상태 어댑터 │ ├── devtools/ devtools-react/ … ← 인스펙터 │ ├── directives/ codegen/ yaml/ mcp/ ← 부가 기능 │ └── eslint-config/ typescript-config/ ui/ ← 내부 공유 설정 │ ├── apps/web/ ← 문서 사이트 + 플레이그라운드 (Next.js + MDX) │ └── app/(main)/docs/ ← 패키지별 MDX 문서 (api/, specs/, …) │ ├── examples/ ← 23개 데모 │ ├── chat/ ★ AI SDK + pipeJsonRender 챗봇 예제 │ ├── dashboard/ no-ai/ game-engine/ harness-chat/ │ ├── react-native/ remotion/ react-pdf/ react-email/ │ ├── react-three-fiber-gsplat/ (가우시안 스플랫) … │ ├── skills/ ← 패키지별 SKILL.md (AI 에이전트가 읽는 사용법) ├── tests/ ← e2e 테스트 (AI Gateway 연동) └── scripts/ ← 버전 동기화·OG 이미지 생성
처음 본다면 읽을 순서이유
README.md → packages/core/src/schema.ts전체 개념 + 카탈로그/스키마의 핵심
examples/no-aiLLM 없이 spec→렌더만 보는 가장 단순한 예
examples/chat + app/api/generate/route.ts실제 AI 연동(스트리밍) 전체 흐름
packages/react/src/renderer.tsxspec 트리가 컴포넌트로 변환되는 실물 코드
skills/core/SKILL.md제작자가 정리한 "올바른 사용법" 요약

6학습 포인트 (기술별)

이 레포를 뜯어보며 실제로 손에 남기면 좋은 것들.

Zod로 "스키마 = 진실원" 설계하기

core의 카탈로그는 zod 스키마로 컴포넌트 props를 정의하고, 그 스키마에서 ① 타입(개발자용) ② 런타임 검증 ③ LLM 프롬프트(JSON Schema 설명) 세 가지를 동시에 뽑아낸다. "한 번 정의, 세 곳에서 활용"하는 설계는 어떤 데이터 중심 앱에서도 강력한 패턴이다.

// 카탈로그: props 스키마 + 설명이 곧 AI에게 주는 명세
const catalog = defineCatalog(schema, {
  components: {
    Metric: {
      props: z.object({
        label: z.string(),
        value: z.string(),
        format: z.enum(["currency","percent","number"]).nullable(),
      }),
      description: "지표 값 하나를 표시",   // ← LLM이 읽는 힌트
    },
  },
  actions: { refresh_data: { description: "모든 지표 새로고침" } },
});
const systemPrompt = catalog.prompt();   // 프롬프트 자동 생성

스트리밍 파서 — 불완전한 JSON 다루기

LLM이 토큰을 흘리는 중간에는 JSON이 닫히지 않은 "부서진" 상태다. createSpecStreamCompiler는 이런 부분 청크를 받아 지금까지 만들어진 만큼의 spec을 돌려준다. 스트리밍 LLM UI를 만들 때 핵심이 되는 기술 — 직접 구현하면 까다로운 부분을 라이브러리가 해결한 사례를 코드로 배울 수 있다.

const compiler = createSpecStreamCompiler();
for await (const chunk of stream) {
  const { result, newPatches } = compiler.push(chunk);
  setSpec(result);              // 부분 결과로 즉시 화면 갱신
}
const finalSpec = compiler.getResult();

의존성 역전 & 어댑터 패턴

@json-render/core는 React/Vue를 전혀 모른다. 대신 StateStore·렌더러 같은 인터페이스만 정의하고, 구체 구현은 바깥(react·zustand 패키지)에서 주입한다. 라이브러리를 프레임워크에 묶이지 않게 설계하는 정석을 실물로 볼 수 있다.

AI SDK 연동 (실전 코드)

examples/chat의 API 라우트는 Vercel AI SDK의 스트림을 pipeJsonRender로 감싸 클라이언트에 보낸다. AI Gateway에 모델을 문자열 ID("anthropic/claude-haiku-4.5")로 넘기는 최신 패턴도 함께 익힌다.

// app/api/generate/route.ts (요지)
const result = await agent.stream({ messages: modelMessages });
const stream = createUIMessageStream({
  execute: async ({ writer }) => {
    writer.merge(pipeJsonRender(result.toUIMessageStream()));
  },
});
return createUIMessageStreamResponse({ stream });
학습 전략
"렌더러 하나를 끝까지 따라가라"

30개 패키지에 압도되지 말 것. core + react 두 패키지만 깊게 보면 전체 그림이 잡힌다. renderer.tsx에서 spec 트리를 도는 로직과 props.ts의 동적 값 해석만 이해하면, vue/svelte 렌더러는 같은 개념의 번역본임을 알게 된다.

7시스템 요구사항

개발·실행에 필요한 환경.

라이브러리 자체는 가볍지만, 모노레포 전체를 빌드하려면 비교적 최신 툴체인이 필요하다. 루트 package.jsonengines가 이를 강제한다(engineStrict: true).

항목요구/권장비고
Node.js>= 24engines로 강제(엄격 모드)
pnpm>= 11 (11.1.3 고정)packageManager 필드로 고정
패키지 매니저pnpm 워크스페이스npm/yarn으로는 모노레포 빌드 비권장
빌드 도구Turborepo · tsup패키지별 ESM/CJS 번들
portless로컬 dev에 필요*.localhost 서브도메인 라우팅
LLM 키(예제)AI_GATEWAY_API_KEYchat 예제·e2e 테스트용

단지 라이브러리를 쓰기만 할 거라면 요구사항은 훨씬 낮다 — 일반적인 React/Vue 프로젝트에 npm install @json-render/core @json-render/react로 추가하면 끝이다. peerDependency로 zod와 해당 프레임워크가 필요하다.

초보자 함정
Node 24 미만이면 install부터 막힌다

pnpm 설정에 engineStrict: true가 켜져 있어, Node 버전이 낮으면 pnpm install 단계에서 거부된다. nvm 등으로 Node 24+를 먼저 맞추고, corepack enable로 pnpm 11을 활성화한 뒤 진행하라.

8직접 해볼 수 있는 실습 과제

"읽기"에서 "만들기"로 — 난이도별 5단계.

① no-ai 예제로 spec 직접 렌더 난이도 ★☆☆☆☆

examples/no-ai를 실행해 LLM 없이 손으로 쓴 spec JSON이 화면이 되는 걸 본다. root/elements 구조를 바꿔보며 트리가 어떻게 매핑되는지 감을 잡는다.

② 나만의 컴포넌트 카탈로그 만들기 난이도 ★★☆☆☆

defineCatalogCard/Button 외에 새 컴포넌트(예: Rating)를 zod props와 함께 추가하고, defineRegistry로 실제 React 구현을 등록한다. catalog.prompt() 출력이 어떻게 바뀌는지 확인한다.

③ 동적 디렉티브로 상태 UI 만들기 난이도 ★★★☆☆

setState 액션 버튼과 $cond/$state를 써서, JSON spec만으로 탭 전환 또는 다크모드 토글을 구현한다. 코드 없이 데이터로 인터랙션을 표현하는 핵심을 체득한다.

④ AI SDK 챗봇에 연결 난이도 ★★★★☆

examples/chat을 띄우고 카탈로그를 내 것으로 교체해, "OO 대시보드 만들어줘" 프롬프트로 실제 LLM이 내 컴포넌트로 UI를 생성하게 한다. 스트리밍이 점진적으로 렌더되는 걸 관찰한다.

⑤ 같은 spec을 다른 타깃으로 렌더 난이도 ★★★★★

한 spec을 react-pdf(문서)나 image(OG 카드)로도 렌더해 본다. "UI = 데이터"의 위력을 직접 확인하고, 타깃별 카탈로그 차이를 비교한다. 여유가 되면 devtools를 붙여 spec 트리를 인스펙트한다.

9관련 기술 심화 학습 로드맵

json-render를 제대로 활용하기 위한 4주 코스.

주차주제도달 목표
1주차Zod + TypeScript 제네릭스키마로 타입·검증 동시 확보, 카탈로그 구조 이해
2주차json-render core + react카탈로그·레지스트리·렌더러 직접 구성, 동적 디렉티브
3주차Vercel AI SDK + 스트리밍streamText/Object, pipeJsonRender, SpecStream 점진 렌더
4주차상태 어댑터 + 멀티 타깃zustand/jotai 연결, pdf·image 등 다른 렌더러 적용
이후MCP Apps / Next 풀앱Claude·Cursor에 UI 서빙, JSON으로 라우트·SSR까지
조언

이 레포의 진짜 가치는 "AI 기능"보다 "UI를 데이터로 다루는 설계 사고"에 있다. 1~2주차의 스키마 주도 설계 + 의존성 역전은 json-render를 쓰지 않더라도 평생 써먹는 패턴이다. AI 연동(3주차)은 그 위에 얹는 응용일 뿐이니, 기초 설계부터 탄탄히 보는 걸 권한다.

10핵심 키워드 사전

코드를 읽다 막히는 용어 빠른 참조.

Generative UIAI가 자연어 요청에 맞춰 인터랙티브 UI를 생성하는 패러다임. json-render의 정체성.
Catalog(카탈로그)AI가 쓸 수 있는 컴포넌트·액션의 목록과 props 스키마. 가드레일이자 진실원.
Spec(명세)AI가 생성하는 결과물. root + elements 맵으로 된 평면 UI 트리 JSON.
Registry(레지스트리)카탈로그의 각 컴포넌트 타입을 실제 프레임워크 컴포넌트로 매핑한 것.
Renderer(렌더러)spec을 받아 트리를 순회하며 실제 화면(React/Vue/PDF…)으로 그리는 엔진.
defineCatalog스키마 + 컴포넌트/액션 정의로 카탈로그를 만드는 core 함수.
catalog.prompt()카탈로그에서 LLM용 시스템 프롬프트를 자동 생성.
SpecStream스트리밍 LLM의 부분 JSON을 점진적 spec으로 컴파일하는 유틸.
Directive(디렉티브)$state·$cond·$template·$computed 등 JSON 안의 동적 표현식.
StateStore상태 모델 추상 인터페이스. redux/zustand/jotai/xstate로 교체 가능.
setState상태 모델을 직접 갱신하는 내장 액션. visible·동적 props를 재평가시킴.
watch특정 상태가 바뀌면 액션을 트리거하는 element 상의 감시자.
ZodTS용 스키마 선언·런타임 검증 라이브러리. props 정의의 기반.
Turborepo / pnpm모노레포 빌드 캐싱 / 워크스페이스 패키지 매니저.
MCP AppsModel Context Protocol로 Claude·Cursor 등에 UI를 서빙하는 방식.

11참고 링크