SkyState
// Versioned app state
SkyState
Versioned JSON state for apps: public state anyone can read, plus user state after hosted sign-in.
- Hosted public stateRuntime settings, flags, and banners. No state server to build.
- Code-drivenState reads with built-in fallbacks.
- Versioned, safe promotionEvery write versioned. Diff environments, promote deliberately, stale writes rejected.
- Hosted user sign-inHosted OAuth sign-in for apps that need user state.
skystate · code-driven
02 / SDK
Code
driven
- Wrap once with the provider<SkyStateProvider account project environment>
- Read public state with a hookusePublicState('banner', fallback) → { value }
- User state, scoped to each identityuseUserState('theme', 'light') → { value, set, draft }
- Framework-agnostic corecreateSkyStateClient(...).publicState.get()
React@skystate/react
<SkyStateProvider account="acc_xyz" project="my-app" environment="production">
<App/>
</SkyStateProvider>
const { value: banner } = usePublicState('banner', { enabled: false })
const { value: theme, set, draft } = useUserState('theme', 'light')
Core@skystate/core · framework-agnostic
const client = createSkyStateClient({
account: 'acc_xyz',
project: 'my-app',
environment: 'production'
})
await client.init()
const banner = client.publicState.get('banner', { enabled: false })
03 / CONSOLE
Start in
the console
Sign in, name a project, and edit public state per environment. Every save creates a version.
- Public-state editor for every environment
- Version history with prior-version diffs
- Conflict-aware saves, stale writes detected
- API keys, end-user auth settings, billing in one place
State
Public config and user state for the selected project.{ }v12
Public
Versioned state readable through the SDK, API, or CLI.
DevelopmentStagingProduction
{ "featureFlags": { "darkMode": true, "newCheckout": false, "maxUploadMb": 25 }, "banner": { "enabled": true, "text": "Widget Pro 2.4 is here!" } }
@example
User
User state, scoped to each signed-in identity.
JDuser_123sample
AMuser_456sample
Or jump
to the CLI
04 / CLI# two lines from nothing to running — no infra to stand up
$ npm i -g skystate
added 1 package in 1.8s
$ sky onboarding
✓ Guided — picks a project, configures starter snippets, can create API keys
✓ Ready · jane@widget.io · my-app
# push a JSON file as the new public state for an environment
$ sky state public push --file flags.json --project my-app --env staging
✓ Pushed staging · v7 · 2 keys changed
$ sky state public show --project my-app --env staging
{ "banner": { "enabled": true }, "limits": { "maxItems": 50 } }
$ sky state public diff --from stg --to prod --project my-app
staging (v7) → production (v12) · 2 updated
"banner": {
- "enabled": false,
+ "enabled": true,
"limits": {
- "maxItems": 25,
+ "maxItems": 50,
# promote the known-good version; stale writes are refused
$ sky state public promote --from staging --to production --project my-app
✓ Promoted → production · v12
$ sky state public patch /banner/enabled true --expect-version 9 --project my-app --env prod
✗ Rejected: production is at v12, expected v9
Every step scriptable with project API keys · version-guarded writesCLI reference →
sdk underneath · rest api
05 / REST API
REST API
Use our REST API directly. Authenticated writes use If-Match, and RFC 6902 JSON Patch lets you update exactly the fields you need.
GET[01]
Anonymous public read
/v1/readonly/:acc/projects/:slug/public-state/:env
KEY[02]
Project-scoped API key
Authorization: ApiKey sky_…
BEARER[03]
Developer bearer token
Authorization: Bearer <jwt> · account-scoped
PATCH[04]
Partial writes, no redundant payload
RFC 6902 JSON Patch (application/json-patch+json)
412[05]
Writes gated by If-Match
If-Match: "<version>" → 412 on mismatch, version bumps
PUT[06]
Full-document replace
PUT + If-Match · whole-state write
06 / USER STATE
Branded
sign-in
Use SkyState's hosted OAuth sign-in when your app needs state scoped to a signed-in user. Configure the auth page in project settings. Powered by Firebase Auth.
- Hosted auth page for end users
- State scoped to the signed-in user automatically
- Readable and writable through React hooks
Northwind
Welcome back
Sign in to Northwind to continue.
Continue with Google
OR
you@company.com
•••••••••
Sign in
Don't have an account? Create one
Secured by SkyState
Simple
pricing
07 / PRICINGFree
€0
- 3 projects
- 3 environments / project
- 25,000 API requests / mo
- 100 stored users
- No state history
- 3 business day support target
Hobby
€7 /mo
excluding tax
- 7 projects
- 3 environments / project
- 250,000 API requests / mo
- 1,000 stored users
- 5 days state history
- 3 business day support target
Pro
€22 /mo
excluding tax
- 15 projects
- 3 environments / project
- 2,000,000 API requests / mo
- 10,000 stored users
- 30 days state history
- Priority support
Payments are processed by Creem, our merchant of record.