Legend: [ ] todo · [~] in progress · [x] done · [!] blocked
- package.json (name, exports map, scripts, deps, peers)
- tsconfig.json · vite.config.ts (pack + test) · vite.ui.config.ts
- .gitignore · mise.toml · LICENSE (MIT) · .npmrc
- install deps; verify
vp pack+vp teston trivial entry
- src/schema.ts — Flag/Variant/Rule/Condition/Snapshot/Draft types
- src/hash.ts — MurmurHash3 → unit interval
- src/validation.ts — valibot schemas + validateDraft
- src/evaluator.ts — eval order, condition operators, deterministic splits
- src/snapshot.ts — compile draft → snapshot, versioning, key layout
- tests: evaluator, splits (distribution), conditions, snapshot, type tests
- storage/contract.ts (FlagsStorage + Watchable/Transactional/CAS)
- storage/memory · file · unstorage · redis
- integration tests (real Redis via docker)
- openfeature.ts — memory-first, background refresh, last-known-good
- tests: loads snapshot · admin down · redis down after load · missing → defaults
- create-fetch-handler · routes · static-assets · render-index-html · base-path
- auth + authz middleware, readonly mode, audit
- server tests (config, assets, SPA fallback, CRUD, publish, rollback, basePath)
- auth: contract · none · basic (hash + verifier) · delegated
- authorization: contract · none · roles · delegated
- tests
- adapters/elysia · hono · bun + adapter tests
- React SPA: layout, flag list, flag editor (variants/rules/overrides), publish, snapshots, rollback
- api-client, config bootstrap, basePath-aware assets
- build → dist/ui; Playwright browser tests
- apps/standalone (env parsing, /healthcheck), Dockerfile, smoke test
- init / validate / publish / rollback / inspect
- README + docs/* + ADRs
- examples: elysia, hono, openfeature-redis, standalone-docker
- .github/workflows: ci.yml, release.yml, docker.yml
- publint + pack dry-run
- 1. Package installs as
@xtandard/flags - 2. Subpath exports work (publint clean, 27 entries)
- 3. Elysia app can mount
/flags - 4. Hono app can mount
/flags - 5. Bundled UI loads without the consuming app installing React
- 6. Redis storage works (live integration tests + e2e)
- 7. unstorage adapter works
- 8. Memory and file storage work
- 9. Create a string flag with variants (UI + API + tests)
- 10. Publish a snapshot
- 11. OpenFeature provider evaluates that snapshot
- 12. Deterministic split works (distribution tests)
- 13. User override works
- 14. Basic auth works
- 15. Delegated auth works
- 16. Roles authorization works
- 17. Delegated authorization works
- 18. Runtime keeps evaluating from memory when admin is down (e2e)
- 19. Runtime keeps last-known-good when Redis goes down after load (e2e)
- 20. CI defined (.github/workflows/ci.yml) — local gate green
- 21. Docker image boots & serves /healthcheck (standalone smoke-tested; docker.yml smoke job)
- 22. README explains the product clearly
Later / v1 non-goals: postgres adapter, /react component export, experiment analytics,
Playwright UI suite in CI, hosted SaaS.
- Express adapter (
@xtandard/flags/express) + example - Postgres storage (
@xtandard/flags/storage/postgres, pg + PGlite) + standalone/CLI driver + CI live - MongoDB storage (
@xtandard/flags/storage/mongodb) + standalone/CLI driver + CI live - unstorage driver ecosystem documented (Upstash, Vercel KV, Cloudflare KV, S3, GitHub, Netlify Blobs)
- storage-drivers example; examples runnable via file:../.. against local checkout
- CI: mongo + postgres service containers
- UI redesign to v0 reference (top-nav, full-page detail, shadcn neutral+blue, light/dark/system)
- @xtandard/flags/react component export (+ examples/react-embed, verified embedded)
- bun:sqlite storage adapter (+ standalone/CLI driver, bun test, CI)
- e2e expanded to 5 (create, publish, rollback, theme persistence, shell)
- CI green incl. live Redis/Mongo/Postgres + bun:sqlite + build:react + 5 browser e2e