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

@variantlab/cli

v0.1.10

Published

Command-line tool for variantlab: init, generate, validate, eval.

Readme

@variantlab/cli

Command-line tool for variantlab — scaffold, generate types, validate configs, and evaluate experiments.

npm version

Install

# Use via npx (no install needed)
npx @variantlab/cli init

# Or install globally
npm install -g @variantlab/cli

Commands

variantlab init

Scaffold an experiments.json file with starter experiments.

variantlab init           # Creates experiments.json
variantlab init --force   # Overwrite existing file

variantlab generate

Generate TypeScript types from your experiments.json. Experiment IDs and variant IDs become literal types — typos become compile errors.

variantlab generate                          # Default: reads experiments.json, writes variantlab.d.ts
variantlab generate --config ./config.json   # Custom config path
variantlab generate --out ./types/vl.d.ts    # Custom output path
variantlab generate --watch                  # Regenerate on file changes

The generated .d.ts file provides:

  • VariantLabExperiments interface with all experiment IDs
  • ExperimentId union type
  • VariantId<E> mapped type per experiment
  • VariantValueType<E> for value experiments
  • Module augmentation for type-safe hooks

variantlab validate

Validate an experiments config file against the schema.

variantlab validate                    # Validates ./experiments.json
variantlab validate ./custom-path.json # Validate a specific file

Reports:

  • JSON parse errors
  • Schema violations (missing fields, wrong types)
  • Duplicate experiment IDs
  • Invalid default variant references
  • Invalid targeting predicates

variantlab eval

Evaluate an experiment against a targeting context — useful for debugging why a user gets a specific variant.

# Inline context
variantlab eval --experiment hero-layout --context '{"platform":"ios","screenSize":"small"}'

# Context from file
variantlab eval --experiment hero-layout --context-file ./test-context.json

# Custom config path
variantlab eval ./config.json --experiment hero-layout --context '{"userId":"user-123"}'

Shows:

  • Step-by-step targeting trace (pass/fail per field)
  • Final resolved variant
  • Assignment strategy used

Exit codes

| Code | Meaning | |------|---------| | 0 | Success | | 1 | File not found | | 2 | Validation error / invalid config | | 3 | I/O error | | 4 | Invalid arguments |

Visual debugging

The CLI's eval command is the terminal equivalent of the debug overlay available in the UI packages. For a visual, interactive debug experience, see:

  • React: import { VariantDebugOverlay } from "@variantlab/react/debug"
  • Next.js: import { VariantDebugOverlay } from "@variantlab/next/debug"
  • React Native: import { VariantDebugOverlay } from "@variantlab/react-native/debug"

Global options

--help      Show help for any command
--version   Show version
--verbose   Enable verbose output

Programmatic API

All commands are also available as functions:

import { init, generate, validate, evalCommand } from "@variantlab/cli";

await init({ force: true });
await generate({ config: "./experiments.json", out: "./variantlab.d.ts" });
await validate("./experiments.json");
await evalCommand("./experiments.json", {
  experiment: "hero-layout",
  context: '{"platform":"ios"}',
});

License

MIT