Cloud state, local feel.

Versioned, hosted state that lives in your code.

Start free
$npm i -g statepoint

Code first

Define state in code

Your defaults ship with your app. statepoint holds the live values.

Stay in the editor

Read and write state from your code and terminal. No dashboard detours.

No infra to manage

No servers, databases or caches to run. It's hosted.

Versioned

A version for every update.

  • Every write creates a new version.
  • Diff and track changes between versions.
  • Optimistic concurrency. Stale writes get 412 Precondition Failed instead of overwriting.
my-app / public / productionv15
{
  "banner": { "enabled": true },
  "theme": "dawn",
  "maxUploadMb": 25
}
v15 · jonas · patch /banner/enabled
Sign-in

Sign-in with Google Cloud Identity Platform.

  • Your users, in your own isolated tenant.
  • Google and GitHub sign-in.
  • Handled by Google.
Hosted sign-in · your app's tenant
SDK

Simple SDK: install, wrap, read.

  1. Install itnpm i @statepoint/react
  2. Wrap your appOne provider at the root.
  3. Read state with a hookTyped, with a fallback value.
  • Caching and auth are handled for you.
  • The core is framework-agnostic, with a React package on top.
App.tsx
import { StatepointProvider, useProjectState } from '@statepoint/react';

export function App() {
  return (
    <StatepointProvider project="my-app">
      <Banner />
    </StatepointProvider>
  );
}

function Banner() {
  const { value } = useProjectState('public', 'banner', { enabled: false });
  return value.enabled ? <p>{value.message}</p> : null;
}
API

An honest API.

  • Plain JSON over standard HTTP.
  • Atomic updates using JSON Patch (RFC 6902).
  • Conditional writes using If-Match headers (RFC 9110).
  • Predictable errors.
A stale write, rejected
PATCH /v1/projects/my-app/state/public/production
Content-Type: application/json-patch+json
If-Match: "14"

[{ "op": "replace", "path": "/banner/enabled", "value": true }]

──────────────────────────────
HTTP/1.1 412 Precondition Failed
Content-Type: application/json

{ "message": "Version 14 is stale. Current version is 15." }
CLI

A powerful CLI.

  • Manage state from the terminal.
  • Scriptable and CI-friendly.
  • Do it all: show, put, patch, diff, promote.
$ statepoint state project public show --env production
{
  "banner": { "enabled": true },
  "theme": "dawn",
  "maxUploadMb": 25
}

Print the current document as JSON. Pipe it anywhere.

Pricing

Simple pricing.

Free to start. Upgrade when needed. Three tiers, no surprises.

Free
10 usersGoogle + GitHub login
€0/ month

For trying it out and side projects.

Writes / month
5,000
Version history
Latest only
Document size
256 KB
Start free
Hobby
1,000 usersGoogle + GitHub login
€7/ month

For a live app with real users.

Writes / month
100,000
Version history
10 days · 10 versions
Document size
256 KB
Choose Hobby
Pro
5,000 usersGoogle + GitHub login
€39/ month

For products with a growing user base.

Writes / month
1,000,000
Version history
30 days · 30 versions
Document size
256 KB
Choose Pro

Prices exclude VAT. Reads are free. A write is any request that changes state; your own CLI and console calls don't count.

Questions

What about…

What happens if statepoint is unreachable?

Every hook takes a fallback value from your code, so your app still renders.

Where is my data stored?

In Google Cloud's Belgium region (europe-west1). Your data stays in the EU.

What if I go over my write limit?

You get a 10% grace margin. Past that, writes return a clear error and reads keep working, so nothing your users see goes blank.

Can I leave?

Yes. Your state is plain JSON. Read any document out with the CLI or the API. No export fee, no lock-in format.

Is this a database?

No. It's a home for JSON your app reads often and changes on purpose: config, flags and per-user settings. Keep relational data where it is.

Ready when you are.

Start free