npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

json-to-spec

v24.1.1

Published

Pure JSON Specification Compiler with jsonToSpec namespace: (structure, data) -> Spec JSON

Readme

json-to-spec

A story about taking two JSON inputs and turning them into a final, concrete UI spec.

At the center of this project is a simple idea:

  • structure is the blueprint: the shape, layout, rules, and instructions
  • data is the truth: fields, rows, values, arrays, and metadata
  • compile is the story engine: it resolves the values, replaces placeholders, and expands iterations

The final output is a clean, serializable JSON spec, ready for rendering by json-to-dom or any similar consumer.


The story in one line

json-to-spec is a compiler for declarative UI: it reads a blueprint and a data payload, resolves what belongs where, injects values, expands loops, and emits a final specification tree.


The three core operations

This repo is best understood as a pipeline with three essential stages:

  1. resolve — find the value from the active context or root data
  2. replace — replace ${...} tokens inside strings, attributes, and text content
  3. iterate — expand collection-driven operations into concrete child nodes

That is the heart of the architecture. Everything else is supporting structure around this idea.


Why this design matters

Most UI systems treat layout and data as separate problems, but they still get tangled in components, templates, and imperative logic.

json-to-spec keeps them decoupled:

  • the structure describes how a screen should look
  • the data tells what should appear
  • the compiler merges them deterministically

This makes the flow predictable, testable, and easy to reason about.


📖 Start Here


⚡ Quick Start

npm install
npm run dev

💻 Minimal Example

import { compile } from "json-to-spec";

const structure = {
  tagName: "div",
  attributes: { class: "card" },
  children: [
    { tagName: "h3", textContent: "${title}" },
    {
      operation: "iterate",
      source: "users",
      template: {
        tagName: "div",
        textContent: "${$number}. ${name} (${role})"
      }
    }
  ]
};

const data = {
  title: "Engineering Team",
  users: [
    { name: "Karthik", role: "Architect" },
    { name: "Praveen", role: "Engineer" }
  ]
};

const spec = compile({ inStructure: structure, inData: data });
console.log(spec);

The compile flow is:

  • resolve the values inside ${...}
  • replace tokens in the structure
  • iterate over users and expand the template
  • return the final spec JSON

🎯 Scope

This project is intentionally focused. It is a compiler, not a renderer, framework, or business-logic engine.

It does one job well: it translates declarative structure + data into a final spec tree.


📄 License

MIT © KeshavSoft