Another tightening week. No new headline features — fit-and-finish, papercuts, and getting every repo back to a clean version matrix. Two weeks of this in a row is exactly the rhythm I want before cutting 1.0s.
What Moved This Week
Datadir auto-reload across every backend SDK. Node, Go, Python, Ruby, and Java now all ship an opt-in file watcher for datadir mode — change a JSON config on disk and the SDK reloads it in-place. Same option shape and same contract across all five: debounced, parse-then-swap so a half-written file never blanks out your config, symlink-aware, and graceful degradation on a read-only filesystem. This was the missing piece for anyone running fully-local. Edit a flag, save the file, the app sees it.
Fully-local, no-account workflow, audited end-to-end. I walked the "use Quonfig without signing in" path and fixed two real bugs along the way: qfg generate was quietly requiring login when you didn't pass --dir, and the Node SDK in datadir-without-key mode was still trying to POST telemetry on shutdown. Both fixed. A dedicated docs page and a Next.js tutorial now get you from create-next-app to a server component reading a flag without ever creating an account.
qfg serve. The browser, React, and React Native SDKs don't have a datadir mode — they're network clients by design. qfg serve closes the gap: boots a single Node SDK in datadir mode and exposes the same /api/v2/configs/eval-with-context/{ctx} envelope shape api-delivery returns, on localhost. Browser and RN SDKs can now develop fully-locally with the same edit-save-reload loop. Contract-tested against the real api-delivery binary so the envelope doesn't drift.
CLI papercuts from a live Launch migration. Sat with a real customer migration in progress and a stack of papercuts surfaced in an hour — qfg workspace create printed a switch hint that immediately errored, qfg migrate ran silent for minutes and then ended with no next step, MIGRATION_REPORT.md landed at a path qfg push then refused, and a fresh qfg push hit a misleading "your CLI is too old" 426. Fixed every one and shipped as cli 0.0.54.
Clean version matrix. Seven SDK + CLI releases, six OpenFeature wrapper releases, every open Dependabot PR merged, every consumer app re-pinned and deployed to staging and production. Every repo now has its tag at HEAD, zero commits-since-tag, CI green on main. The kind of state I want us in before announcing GA.
Smaller things worth mentioning.
- New cross-SDK integration suite asserts the raw datadir envelope holds the right value types (int as int, double as double, not strings) across all five backend SDKs, and the generator now has a CI drift-check on every SDK — a future shared-YAML change that doesn't get regenerated gets caught before merge instead of going stale-green.
- Date/time targeting in the dashboard finally works end-to-end. Built-in
quonfig.current-timeproperty in the rules editor, a realdatetime-localpicker writing int millis (the old code wrotestring_list, which the evaluator can't read — date rules authored in the UI silently never fired), and timezone abbreviations on both the picker and the readout. - Two flaky SSE-timing tests in sdk-ruby and sdk-java root-caused and fixed. The Ruby one was a real race between Net::HTTP's
read_timeoutand the SDK's instrumented watchdog at the same deadline; the Java one was a too-tight await ceiling under a contended CI scheduler. No blanket retries — that would mask the next flake. - Dead
collectLoggerNames/collectLoggerCountsoptions ripped out of sdk-javascript, sdk-react, sdk-node, the CLI, and the docs.
Where That Leaves Us
Nothing on the must-do list. The version matrix is in the cleanest state it's ever been, every backend SDK reloads from disk in datadir mode, the fully-local story is real end-to-end, and the browser SDKs have a local-dev story they didn't have before.
1.0 is on the runway.
-- Jeff
Want to try it?
Quonfig stores your config in git. Feature flags, dynamic config, log levels, and secrets — all as files you own.