Loading...
FlagShark detects stale feature flags across your monorepo, opens cleanup PRs powered by Uber Piranha, and tracks every flag’s lifecycle from launch to deletion. So your codebase stops drowning in if (flags.legacyCheckout).
npx flagshark scan — no signup, no install. See how →The PM moved on. The engineer who shipped it left. Stale flags linger in branches forever.
Unmanaged feature flags grow exponentially, creating invisible code paths that complicate refactoring.
On every push, FlagShark parses your code with native tree-sitter grammars across 12 languages, recognizes 30+ provider SDKs, and indexes every flag reference into an event-sourced timeline.
We pull evaluation data from LaunchDarkly, Statsig, Unleash, Split, and OpenFeature, cross-reference it with your code, and assign each flag a 0–100 health score. Stale, dead, or 100%-rolled-out flags surface first.
Only dead flags (score < 50) can be auto-cleaned. Tweak sliders to decay health!
When a flag is provably dead, FlagShark uses Uber Piranha to refactor your code — removing the conditional, simplifying the branch, and opening a PR with the diff, owner, and rollback notes attached.
import { flags } from './flags';export function checkout(cart) {if (flags.isEnabled('new-checkout-flow')) {// Modern faster checkoutreturn processModernCheckout(cart);} else {// Legacy checkout code - DEPRECATEDreturn processLegacyCheckout(cart);}}
FlagShark proposes a removal only when there is no way that removal can change behavior.
When in doubt, FlagShark does nothing. Skipping a flag is always cheaper than breaking your build.
Uber Piranha removes the dead branch and keeps the live path. The transform is a no-op at runtime.
Every change arrives as a pull request. Nothing lands without your review and approval.
Each PR ships with the owner, the diff, and rollback notes attached. Reverting is one click.
The detection engine that powers FlagShark is fully open source. Run it locally as a CLI, or drop the GitHub Action into any repo and get a stale-flag report on every PR — forever free.
Only inspects files that actually import a flag SDK. A random isEnabled() elsewhere won’t get flagged — no false positives.
A flag is stale if its reference is older than 6mo (configurable), or appears in a single file — likely a finished rollout nobody cleaned up.
Posts a comment with the stale-flag table, a 0–100 health score, and can block merges when health regresses.
The hosted product opens the cleanup PRs for you, tracks lifecycle across releases, and syncs with LaunchDarkly & Statsig. See plans →
.cs, .cpp, .rs, .php — flagged in PR comments, no auto-cleanup yet.Install the GitHub App in 60 seconds. No code changes. We’ll find your stale flags before your next standup.