Cloud state, local feel.
Versioned, hosted state that lives in your code.
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.
A version for every update.
- Every write creates a new version.
- Diff and track changes between versions.
- Optimistic concurrency. Stale writes get
412 Precondition Failedinstead of overwriting.
{
"banner": { "enabled": true },
"theme": "dawn",
"maxUploadMb": 25
}Sign-in with Google Cloud Identity Platform.
- Your users, in your own isolated tenant.
- Google and GitHub sign-in.
- Handled by Google.
Welcome
Sign in to continue.
Simple SDK: install, wrap, read.
- Install itnpm i @statepoint/react
- Wrap your appOne provider at the root.
- 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.
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; }
An honest API.
- Plain JSON over standard HTTP.
- Atomic updates using JSON Patch (RFC 6902).
- Conditional writes using
If-Matchheaders (RFC 9110). - Predictable errors.
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." }
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.
Simple pricing.
Free to start. Upgrade when needed. Three tiers, no surprises.
For trying it out and side projects.
- Writes / month
- 5,000
- Version history
- Latest only
- Document size
- 256 KB
For a live app with real users.
- Writes / month
- 100,000
- Version history
- 10 days · 10 versions
- Document size
- 256 KB
For products with a growing user base.
- Writes / month
- 1,000,000
- Version history
- 30 days · 30 versions
- Document size
- 256 KB
Prices exclude VAT. Reads are free. A write is any request that changes state; your own CLI and console calls don't count.
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.