Overview
What Flag Marshal detects, what it never guesses, and how to run it.
Documentation pages
Flag Marshal inventories the feature flags in a local repository and reports the ones that are stale, missing from code or configuration, or referenced through keys it cannot safely resolve. Every finding carries its evidence and a confidence level.
The final release, 0.2.0, requires Node.js 20 or newer. Its historical invocation is:
npx @stackblender/flag-marshal@0.2.0 scan .
scan always exits with code 0, so trying it in CI cannot break a build.
In a pull request, check --changed-since=auto fails only on flag debt the change
adds, and --format=github or --format=codequality puts each finding on the pull
or merge request. preview shows the diff that turns one flag permanently on or off
in TypeScript and JavaScript, and writes nothing.
What it reads
| Surface | Support |
|---|---|
| Languages | JavaScript, TypeScript, Java, Kotlin |
| Providers | LaunchDarkly, OpenFeature, Unleash, Togglz |
| Framework configuration | Spring @ConditionalOnProperty, application*.properties, application*.yml |
| Other configuration | .env* feature switches |
| Your own helpers | Method names declared in .flagmarshal.yml |
A provider call counts as a flag only when the file imports that provider and the
receiver is bound to it, so an unrelated isEnabled() or variation() is not reported.
Computed keys are reported as unresolved and never assigned a guessed value.
Open source
Flag Marshal is MIT licensed. The source remains on GitHub for reference. Every command is free; there are no tiers, license keys, or accounts.
Flag keys can reveal unreleased features. Replace real keys with placeholders before posting anything publicly.