Migration fatigue, and how LLMs help us avoid it
How we avoided shipping a database migration by using an LLM to turn a slow active job rescue query into a single producer-state pass, producing a ~130x speedup without an index.
River
How we avoided shipping a database migration by using an LLM to turn a slow active job rescue query into a single producer-state pass, producing a ~130x speedup without an index.
River v0.41 adds support for Turso, a ground-up rewrite of SQLite in Rust.
River Pro v0.26 adds active job rescue, which uses queue heartbeats to quickly recover jobs orphaned by crashed clients, no additional schema required.
River v0.41 adds an extensible hook for receiving metrics, starting with job-fetch duration and locked-job counts, and with batteries-included OpenTelemetry support through otelriver.
Go can't kill a stuck goroutine, but River v0.40's new stuck-job handler can expose a goroutine stuck in an indefinite wait, preserve worker capacity, and trigger a restart before stuck jobs exhaust a process.
River has completed its SOC 2 Type II audit, verifying that the security controls protecting hosted Pro customer data operate effectively over time.
Using encrypted jobs and NaCL Secretbox to add a layer of security protecting data even in the worst case scenario of widespread database exfiltration.
River Pro now supports global concurrency limits to precisely control how many jobs can run concurrently across your infrastructure, complete with granular partitioning and operational control through River UI.
Monitor River job insertion and execution with `otelriver`, which emits OpenTelemetry traces and metrics for duration, outcomes, queues, and job kinds.
River Pro Sequences process related jobs one at a time while allowing independent sequences to run in parallel, preventing races without consuming worker slots.
River UI v0.5 ships as an embeddable Go module with bundled frontend assets, letting applications mount the full UI as an `http.Handler` at any path.
River Pro launches with workflows: code-defined job graphs that split complex work into observable, independently retryable tasks with first-class River UI support.
Insert River jobs from Python with synchronous or asyncio clients, SQLAlchemy integration, transactional enqueueing, and type hints, then execute them in Go.
River UI is a self-hosted web interface for River, bringing powerful operational and development tooling to River users. It's freely available as a Docker image, a pre-built static binary, or for bundling into your own application.
River 0.4.0's released, and it contains a few small breaking changes that've been batched together. A list of specific changes, upgrade guide, and a little rationale for why we thought they were justified.