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.

Ship code
Flag is OFF
Enable in dashboard
Users see feature
Issue detected? Flip OFF
Users revert instantly

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 | false

The 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.15

Thresholds, 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.

1

Install

npm install @code-signal/signal
2

Initialise with your API key

const signal = new Signal({ apiKey: 'sig_live_...' })
3

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.