
Feature Flags Without a Third-Party Service
Feature Flags Without a Third-Party Service You do not need LaunchDarkly to ship features safely. A simple flag system backed by a database or config file gets you 90% of the way. Basic Flag Store interface FeatureFlag { name : string ; enabled : boolean ; rolloutPercent : number ; // 0-100 allowedUsers?: string[]; // whitelist for beta testers } class FeatureFlagService { private flags = new Map(); async load(): Promise { const rows = await db.query("SELECT * FROM feature_flags"); rows.forEach((r) => this.flags.set(r.name, r)); } isEnabled(name: string, userId?: string): boolean { const flag = this.flags.get(name); if (!flag || !flag.enabled) return false; if (flag.allowedUsers?.includes(userId!)) return true; const hash = simpleHash( ${name}-${userId} ) % 100; return hash < flag.rolloutPercent; } } ## Usage in Routes typescript app.get("/dashboard", async (req, res) => { if (features.isEnabled("new-dashboard", req.user.id)) { return res.render("dashboard-v2"); } res.render("dashboard
Continue reading on Dev.to Webdev
Opens in a new tab


