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

typebars

v1.1.3

Published

Typebars is a type-safe handlebars based template engine for generating object or content with static type checking

Readme

Typebars

Type-safe Handlebars template engine with static analysis powered by JSON Schema.

Typebars wraps Handlebars with a static analysis layer that validates your templates against a JSON Schema before execution. Given an input schema describing your data, Typebars detects unknown properties, type mismatches, and missing arguments at analysis time — and infers the exact JSON Schema of the template's output.

import { Typebars } from "typebars";

const engine = new Typebars();

const inputSchema = {
  type: "object",
  properties: {
    name: { type: "string" },
    age:  { type: "number" },
  },
  required: ["name", "age"],
};

// Static analysis — no data needed
const { valid, diagnostics, outputSchema } = engine.analyze(
  "Hello {{name}}, you are {{age}}!",
  inputSchema,
);

valid;        // true — every referenced variable exists
outputSchema; // { type: "string" } — mixed template always produces a string

// Execution — types are preserved
engine.execute("{{age}}", { name: "Alice", age: 30 }); // → 30 (number, not string)

Installation

npm install typebars
# or
yarn add typebars
# or
pnpm add typebars
# or
bun add typebars

Peer dependency: TypeScript ≥ 5


Documentation

| Document | Description | |----------|-------------| | Getting Started | Installation, quick start, and how the engine works | | Static Analysis | Input validation, output schema inference, and diagnostics | | Schema Features | $ref resolution, combinators, additionalProperties, array .length | | Execution & Compiled Templates | Type preservation, execution modes, and compile-once / execute-many | | Templates | Object templates, array templates, and block helpers (#if, #each, #with) | | Built-in & Custom Helpers | Math, logical, comparison, map, default helpers, and custom helper registration | | Template Identifiers | The {{key:N}} syntax for multi-source data pipelines | | Advanced Features | coerceSchema, excludeTemplateExpression, and the $root token | | Error Handling | Error hierarchy, diagnostics structure, and syntax validation | | API Reference | Full API: constructor, methods, types, and options |


Key Features

  • Static analysis — validate templates against JSON Schema before execution (docs)
  • Output schema inference — know the exact type of the result without running anything (docs)
  • Type preservation{{age}} returns 30 (number), not "30" (docs)
  • Object & array templates — pass structured inputs, get structured outputs (docs)
  • Block helpers#if, #unless, #each, #with with full static analysis (docs)
  • Built-in helpers — math, logical, comparison, map, and default — all statically analyzed (docs)
  • Custom helpers — register your own with type metadata for full analysis integration (docs)
  • Template identifiers{{key:N}} syntax for multi-source workflows (docs)
  • Output type coercion — control how static literals are typed with coerceSchema (docs)
  • Expression filtering — exclude dynamic expressions from output with excludeTemplateExpression (docs)
  • $root token — reference the entire root context for primitive schemas (docs)
  • Compiled templates — parse once, execute many times (docs)
  • JSON Schema v7$ref, allOf/anyOf/oneOf, additionalProperties (docs)

License

MIT