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

Directives

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

directives provides documented workflows for Pre-built custom directives for json-render - formatting, math, string manipulation, and i18n. Use when working with @json-render/directives, defining custom di

About

The directives skill pre-built custom directives for json-render formatting math string manipulation and i18n Use when working with json-render directives defining custom directives with defineDirective or adding format math concat count truncate pluralize join or t to specs json-render directives Pre-built custom directives for json-render core Drop them into your catalog and renderer to add formatting math string manipulation and i18n Quick Start typescript import standardDirectives from json-render directives Wire into prompt generation const prompt catalog prompt directives standardDirectives Wire into the renderer React example import JSONUIProvider Renderer from json-render react JSONUIProvider registry registry directives standardDirectives Renderer spec spec registry registry JSONUIProvider To add factory directives like createI18nDirective spread the array typescript import standardDirectives createI18nDirective from json-render directives const directives standardDirectives createI18nDirective config Defining Custom Directives Use defineDirective from json-render core typescript import defineDirective resolvePropValue from json-render core import z from zod const doubleD.

  • Name must start with `$`
  • Name must not conflict with built-in keys (`$state`, `$cond`, `$computed`, `$template`, `$item`, `$index`, `$bindState`,
  • Resolvers should call `resolvePropValue` on sub-values to support composition
  • # @json-render/directives Pre-built custom directives for `@json-render/core`.
  • Drop them into your catalog and renderer to add formatting, math, string manipulation, and i18n.

Directives by the numbers

  • 2,433 all-time installs (skills.sh)
  • +307 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #90 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

directives capabilities & compatibility

Capabilities
name must start with `$` · name must not conflict with built in keys (`$sta · resolvers should call `resolvepropvalue` on sub · # @json render/directives pre built custom direc · drop them into your catalog and renderer to add
Use cases
documentation
From the docs

What directives says it does

# @json-render/directives Pre-built custom directives for `@json-render/core`.
SKILL.md
Drop them into your catalog and renderer to add formatting, math, string manipulation, and i18n.
SKILL.md
npx skills add https://github.com/vercel-labs/json-render --skill directives

Add your badge

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

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

How do I use directives for the task described in its SKILL.md triggers?

Pre-built custom directives for json-render - formatting, math, string manipulation, and i18n. Use when working with @json-render/directives, defining custom directives with defineDirective, or add.

Who is it for?

Teams invoking directives when the user request matches documented triggers and prerequisites.

Skip if: Skip when cached docs are missing, the request is a negative trigger, or another sibling skill owns the workflow.

When should I use this skill?

Pre-built custom directives for json-render - formatting, math, string manipulation, and i18n. Use when working with @json-render/directives, defining custom directives with defineDirective, or adding $format, $math, $

What you get

Step-by-step guidance grounded in directives documentation and reference files.

Files

SKILL.mdMarkdownGitHub ↗

@json-render/directives

Pre-built custom directives for @json-render/core. Drop them into your catalog and renderer to add formatting, math, string manipulation, and i18n.

Quick Start

import { standardDirectives } from '@json-render/directives';

// Wire into prompt generation
const prompt = catalog.prompt({ directives: standardDirectives });

// Wire into the renderer (React example)
import { JSONUIProvider, Renderer } from '@json-render/react';

<JSONUIProvider registry={registry} directives={standardDirectives}>
  <Renderer spec={spec} registry={registry} />
</JSONUIProvider>

To add factory directives like createI18nDirective, spread the array:

import { standardDirectives, createI18nDirective } from '@json-render/directives';

const directives = [...standardDirectives, createI18nDirective(config)];

Defining Custom Directives

Use defineDirective from @json-render/core:

import { defineDirective, resolvePropValue } from '@json-render/core';
import { z } from 'zod';

const doubleDirective = defineDirective({
  name: '$double',
  description: 'Double a numeric value.',
  schema: z.object({
    $double: z.unknown(),
  }),
  resolve(value, ctx) {
    const resolved = resolvePropValue(value.$double, ctx);
    return (resolved as number) * 2;
  },
});

Rules:

  • Name must start with $
  • Name must not conflict with built-in keys ($state, $cond, $computed, $template, $item, $index, $bindState, $bindItem)
  • Resolvers should call resolvePropValue on sub-values to support composition

Built-in Directives

$format — Locale-aware value formatting

Formats values using Intl formatters. Supports date, currency, number, and percent.

{ "$format": "currency", "value": { "$state": "/cart/total" }, "currency": "USD" }
{ "$format": "date", "value": { "$state": "/user/createdAt" } }
{ "$format": "number", "value": 1234567, "notation": "compact" }
{ "$format": "percent", "value": 0.75 }
{ "$format": "date", "value": { "$state": "/post/createdAt" }, "style": "relative" }

Fields: $format (date | currency | number | percent), value (any expression), locale? (string), currency? (string, default "USD"), notation? (string), style? ("relative" for relative dates), options? (extra Intl options).

$math — Arithmetic operations

{ "$math": "add", "a": { "$state": "/subtotal" }, "b": { "$state": "/tax" } }
{ "$math": "round", "a": 3.7 }

Operations: add, subtract, multiply, divide, mod, min, max, round, floor, ceil, abs. Unary ops (round, floor, ceil, abs) only use a. Division by zero returns 0.

Fields: $math (operation enum), a? (first operand, default 0), b? (second operand, default 0).

$concat — String concatenation

{ "$concat": [{ "$state": "/user/firstName" }, " ", { "$state": "/user/lastName" }] }

Fields: $concat (array of values to resolve and join into a string).

$count — Array/string length

{ "$count": { "$state": "/cart/items" } }

Returns .length of arrays or strings, 0 for other types.

Fields: $count (value to count).

$truncate — Text truncation

{ "$truncate": { "$state": "/post/body" }, "length": 140, "suffix": "..." }

Fields: $truncate (value to truncate), length? (max chars, default 100), suffix? (string, default "...").

$pluralize — Singular/plural forms

{ "$pluralize": { "$state": "/cart/itemCount" }, "one": "item", "other": "items", "zero": "no items" }

Output: "3 items", "1 item", or "no items".

Fields: $pluralize (count value), one (singular label), other (plural label), zero? (zero label).

$join — Join array elements

{ "$join": { "$state": "/tags" }, "separator": ", " }

Fields: $join (array to join), separator? (string, default ", ").

createI18nDirective — Internationalization factory

import { createI18nDirective } from '@json-render/directives';

const tDirective = createI18nDirective({
  locale: 'en',
  messages: {
    en: { "greeting": "Hello, {{name}}!", "checkout.submit": "Place Order" },
    es: { "greeting": "Hola, {{name}}!", "checkout.submit": "Realizar Pedido" },
  },
  fallbackLocale: 'en',
});

Usage in specs:

{ "$t": "checkout.submit" }
{ "$t": "greeting", "params": { "name": { "$state": "/user/name" } } }

Fields: $t (translation key), params? (interpolation parameters, values accept expressions).

Config: locale (current locale), messages (Record<locale, Record<key, string>>), fallbackLocale? (fallback when key missing).

Composition

Directives compose naturally — each resolver calls resolvePropValue on its inputs, so directives can wrap other directives or built-in expressions:

{
  "$format": "currency",
  "value": { "$math": "multiply", "a": { "$state": "/price" }, "b": { "$state": "/qty" } },
  "currency": "USD"
}

Resolves inside-out: $state reads from state, $math multiplies, $format formats as currency.

Wiring into Renderers

All four renderers (React, Vue, Svelte, Solid) accept directives on their provider and createRenderer output:

// Provider pattern
<JSONUIProvider registry={registry} directives={directives}>
  <Renderer spec={spec} registry={registry} />
</JSONUIProvider>

// createRenderer pattern
const MyRenderer = createRenderer(catalog, components);
<MyRenderer spec={spec} directives={directives} />

For prompt generation, pass the same array:

const prompt = catalog.prompt({ directives });

Key Exports

ExportPurpose
formatDirective$format directive definition
mathDirective$math directive definition
concatDirective$concat directive definition
countDirective$count directive definition
truncateDirective$truncate directive definition
pluralizeDirective$pluralize directive definition
joinDirective$join directive definition
createI18nDirectiveFactory for $t i18n directive
standardDirectivesArray of all 7 non-factory directives
I18nConfigType for i18n configuration

Related skills

FAQ

What does directives do?

Pre-built custom directives for json-render - formatting, math, string manipulation, and i18n. Use when working with @json-render/directives, defining custom directives with defineDirective, or adding $format, $math, $co

When should I use directives?

Pre-built custom directives for json-render - formatting, math, string manipulation, and i18n. Use when working with @json-render/directives, defining custom directives with defineDirective, or adding $format, $math, $co

What are common prerequisites?

--- name: directives description: Pre-built custom directives for json-render - formatting, math, string manipulation, and i18n.

Is Directives 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.