Self-hosted feature flags · free to run

Ship fast.
Switch safely.

Put every release behind a flag. Roll it out to 1%, then 50%, then everyone. Target the users you choose, and switch anything off within a second, on your own servers.

  • ~1 s for a change to reach apps
  • ~10 ns per flag check
  • 68 MB server memory
  • $0 to host
The Switchyard dashboard: a flag with three variations, a prerequisite, and a rule serving blue to the Staff segment in Production.
Features

Everything a release needs, nothing it doesn't.

Flags are checked in your app's memory, so they never slow it down or fail with the network.

Targeting rules

Text, numbers, versions, dates and patterns: email ends with @acme.com, app version before 2.4.0.

Percentage rollouts

Raise 1% to 100% and nobody flickers: each user keeps their place, the same in every client library.

Variations and splits

Serve text, numbers or JSON, not just on/off. Split 30/70 between a green and an orange button.

Segments

Define "Beta testers" once, by key and by rules, and target it from every flag.

Kill switch, live

Off beats every rule. Changes stream to connected apps in about a second, with polling as a safety net.

History with undo

Who changed what, before and after, as a diff. One click puts any switch or targeting change back.

Roles and protection

Sign in with GitHub. Viewers read, editors change, and only admins touch a protected Production.

Approvals and schedules

Production changes can wait for a second person's OK, or for a time you pick. The server applies them.

Slack and webhooks

Every change as a line in a Slack channel, or as signed JSON to your own services.

Tokens and environments

API tokens with their own role for CI. Add Staging, QA or any environment, copied from another.

Java, JavaScript, React

Server libraries for Java and Node, a browser client with React hooks, and OpenFeature providers for both.

Keeps working offline

If the server goes away, apps carry on with their last flags and catch up when it's back.

How it works

Decide in the dashboard. Apps follow in a second.

  1. You change a flag

    Switch it, add a rule, move a rollout. Every change is recorded with who made it.

  2. The server tells apps

    A live stream announces the new version. Apps fetch it once, with an ETag, so unchanged polls cost nothing.

  3. Apps check flags in memory

    No network call per check. Browsers ask with a public ID and only ever see values, never your rules.

var flags = SwitchyardClient
    .builder(System.getenv("SWITCHYARD_SDK_KEY"))
    .baseUri("https://flags.example.com")
    .build();

var user = EvaluationContext.builder(userId)
    .attribute("plan", plan)
    .build();

if (flags.isEnabled("new-checkout", user, false)) {
    // the new checkout
}
String color = flags.stringVariation(
    "pay-button", user, "green");
For developers

One call where the feature lives.

Create one client when your app starts and check flags anywhere. The last argument is the safe default: what your app does before it has flags, or if a flag doesn't exist.

Every library follows the same written rules and passes the same 77 shared test cases, so a user gets the same answer in Java, Node and the browser.

Library docs
Measured, not promised

Small, fast, and steady under load.

9.5 ns
a flag check in Java, all in memory (JMH)
< 0.6 s
for a change to reach 1,000 connected apps (95th percentile)
0.65 s
for the server to start, as a native image
68 MB
server memory: fits a free 512 MB host

How each was measured: Architecture.

The dashboard

Clear enough for everyone on the team.

Product managers flip switches, engineers write rules, and History shows exactly what changed.

Why Switchyard

The core of a flag service, without the bill.

SwitchyardTypical hosted flag service
Where it runsYour servers (or free hosting)The vendor's cloud
PriceFreePer seat or per monthly active user
Your users' dataStays with youSent to the vendor for targeting
Standard APIOpenFeature providers, Java and JSUsually OpenFeature too
Rules, rollouts, segments, undoYesYes
Approvals, schedules, SlackYesOften on higher plans
Experiments with metricsNot yetOften, on higher plans
Run it for free

About 30 minutes, no credit card.

The deploy guide walks through each step.

NeonPostgres for the flags and history
RenderThe server, as a 68 MB native image
Cloudflare PagesThe dashboard, and this site
GitHubSign-in, CI and the container image

Put your next release behind a flag.

Start with the deploy guide, or run everything locally in three commands.