The catalog limits what an AI model can put on screen
A json-render catalog names the components an AI model may use, describes their properties with schemas, and lists the actions it may request. Your registry maps those names to real components. The model returns a JSON tree instead of source code, and the renderer turns that tree into the interface. This is the project's most useful decision because generated output stays inside a vocabulary the application owns.
The boundary is concrete, though it is not automatic application security. A catalog that exposes export_report or refresh_data still needs properly authorized handlers. Component implementations remain your code, and data access remains your responsibility. json-render controls the shape of the model's request; it cannot decide whether a signed-in user should be allowed to perform the requested action.
Version 0.21.0 sends one spec to many renderers
The package list reaches well past React. There are renderers for Vue 3, Svelte 5, Solid, React Native, Remotion video, PDF, email, images, terminal interfaces, and React Three Fiber scenes. Next.js and TanStack Start packages can describe routes, layouts, server-rendered data, and metadata. A shadcn catalog supplies 36 components for teams that do not want to define every card and button first.
That breadth is useful when several surfaces share one component vocabulary. It also explains why the repository behaves like a platform rather than a small library. The pnpm workspace includes apps, packages, examples, Stripe demos, and end-to-end tests. Most adopters should install @json-render/core plus one renderer and keep the rest outside their application dependency graph.
What happened when we ran it
Our sandbox installed 2,502 packages in 112 seconds and consumed 2,986 MB on disk. The clean checkout at commit 3ad3818 was only 9.2 MB before installation, so dependency storage is the first practical cost. This was a fresh unprivileged Node 22 container with 3 CPUs, 8 GB of RAM, and no secrets.
The full monorepo build failed after 284 seconds with exit code 137. Turbo reported 42 successful tasks out of 53, then identified svelte-chat#build as the failed task. The last log lines say svelte-chat:build: Killed; they do not say what killed it. We therefore cannot claim a proven out-of-memory failure, even though the process ended with a kill-style code.
Tests gave a much cleaner result. Vitest finished in 67 seconds with 1,212 passed and 0 failed out of 1,212. The repository scan found 1,653 files, about 163,176 source lines, 2 CI workflow files, a tests directory, monorepo workspaces, and no Dockerfile. A passing unit suite and a failed aggregate build can both be true: they answer different release questions.
Node 24 and Portless are part of local development
The root package requires Node 24 or newer, pnpm 11 or newer, and a global Portless installation before pnpm dev will start the examples. The README's short demo omits that last command, but the predevelopment script checks for it and exits with installation instructions. The local hostnames use Portless on port 1355 instead of asking each example to hold a separate remembered port.
Rendering a supplied JSON spec does not require an AI account. The repository even includes a no-AI example with hand-written specs and no environment variables. Prompt-driven chat and playground examples are different: local use needs AI_GATEWAY_API_KEY, while the example model can be changed through AI_GATEWAY_MODEL. Vercel KV or Upstash credentials are optional and enable rate limiting.
September releases show speed, with 62 open issues
Version 0.21.0 shipped on September 18, 2026, the same day as the last recorded push. It added a TanStack Start renderer, experimental Jev composition APIs, named Vue slots, and fixes for streamed React rendering. GitHub showed 16,747 stars and 102 combined open issues and pull requests; an issue-only search returned 62 open issues. The project is active, and its 0.x version still matters when planning upgrades.
Several open items affect adoption choices directly. Issue 329 asks to widen the React peer range from 19.2.3 to include React 18. Issue 332 asks whether a first-party Angular renderer would be accepted after earlier proposals stalled. Issue 9 asks how json-render relates to the A2UI protocol and whether an adapter is intended. None of those requests proves the current package is broken, but each names a boundary a buyer can check before a proof of concept.
Path handling deserves its own regression test if specs can come from untrusted sources. Issue 326 shows array helpers accepting strings such as 1foo, 01, and 1.5 as indexes, contrary to the reporter's reading of RFC 6902. A proposed fix is under review. Keep schema validation, action authorization, and hostile-spec tests in the application even when the model output comes from a catalog prompt.
json-render is worth trying when generated UI means arranging approved components rather than inventing frontend code. The 1,212 passing tests support that trial, while the 2,986 MB install and killed aggregate build argue for adopting only the packages you need. Start with one catalog, one renderer, and one real action whose permissions you can verify.

