Feature Flags
Feature flags.
Ship code.
Release when ready.
Signal feature flags decouple your code deploys from your feature releases. Wrap any feature in a flag, ship to production, and decide in real time who sees it — without touching git, without a redeploy, without a hotfix.
0s
rollback time
100%
of flag reads served from local cache
<50ms
flag change propagation via WebSocket
No redeployment
Toggle features
in production,
instantly.
The traditional release cycle forces you to bundle a feature rollout with a code deployment. Any issue in the feature means an emergency rollback of the entire deploy — taking unrelated changes with it.
With Signal feature flags, your code ships when it is ready. The feature is hidden behind a flag. You enable it when you choose — from the dashboard, in seconds, without opening a terminal.
If something goes wrong, you flip the flag off. Your users see the old behaviour instantly. No hotfix branch, no pipeline, no 3am wake-up call.
Real-time sync
WS connected to signal api
> FLAG_UPDATED new-checkout
> enabled: true
> propagated in 34ms
Changes reach every client
in milliseconds.
Signal keeps your flags in sync in real time via persistent WebSocket. The moment you flip a flag in the dashboard, every connected SDK instance receives a FLAG_UPDATED event — no stale cache, no lag, no redeploy.
SSE and polling transports are also available, designed for serverless and firewall-constrained environments. All three transports deliver the same payload — switch without changing a line of application code.
Flag types
Beyond on and off.
Signal supports four flag value types. The same targeting and rollout logic applies to all of them — only the value payload changes.
Boolean
enabled: true | falseThe classic on/off switch. Perfect for feature gating, killswitches, and maintenance windows.
String
value: "variant-a" | "variant-b"Return different copy, themes, or variant names. Useful for serving variants — full A/B experimentation with metric tracking is coming before GA.
Number
value: 0.15Thresholds, limits, weights. Any numeric config that changes without a deploy.
JSON
value: { layout: "grid", cols: 3 }A full configuration object. Replace entire feature configs without touching your codebase.
Integration
Three lines of code.
Full control from the dashboard.
Install
npm install @code-signal/signalInitialise with your API key
const signal = new Signal({ apiKey: 'sig_live_...' })Read the flag value
const { enabled } = signal.flag('new-checkout')FAQ
Common questions.
- How is Signal different from a simple environment variable?
- Environment variables require a redeploy to change. Signal flags update in real time — changes propagate to every connected client in milliseconds, without restarting your server or redeploying your frontend.
- Can I use Signal flags on the server side?
- Yes. The Signal SDK works in Node.js, Next.js (App Router and Pages), and any TypeScript server. Server-side evaluation uses a local cache updated via WebSocket, so flag reads are synchronous with zero latency.
- What happens if the Signal API is unreachable?
- The SDK falls back to the last known state stored in its local cache. You define default values at flag initialisation — your application never crashes because of a network issue.
- Is there a limit on how many flags I can create?
- No. During the beta, all plans include unlimited feature flags across all flag types.
Join the waitlist
Ship your next feature
with confidence.
Join the waitlist. We will reach out personally before we open access.
No spam. One email when we open.