Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
vercel-labs avatar

Vue

  • 936 installs
  • 15.8k repo stars
  • Updated July 8, 2026
  • vercel-labs/json-render

vue is the json-render Vue 3 renderer for JSON spec UIs.

About

The vue json-render skill provides a Vue 3 renderer that converts JSON specs into Vue component trees with data binding, visibility rules, and actions via @json-render/vue. Agents define component registries mapping spec types to Vue SFCs or script components then render AI-generated layouts in Vue apps. It supports the json-render pattern of declarative UI from specs shared across React, Vue, and email renderers. The skill triggers when building Vue UIs from JSON or working with @json-render/vue packages. Vue 3 renderer for json-render JSON specs. @json-render/vue component registry and data binding. Visibility rules and actions on spec-driven trees. AI-generated Vue layouts from declarative JSON. Multi-renderer json-render ecosystem for Vue targets. Render Vue 3 UIs from JSON specs with @json-render/vue component registries.

  • Vue 3 renderer for json-render JSON specs.
  • @json-render/vue component registry and data binding.
  • Visibility rules and actions on spec-driven trees.
  • AI-generated Vue layouts from declarative JSON.
  • Multi-renderer json-render ecosystem for Vue targets.

Vue by the numbers

  • 936 all-time installs (skills.sh)
  • +23 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #391 of 2,277 Frontend Development skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
From the docs

What vue says it does

Vue 3 renderer for json-render. Use when building Vue UIs from JSON specs
SKILL.md
npx skills add https://github.com/vercel-labs/json-render --skill vue

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs936
repo stars15.8k
Security audit3 / 3 scanners passed
Last updatedJuly 8, 2026
Repositoryvercel-labs/json-render

How do I render this JSON spec as Vue components?

Render Vue 3 UIs from JSON specs with @json-render/vue component registries.

Who is it for?

Vue 3 developers using json-render for spec-driven or AI-generated UI.

Skip if: Skip for hand-written Vue templates without JSON spec pipelines.

When should I use this skill?

User works with @json-render/vue, JSON specs in Vue, or spec-driven UI.

What you get

Vue component tree from @json-render/vue with registry and data binding.

  • Vue component catalog
  • Rendered JSON-driven UI
  • Zod-validated spec schema

By the numbers

  • Peer dependency Vue ^3.5.0
  • Peer dependency zod ^4.0.0
  • Installs 3 npm packages: @json-render/vue, @json-render/core, zod

Files

SKILL.mdMarkdownGitHub ↗

@json-render/vue

Vue 3 renderer that converts JSON specs into Vue component trees with data binding, visibility, and actions.

Installation

npm install @json-render/vue @json-render/core zod

Peer dependencies: vue ^3.5.0 and zod ^4.0.0.

Quick Start

Create a Catalog

import { defineCatalog } from "@json-render/core";
import { schema } from "@json-render/vue/schema";
import { z } from "zod";

export const catalog = defineCatalog(schema, {
  components: {
    Card: {
      props: z.object({ title: z.string(), description: z.string().nullable() }),
      description: "A card container",
    },
    Button: {
      props: z.object({ label: z.string(), action: z.string() }),
      description: "A clickable button",
    },
  },
  actions: {},
});

Define Registry with h() Render Functions

import { h } from "vue";
import { defineRegistry } from "@json-render/vue";
import { catalog } from "./catalog";

export const { registry } = defineRegistry(catalog, {
  components: {
    Card: ({ props, children }) =>
      h("div", { class: "card" }, [
        h("h3", null, props.title),
        props.description ? h("p", null, props.description) : null,
        children,
      ]),
    Button: ({ props, emit }) =>
      h("button", { onClick: () => emit("press") }, props.label),
  },
});

Render Specs

<script setup lang="ts">
import { StateProvider, ActionProvider, Renderer } from "@json-render/vue";
import { registry } from "./registry";

const spec = { root: "card-1", elements: { /* ... */ } };
</script>

<template>
  <StateProvider :initial-state="{ form: { name: '' } }">
    <ActionProvider :handlers="{ submit: handleSubmit }">
      <Renderer :spec="spec" :registry="registry" />
    </ActionProvider>
  </StateProvider>
</template>

Providers

ProviderPurpose
StateProviderShare state across components (JSON Pointer paths). Accepts initialState or store for controlled mode.
ActionProviderHandle actions dispatched via the event system
VisibilityProviderEnable conditional rendering based on state
ValidationProviderForm field validation

Composables

ComposablePurpose
useStateStore()Access state context (state as ShallowRef, get, set, update)
useStateValue(path)Get single value from state
useIsVisible(condition)Check if a visibility condition is met
useActions()Access action context
useAction(binding)Get a single action dispatch function
useFieldValidation(path, config)Field validation state
useBoundProp(propValue, bindingPath)Two-way binding for $bindState/$bindItem

Note: useStateStore().state returns a ShallowRef<StateModel> — use state.value to access.

External Store (StateStore)

Pass a StateStore to StateProvider to wire json-render to Pinia, VueUse, or any state management:

import { createStateStore, type StateStore } from "@json-render/vue";

const store = createStateStore({ count: 0 });
<StateProvider :store="store">
  <Renderer :spec="spec" :registry="registry" />
</StateProvider>

Dynamic Prop Expressions

Props support $state, $bindState, $cond, $template, $computed. Use { "$bindState": "/path" } on the natural value prop for two-way binding.

Visibility Conditions

{ "$state": "/user/isAdmin" }
{ "$state": "/status", "eq": "active" }
{ "$state": "/maintenance", "not": true }
[ cond1, cond2 ]  // implicit AND

Built-in Actions

setState, pushState, removeState, and validateForm are built into the Vue schema and handled by ActionProvider:

{
  "action": "setState",
  "params": { "statePath": "/activeTab", "value": "settings" }
}

Event System

Components use emit(event) to fire events, or on(event) for metadata (shouldPreventDefault, bound).

Streaming

useUIStream and useChatUI return Vue Refs for streaming specs from an API.

BaseComponentProps

For catalog-agnostic reusable components:

import type { BaseComponentProps } from "@json-render/vue";

const Card = ({ props, children }: BaseComponentProps<{ title?: string }>) =>
  h("div", null, [props.title, children]);

Key Exports

ExportPurpose
defineRegistryCreate a type-safe component registry from a catalog
RendererRender a spec using a registry
schemaElement tree schema (from @json-render/vue/schema)
StateProvider, ActionProvider, VisibilityProvider, ValidationProviderContext providers
useStateStore, useStateValue, useBoundPropState composables
useActions, useActionAction composables
useFieldValidation, useIsVisibleValidation and visibility
useUIStream, useChatUIStreaming composables
createStateStoreCreate in-memory StateStore
BaseComponentPropsCatalog-agnostic component props type

Related skills

How it compares

Use vue for Vue 3 json-render pipelines; pick framework-native templates when JSON-driven rendering is not required.

FAQ

Which Vue version?

Vue 3 with @json-render/vue renderer package.

What do registries map?

JSON spec component types to Vue components with bindings.

What spec features?

Data binding, visibility conditions, and actions on component trees.

Is Vue safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.