命令列工具
vercel-labs/json-render avatar
vercel-labs/json-render

json-render:以元件目錄為柵欄的生成式 UI 框架

生成式 UI 框架。 json-render 生成式 UI 框架。 ** 根據提示產生動態、個人化的 UI,而不犧牲可靠性。

16,157 個 Star874 個 ForkTypeScriptApache-2.0

秒懂

它是什麼?
json-render 讓 AI 從自然語言提示產生 UI,但輸出被限制在開發者定義的元件目錄內。本文拆解它的運作機制、跨平台套件布局,以及採用前該確認的幾個關鍵問題。
適合誰用?
json-render 適合那些已經有明確 UI 元件庫,且願意花時間把每個元件的 props 用 Zod schema 描述清楚的團隊。它不適合想讓 AI 自由發揮、產生全新版面的專案,因為目錄之外的設計一概無法輸出。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 2 天前。
用什麼語言寫的?
主要是 TypeScript(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

它解決的不是「讓 AI 畫畫面」

json-render 的定位不是畫布工具,而是受控的 UI 生成管線。它把「AI 產生什麼」從開放式問題變成封閉式選擇題。開發者定義目錄,AI 在目錄內組合。這個交換很實際:你放棄了模型產生全新元件的能力,換來每次輸出都可驗證、可預測的結果。對需要把 AI 輸出接進正式產品的人來說,這個取捨通常是值得的。

目錄、schema、registry:三層約束的運作方式

這個設計有個直接的好處:spec 是純資料,可以串流、可以快取、可以離線渲染。README 提到「Stream and render progressively as the model responds」,意思是模型還在產生 JSON 時,前端就能先畫出已經完成的部分。這對長回應特別重要,使用者不用等整個規格產生完才看到畫面。但代價是,元件之間的關係只能透過 children 表達,沒有 slot 或 fragment 這類更細緻的組合方式。複雜的版面,例如側邊欄加主內容區的雙欄結構,就必須自己設計一個 Layout 元件來包住其他東西。

安裝與第一個 spec:從 npm 到畫面的實際路徑

安裝本身沒有陷阱,但要注意 @json-render/core 是所有平台的共同依賴,而各平台套件只負責渲染層。如果你同時要出網頁和 PDF,就必須裝兩套 renderer,並且確保兩邊的 registry 定義一致。README 沒提到是否有工具自動同步多個 registry,這點在實際專案裡會變成維護負擔。另外,shadcn 套件依賴 Tailwind CSS 和 Radix UI,如果你沒有用這兩個,預建元件等於不能用,得自己寫。

串流、事件與狀態:互動不是事後補丁

這個設計把 UI 的資料流切成兩層:AI 產生的是結構與 props,事件與狀態變化則由開發者掌控。換句話說,AI 可以決定畫面上有什麼,但按下按鈕之後發生什麼事,完全由你的程式碼決定。這是個合理的分工,但也意味著你必須為每個可互動元件都寫好 emit 的處理邏輯。如果元件目錄很大,這會是不少工作量。README 沒有提供事件處理的完整範例,實際整合時需要參考各框架的 hooks 或 composables 文件。

跨平台與特殊輸出:同一個目錄,多種媒介

但廣度帶來一個問題:同一個目錄在不同平台的渲染結果不會完全一致。React Native 的 Button 和網頁的 Button 行為不同,PDF 裡沒有互動事件,Email 的 CSS 支援又有限。README 說「from the same catalog」,但實際上每個平台都需要各自的 registry 實作。如果你只做單一平台,這不是問題。如果你要同時維護網頁和行動版,就得接受兩份 registry 可能逐步偏離的事實。另外,影片和 PDF 的 spec 格式可能與 UI 不同,Remotion 有自己的時間軸 schema,這點在 README 的表格裡有暗示,但沒有細節。

在採用之前:那些 README 沒講清楚的限制

另一個沒有明說的是模型相容性。json-render 依賴 AI 產生符合 schema 的 JSON,但不同模型對 schema 的理解能力差異很大。README 提到 @json-render/mcp 可以整合 Claude、ChatGPT、Cursor,但沒有保證每個模型都能穩定輸出合法 spec。如果你的模型常常產生無效 JSON,串流渲染的好處就大打折扣。最後,專案名稱掛著 Vercel 實驗室,但 license 是 Apache-2.0,這代表你可以自由使用,但沒有商業支援。版本停在 v0.20.0,語意化版本還沒到 1.0,API 隨時可能變動。

替代方案:直接生成 JSX 與受限生成的取捨

如果你的團隊已經有成熟的元件庫,而且你信任 AI 能寫出正確的 JSX,那麼直接生成程式碼可能更省事。但如果你需要的是可驗證、可串流的輸出,JSON 格式的優勢很明顯。json-render 的取捨是:用表達能力換取可靠性。對生產環境來說,這個交換常常是值得的,但前提是你願意投入時間把目錄設計好。

維護成本與授權:版本 0.x 的現實

json-render 目前是 v0.20.0,最後一次發布在 2026 年 8 月,更新頻率看起來穩定,但 0.x 版本意味著 API 可能不保證向後相容。升級套件時,你的 catalog 定義和 registry 可能都需要調整。套件數量很多,光是官方就超過 20 個,每個平台的 renderer 獨立發布,版本號是否同步,README 沒有說明。如果你同時用多個平台,升級時要分別處理。授權是 Apache-2.0,允許商業使用、修改、再發布,但要保留著作權聲明。這比很多開源專案的 MIT 授權多了一些義務,但不算負擔。整體來說,維護成本取決於你用了多少套件。只用在 React 網頁,成本相對低。跨越多個平台,就要追蹤多個套件的更新,這在 1.0 之前會是持續的雜務。

編輯結論

json-render 適合那些已經有明確 UI 元件庫,且願意花時間把每個元件的 props 用 Zod schema 描述清楚的團隊。它不適合想讓 AI 自由發揮、產生全新版面的專案,因為目錄之外的設計一概無法輸出。採用前請先確認三件事:你的元件是否能被有限的 props 與 children 結構完整表達,團隊能否維護多個框架的 registry 同步,以及你接受的延遲是否允許逐步串流渲染。若你的主力是 React 且元件庫接近 shadcn/ui,json-render 的 36 個預建元件能省下大量初始工作。但若你依賴複雜的版面系統或需要 AI 動態產生新樣式,這個框架的柵欄會變成天花板。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記