NewVersioned config with instant rollback

Remote config that respects
your craft. Not your patience.

JSON config across every environment, versioned on every change with one-click rollback, served from an edge-cached read API that propagates in under 30 seconds.

Start for freeFree plan available. No credit card.
<30s propagationEdge-cached read API
app.betterconfig.com/acme/keys/checkout.express_pay
prod · v42published 2h ago · maya

checkout.express_pay

JSON config for the express checkout sheet, per environment
value.jsonprod · v42
1
2
3
4
5
6
7
{
  "enabled": true,
  "providers": ["apple_pay", "google_pay", "link"],
  "min_client_version": "4.12.0",
  "button_style": "black",
  "max_amount_usd": 2500
}
Environments
dev
v51
staging
v47
prod
v42
Recent versions · prod
v42
Raise max to $2,500
maya · 2h ago
v41
Add link provider
arjun · 1d ago
v40
Bump min version
sam · 3d ago

A config tool built by people who ship to production.

Everything Firebase Remote Config should have been, executed like Linear. Dense, keyboard-first, and built so a bad value is never more than one rollback away from gone.

One config, every environment

Edit JSON config in a real in-app editor and store a separate value per environment. Promote from dev to staging to prod without copying files between projects.

Versioned, with instant rollback

Every change is a new version, with a full history and audit log per environment. Roll back to any previous version in one click. No cache TTLs to wait out, no app store re-review.

Edge-cached read API

Publish once and your config is served from the edge worldwide, cached with ETags and propagated in under 30 seconds. Read it over plain HTTPS with a scoped token.

A real JSON editor for every key, in every environment.

Edit config values in the app, not in a string field. Each key holds a JSON value, stored separately per environment, so dev, staging, and prod move at their own pace. Switch environments without leaving the key.

  • JSON, not stringsObjects, arrays, numbers, and booleans, edited as the structured values they are.
  • Per-environment valuesOne key, a separate value in dev, staging, and prod. Promote when you are ready.
  • Formatted and validatedInvalid JSON never publishes. Values are formatted on save.
dev
staging
prod
JSON · 7 lines
1
2
3
4
5
6
7
{
  "enabled": true,
  "providers": ["apple_pay", "google_pay"],
  "min_client_version": "4.12.0",
  "button_style": "black",
  "max_amount_usd": 2500
}
Valid JSON · formatted on save · one value per environment

Every bad value is one rollback from being a non-event.

Every change is a new version, recorded in a full history and audit log per environment. Pick any earlier version, roll back, and the edge-cached read API serves the old value within 30 seconds. No cache TTL to wait out, no app store re-review.

  • Versioned per environmentEach publish bumps the version. Browse the full history for any key.
  • One-click rollbackRestore any previous version. It publishes as the new current version.
  • Audit logWho changed what, in which environment, and when. Exportable.
Version historycheckout.express_pay · prod
Raise max_amount_usd to 2500
v42 · maya · 2h ago · current · prod
Add link to providers
v41 · arjun · 1d ago · +1 −1
Bump min_client_version to 4.12.0
v40 · maya · 2d ago · +1 −1
Revert to v37 - regression on Android < 12rollback
v39 · sam · 3d ago · +1 −11
Enable express_pay in prod
v38 · jules · 3d ago · +6 −2
"Firebase Remote Config caps you at 2,000 parameters and ships with a UI that hasn't been touched in years. BetterConfig is the cleaner version we needed."
WA
Waleed Abdullah
Founder, BetterConfig

Read your config over plain HTTPS.

One GET request, authorized with a scoped read token, returns the published values for a project and environment. Edge-cached with ETags, so repeat reads are a 304.

read-config.shGET /v1/config
1
2
3
4
5
6
7
8
9
10
curl "https://api-public.betterconfig.dev/v1/config?project=acme&env=prod" \
  -H "Authorization: Bearer $BC_TOKEN"

# {
#   "projectSlug": "acme",
#   "environmentKey": "prod",
#   "version": 42,
#   "fetchedAt": 1749480000000,
#   "values": { "checkout.express_pay": { "enabled": true } }
# }
Coming soonNative typed SDKs for iOS, Android, React Native, web, Go, and Node. Today you read config over HTTPS.

What you get that Firebase Remote Config doesn't.

No shade. Just a feature matrix from the team that used it for years.

BetterConfig
Firebase Remote Config
JSON config values
Objects, arrays, numbers, booleans
Strings only
Versioned history per environment
Every change, with audit log
"Change history" (basic)
One-click rollback
Restore any previous version
Manual re-edit
Read propagation
< 30 seconds
12-hour fetch interval default
Environment promotion
dev, staging, prod per key
Separate projects, manual copy
Scoped read tokens
Per project or per environment
Roll your own
Schema validation and codegenComing soon
Typed configs and generated client types
Roll your own
Keyboard-first UI
⌘K everywhere
Click, click, click

Start free. Upgrade when you ship.

Every plan ships the same fast, edge-cached config API. Pay as your team and your traffic grow.

Free

$0

For startups trying things out early.

  • Projects1
  • Environments1
  • Members3
  • Reads / mo200K
  • Storage / project5 MB
  • Edge-cached config API
  • Scoped API read tokens
  • Change history / diff

Pro

Popular
$19$15/mo

Billed annually at $180/yr · 3 months free

For teams that need more projects, members, and headroom.

  • Projects5
  • EnvironmentsUnlimited
  • Members10
  • Reads / mo2M
  • Storage / project10 MB
  • Edge-cached config API
  • Scoped API read tokens
  • Change history / diff

Ultra

$79$65/mo

Billed annually at $780/yr · 2 months free

For larger orgs running config without caps.

  • ProjectsUnlimited
  • EnvironmentsUnlimited
  • MembersUnlimited
  • Reads / mo200M
  • Storage / projectUnlimited
  • Edge-cached config API
  • Scoped API read tokens
  • Change history / diff

Frequently asked questions

What counts as a read?
A read is one fetch of a project’s published config from the public API, typically by your server or an SDK at startup or on a refresh. Responses are cached at the edge and support conditional requests, so a normally-polling app uses far fewer reads than you might expect.
What happens if I reach a plan limit?
For projects, environments, members, and storage you’ll be prompted to upgrade before you can add more, and nothing you’ve already created is affected. If you use up the monthly reads included in your plan, reads pause until you upgrade or the month resets. You can track usage from your project settings.
What’s the difference between a project, an environment, and a member?
A project holds one app’s config. Each project has environments such as dev, staging, and prod that store separate values, and members are the teammates you invite to collaborate on it.
How is storage measured?
Storage is the total size of a project’s published config: all of its keys and values across every environment. Most projects use a small fraction of even the Free allowance.
Can I change plans whenever I want?
Yes. Upgrade or downgrade anytime from your dashboard. Upgrades apply immediately, and downgrades take effect at the end of your billing period. You can update your card or cancel from the billing portal whenever you like.
Do I need a credit card to start?
No. The Free plan is free forever and needs no card. Create your first project and start shipping config in minutes.

Still have a question? Email us at support@betterconfig.dev.

Ship config you can roll back.

Create a project, publish your first values, and read them from your app in minutes. Start on the free plan and upgrade when you grow.

30 seconds to sign up·no credit card required