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.