What's Changed
- feat(frontend): add impersonation banner with stop-impersonating action by @jog1t in #5466
- docs(frontend): require useMutation and forbid useEffect for derived state by @jog1t in #5467
- fix(rivetkit): route all actor sqlite through envoy when local sqlite is not compiled by @abcxff in #5473
- docs(deploy): document --drain-on-version-upgrade false for container-runner by @abcxff in #5474
- fix(cli): pass RIVET_ENDPOINT to supabase edge functions in dev by @jog1t in #5483
- fix(rivetkit-core): stop scrubbing actor/not_found error message by @abcxff in #5485
- docs(blog): add run-your-harness-outside-the-sandbox post by @NathanFlurry in #5486
- feat(frontend): default onboarding to runner mode and make copy prompt mode-aware by @abcxff in #5476
- docs: use RIVET_POOL instead of the unread RIVET_RUNNER env var by @abcxff in #5477
- refactor(frontend): rename serverfull to serverful by @abcxff in #5478
- docs: clarify runtime mode guidance across deploy guides by @abcxff in #5479
- feat(frontend): sync compute connect dialog with onboarding and simplify others by @abcxff in #5482
- feat(cli): support multiple compute pools by @abcxff in #5487
- feat(cli): add token create command for minting namespace tokens by @abcxff in #5488
- feat(frontend): raise namespace name max length to 48 by @abcxff in #5489
- fix(cli): send Content-Length on bodyless Cloud API requests by @abcxff in #5491
- feat(cli): add pool delete command by @abcxff in #5492
- feat(frontend): raise namespace name max length to 128 by @abcxff in #5493
- docs(container-runner): route actors to compute pools via runner_name_selector by @abcxff in #5494
- docs(blog): add agentOS execution API for JavaScript and Python post by @NathanFlurry in #5495
- fix(cli): require --with-env-vars to expose pool env vars in pool list by @abcxff in #5497
- docs(self-hosting): fix postgres/filesystem config nesting and document PG+NATS multi-node model by @abcxff in #5500
- fix(rivetkit): correct actor connection keepalive interval by @abcxff in #5502
- fix(frontend): paginate managed-pool logs by raw cursor so filtered views can load older history by @abcxff in #5503
- fix(frontend): classify destroyed actors by error, not connectable_ts by @abcxff in #5504
- feat(frontend): seed compute log tab from actor destroy time for destroyed actors by @abcxff in #5505
- fix(frontend): use paginated logs history endpoint for compute logs by @abcxff in #5506
- revert(http): remove streaming lifecycle hardening by @NathanFlurry in #5507
- revert(http): return main to Envoy protocol v6 by @NathanFlurry in #5515
- revert(rivetkit-core): drop dangling http body stream re-exports by @abcxff in #5532
- fix(rivetkit-wasm): drop removed ActorHttpResponse wrapper by @abcxff in #5534
- revert(frontend): remove destroy-time seeding for compute logs by @abcxff in #5527
- fix(frontend): seed compute logs only from destroy time, not sleep time by @abcxff in #5520
- fix(frontend): cancel in-flight log history load-more on filter change by @abcxff in #5521
- refactor(frontend): extract log viewport scroll logic into useLogScroll by @abcxff in #5522
- refactor(frontend): de-duplicate log stream lifecycle writes by @abcxff in #5523
- feat(frontend): make older-logs sentinel a clickable load button by @abcxff in #5524
- refactor(frontend): split log stream transport and history into modules by @abcxff in #5525
- perf(frontend): skip live log tail for destroyed actors by @abcxff in #5526
- chore(frontend): lower log history page sizes to 50 and 100 by @abcxff in #5538
- feat(rivetkit): add per-call poolName option to getOrCreate and create by @abcxff in #5496
- feat(frontend): pool switcher and pool-scoped titles for logs and compute by @abcxff in #5499
- feat(frontend): add pool selector to create actor dialog advanced options by @abcxff in #5540
- feat(frontend): delete managed pool from compute config page by @abcxff in #5541
- fix(frontend): source actor deployment logs pool from runner_name_selector by @abcxff in #5542
- feat(frontend): remove amp from agentOS agent catalog by @NicholasKissel in #5519
- feat(website): link comparison guides in footer by @NicholasKissel in #5428
- chore: remove hub.rivet.gg references by @NicholasKissel in #5550
- [SLOP(claude-opus-4-8-high)] feat(ups): table-backed postgres transport with coalesced doorbell by @MasterPtato in #5335
- [slopfix] docs(self-hosting): promote postgres from experimental to recommended OSS multi-node backend by @MasterPtato in #5341
- [SLOP(claude-opus-4-8-high)] perf(universaldb): batch leader apply and fold follower commit round-trips by @MasterPtato in #5342
- [slopfix] fix(pegboard): decrement kv_storage_used metric on actor delete by @MasterPtato in #5356
- [slopfix] docs(self-hosting): correct postgres config format and document single vs multi-node nats by @MasterPtato in #5382
- feat(kitchen-sink): add churnDb actor and seed driver for compaction read-hotshard repro by @MasterPtato in #5398
- [slopfix] fix(universaldb,util,pegboard-envoy): index dedup gc, fix fixed-window acquire, refund rate-limit tokens on cancel by @MasterPtato in #5551
- [slopfix] fix(universaldb): match fdb conflict semantics in rocksdb + postgres drivers by @MasterPtato in #5552
- [SLOP(claude-opus-4-8)] fix(kitchen-sink): serve built frontend from server by @MasterPtato in #5306
- [SLOP(claude-opus-4-8-medium)] chore: add profiling cargo profile for heaptrack leak investigation by @MasterPtato in #5314
- Add observation and ser/de metrics for serde calls by @MasterPtato in #5320
- Add observation for serde_bare by @MasterPtato in #5321
- [SLOP(claude-opus-4-8)] feat(rivetkit-core): add serde duration and size metrics by @MasterPtato in #5322
- [SLOP(claude-opus-4-8)] feat(util): add rate limiter primitive and ingress throttles for actor create and gateway websocket by @MasterPtato in #5326
- [SLOP(claude-opus-4-8)] feat(pegboard-envoy): rate-limit envoy ws ingress and cap get_pages, trim unused metrics by @MasterPtato in #5327
- [SLOP(claude-opus-4-8-high)] feat(universaldb): postgres leader-resolver driver overhaul by @MasterPtato in #5329
- [slopfix] test(universaldb): postgres leader failover + abort resolver task on driver drop by @MasterPtato in #5336
- [SLOP(claude-opus-4-8-high)] feat(universaldb): graceful postgres leader handoff on shutdown by @MasterPtato in #5337
- [slopfix] fix(self-host): repair dev compose generation, kitchen-sink serverful runner, and postgres/udb bootstrap by @MasterPtato in #5340
- [slopfix] perf(universaldb): fold postgres drain_batch into claim+nextval and single apply CTE by @MasterPtato in #5353
- [slopfix] refactor(universaldb,ups): single/multi-node udb over nats, remove ups postgres driver by @MasterPtato in #5354
- chore: Clean up by @MasterPtato in #5397
- docs: move public docs into a docs/ bundle for rivet.dev by @NathanFlurry in #5559
- refactor(dashboard): rename instance request concurrency field to Max Actors per Container by @abcxff in #5560
- fix(rivetkit-core): cancel driver alarm before sqlite teardown on destroy by @abcxff in #5530
- feat(container-runner): keep instance warm instead of self-exiting by @abcxff in #5531
- chore(container-runner): default stop grace to 10s by @abcxff in #5533
- feat(container-runner): log unexpected platform SIGTERM as an error by @abcxff in #5536
- feat(container-runner): report actors as crashed on unexpected platform SIGTERM by @abcxff in #5539
- fix(rivetkit): keep actor event loop alive through shutdown state serialization by @abcxff in #5546
- feat(container-runner): log version and git sha at actor start by @abcxff in #5548
- feat(container-runner): setup instance memory and cpu usage logger by @abcxff in #5549
- fix(sdks): drop rivet-util metrics dep from protocol crates to unlink rocksdb by @abcxff in #5558
- fix(rivetkit): log and surface actor startup failures by @abcxff in #5528
- fix(container-runner): read cgroup v1 memory usage under gvisor by @abcxff in #5556
- refactor(integrations): rename vercel-world to workflow-world and align docs with Workflow SDK by @jog1t in #5571
- fix(mcp-hub): load docs metadata from rivet.dev instead of the removed website package by @jog1t in #5574
- fix(frontend): drop dangling public/examples symlink left by website removal by @jog1t in #5575
- fix(frontend): theme xyflow controls so workflow visualizer icons are visible by @jog1t in #5577
- fix(inspector): send workflow history as raw BARE bytes by @jog1t in #5576
- ci(release): migrate npm publishing to oidc by @NathanFlurry in #5597
- fix(release): clear placeholder npm token for oidc by @NathanFlurry in #5598
- ci(release): use node 24 for publishing by @NathanFlurry in #5599
- docs: remediate SEO audit findings by @NicholasKissel in #5606
- fix(rivetkit): unwrap state proxies before persisting to stop exponential proxy nesting by @MasterPtato in #5582
- fix(rivetkit): persist state across development restarts by @NathanFlurry in #5614
- fix(rivetkit): tune legacy runner thresholds in development by @NathanFlurry in #5610
- fix(release): publish engine checksum manifest by @NathanFlurry in #5617
- fix(rivetkit): restore local engine development thresholds by @NathanFlurry in #5618
- feat(rivetkit): expose experimental workflow Inspector transport by @NathanFlurry in #5621
- feat(queues): add durable wait and identity completion primitives by @NathanFlurry in #5622
- fix(rivetkit): keep import.meta out of CommonJS bundles by @NathanFlurry in #5623
- feat(rivetkit): commit actor state with embedded database transactions by @NathanFlurry in #5624
- feat(rivetkit): expose public workflow host APIs by @NathanFlurry in #5625
- feat(metrics): profile local sqlite storage by @NathanFlurry in #5612
Full Changelog: v2.3.9...v2.3.11