Skip to content

Schema for configurations and feature flags.

A portable YAML/JSON format, an evaluation engine, and a visual configurator. No platform required.

npm install showwhat
showwhat.yeojz.dev/configurator
Definitions
checkout_v2
maintenance_mode
dark_mode
checkout_v2boolean
trueenv = prod
falsedefault
Preview
env: "prod"true
env: "staging"false
MIT Licensed
Minimal Dependencies
Multi-Runtime
TypeScript First

1 library, 1 file, 0 platform to operate.

Like OpenAPI and Swagger, but for feature flags.
A specification-first approach where the definition file is the source of truth, not a vendor database.

Portable format

Definitions are plain YAML or JSON. Store them in Git, serve from an API, or embed inline. The format stays the same everywhere.

Extensible conditions

Built-in primitives for strings, numbers, datetimes, and booleans.
Shorthand types for environments and time windows. Add your own with registerEvaluators().

Git-native workflow

PR reviews are your approval process. Commit history is your audit log. Branch protection is your RBAC. No separate dashboard to operate.

Define once, evaluate anywhere.

The definition format is the contract between your config authors and your runtime. Write it in YAML or JSON, evaluate it with one function call.

flags.yaml
definitions:
  checkout_v2:
    variations:
      - value: true
        conditions:
          - type: env
            value: prod
      - value: false
app.ts
import { showwhat, MemoryData } from "showwhat";

const data = await MemoryData.fromYaml(yaml);
const result = await showwhat({
  key: "checkout_v2",
  context: { env: "prod" },
  options: { data },
});

result.value; // true

Load definitions from memory, files, or your own API. The DefinitionReader interface stays the same.

Time windows are config, not cron jobs.

Rules resolve top-to-bottom. Time windows, environment matching, and catch-all defaults compose in the same definition. No special syntax. No separate scheduling interface.

01:00 UTCnull
02:00 UTC"Deployment in progress"
04:30 UTC"Deployment in progress"
07:00 UTCnull
12:00 UTCnull
flags.yaml
definitions:
  maintenance_mode:
    variations:
      - value: "Deployment in progress"
        conditions:
          - type: env
            value: prod
          - type: startAt
            value: "2026-03-03T02:00Z"
          - type: endAt
            value: "2026-03-03T07:00Z"
      - value: null

Works everywhere JavaScript runs.

The core uses Web Standard APIs only. Zero Node.js-specific dependencies. Pick your runtime, import, and go.

import { showwhat, MemoryData } from "showwhat";
import { readFile } from "node:fs/promises";

const yaml = await readFile("./flags.yaml", "utf-8");
const data = await MemoryData.fromYaml(yaml);
const result = await showwhat({
  key: "checkout_v2",
  context: { env: "prod" },
  options: { data },
});

Write your first definition now.

npm install showwhat

© 2026 Gerald Yeo. MIT Licensed.