Skip to content

Feature flags and config you own. Platform-agnostic.

Define rules in YAML or JSON. Evaluate them in your app. Store them wherever you want.

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

One definition file. Zero infrastructure. Full control.

Like OpenAPI for APIs, showwhat gives you a spec-first workflow for feature flags and config.
The definition file is the source of truth. No vendors required.

Portable format

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

Extensible rule engine

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

Git-native workflow

PRs are your approval process. Commit history is your audit log. Definitions fit naturally into code review and CI. Scale up to a database when you need.

Define once, evaluate anywhere.

The definition is the contract between authors and runtime. Write it in YAML or JSON, then resolve 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 rules, 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. Use showwhat directly or through OpenFeature. Same definitions, any runtime.

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 },
});

Start in five minutes.

npm install showwhat

© 2026 Gerald Yeo. MIT Licensed.