What riverqueue/river shipped
Written by FoxPlug from the repository's own releases; not affiliated with Riverqueue. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/riverqueue/river; Riverqueue did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of October 5, 2026
What shipped
- Added a Java implementation of River. Pull request #1424
- Brought the Ruby client code into the main repository instead of its separate one. Pull request #1463
- Added River for JavaScript and TypeScript, a client that can run workers and take part in maintenance rather than only inserting jobs. Pull request #1443
- Added a Ruby equivalent of the Go WorkFunc so workers can be registered with a kind and a closure. Pull request #1486
- Released the first version of River for Rust, a typed Tokio-based client for Postgres through SQLx and SQLite sharing River's schema and job protocol. Release
- Fixed worker registration so a later alias collision leaves the registry unchanged. Pull request #1440
- Made port conformance fixtures generated from River's Go implementation, covering unique key hashes, state bitmasks, cron times, snooze counts, job state bits, retry delay bounds and notification payloads. Pull request #1451
- Brought the TypeScript conformance suite in line with the more exhaustive Rust one. Pull request #1460
- Changed the JavaScript license from LGPL-3.0-or-later to MPL-2.0 to match other languages. Pull request #1465
- Renamed Rust WorkerRegistry to Workers and register to add and
register_fntoadd_fnto match Go naming. Pull request #1469
Why it matters
This week adds two new language ports, Java and a full JavaScript and TypeScript client that can run workers, not just insert jobs, alongside Ruby and Rust. It also brings Ruby into the main repository and releases early versions of Rust and JavaScript. Runner registration, conformance fixtures and naming are converging across languages so a job inserted by one client can be worked by another in the same database.
Changelog entry
- Added a Java implementation of River. Pull request #1424
- Brought Ruby into the main repository from its separate repo. Pull request #1463
- Added River for JavaScript and TypeScript with worker support, job listing and cancellation, and maintenance. Pull request #1443
- Added a Ruby equivalent of Go's WorkFunc so workers can be registered with a kind and closure. Pull request #1486
- Released River for Rust v0.1.0, a typed Tokio-based client for Postgres through SQLx and SQLite. Release
- Released Rust v0.2.0, renaming
start_with_graceful_shutdowntostart_with_graceful_stop. Release - Released Rust v0.3.0, renaming WorkerRegistry to Workers, register to add, and
register_fntoadd_fn. Release - Released js/v0.2.0, the initial release of the fully functional JavaScript client. Release
- Released ruby/v0.13.0 with expanded conformance checks, CRON_TZ and TZ prefixes, wildcards and new source locations. Release
- Fixed worker registry staying unchanged on alias collision. Pull request #1440
- Changed the JavaScript license from LGPL-3.0-or-later to MPL-2.0. Pull request #1465
- Generated port conformance fixtures from River's Go implementation. Pull request #1451
River now has Java and a full JavaScript/TypeScript client that can run workers, not just insert jobs. Ruby moved into the main repo, Rust shipped its first release, and conformance fixtures now come from the Go implementation.
River grew this week: Java joins the language ports, and JavaScript/TypeScript now has a fully functional client that can run workers, list and cancel jobs, and take part in maintenance instead of only inserting jobs. Ruby moved into the main repository, and Rust shipped its first release, a typed Tokio-based client for Postgres through SQLx and SQLite that shares River's schema and job protocol. Conformance fixtures are now generated from River's Go implementation and cover cron schedules, snooze counters, state bitmasks, retry delay bounds and notification payloads, with TypeScript brought up to the Rust suite's coverage. Registration naming and license terms are also aligning across languages.
Week of September 28, 2026
What shipped
- River v0.48.0 released with database migration version 8 for SQLite, adding AUTOINCREMENT to primary keys to prevent edge case ID conflicts. Release
- SQLite primary keys now use AUTOINCREMENT to prevent ID collision when rows are deleted and new rows are inserted. Pull request #1390
- Fixed unique skip rewriting existing job kind under ExcludeKind, where jobs of different kinds can now properly share a unique key. Pull request #1421
- Fixed SQLite cleanup queue filtering that could stop permanently when excluded queues occupied the oldest batch. Pull request #1417
- Fixed UniqueOpts.ExcludeKind being silently ignored by isEmpty(), which now properly accounts for all unique options. Pull request #1404
- Fixed JobCancel returning stale pre-cancel state to the loser of concurrent cancel races. Pull request #1409
- Fixed JobRetry returning stale row to the loser of concurrent retry races. Pull request #1410
- Fixed SQLite batch unique-key handling where duplicate unique keys in a batch would incorrectly report multiple insertions. Pull request #1399
- Added client option FetchOnlyKnownKinds to fetch only job kinds registered with the client. Pull request #1396
- Added support for Yugabyte as a Postgres-compatible database target. Pull request #1347
Why it matters
V0.48.0 addresses several database correctness issues across SQLite and Postgres, fixes concurrent operation race conditions, and improves unique constraint handling. SQLite users need the migration to prevent ID collision edge cases. The release also adds Yugabyte support for users targeting that database.
Changelog entry
- Database migration version 8 for SQLite adds AUTOINCREMENT to
river_jobprimary key, preventing ID collision edge case Release - Fixed unique skip rewriting existing job kind under ExcludeKind Pull request #1421
- Fixed SQLite cleanup queue filtering stopping permanently when excluded queues occupy oldest batch Pull request #1417
- Fixed UniqueOpts.ExcludeKind being silently ignored by isEmpty() Pull request #1404
- Fixed JobCancel returning stale pre-cancel state in concurrent cancel races Pull request #1409
- Fixed JobRetry returning stale row in concurrent retry races Pull request #1410
- Fixed SQLite batch unique-key handling for duplicate keys in single batch Pull request #1399
- Fixed retry delay calculation to prevent float overflow on 310th+ error Pull request #1402
- Fixed job list cursor decoding to handle URL-safe base64 characters Pull request #1388
- Added FetchOnlyKnownKinds client option to fetch only registered job kinds Pull request #1396
- Added Yugabyte support as Postgres-compatible target Pull request #1347
- River v0.48.0 compatible with River Pro v0.31.0 Pull request #1416
River v0.48.0 is out. SQLite migration adds AUTOINCREMENT, concurrent cancel/retry races fixed, unique constraint handling improved, and Yugabyte support added.
River v0.48.0 released with important correctness fixes for SQLite and Postgres. SQLite gets AUTOINCREMENT to prevent ID collisions, concurrent cancel and retry operations now return correct job state, unique constraint handling improved, and Yugabyte is now supported as a Postgres-compatible target.
Week of September 21, 2026
What shipped
- Fixed a race condition where cancellations arriving between job claim and executor registration would be dropped, allowing jobs to run with uncancelled contexts. Pull request #1397
- SQLite now writes cancellation notifications to the outbox when cancelling running jobs, ensuring workers receive cancellation signals. Pull request #1398
- Fixed unique-by-args job deduplication to correctly handle JSON keys containing dots and other special characters. Pull request #1387
- Fixed UniqueOpts.ByPeriod to bucket scheduled jobs by their run time rather than insertion time, preventing duplicate jobs in the same period. Pull request #1377
- SQLite job cleaner now respects keep-forever retention settings (-1) and no longer deletes jobs configured to be kept indefinitely. Pull request #1389
- Fixed stuck job detection to log the worker-level timeout value instead of the client-level timeout when reporting jobs appear stuck. Pull request #1394
- Job rescue now guards against stale snapshots by verifying jobs remain in running state before applying rescue updates. Pull request #1373
- Improved job list query performance by restoring proper index usage when filtering finalized jobs. Pull request #1374
- Added LeaderElectionDisabled configuration option to prevent clients from participating in leader election and running maintenance services. Pull request #1382
- SQLite
river_notificationnow uses per-topic subscription cursors to avoid replaying old notifications after resubscription. Pull request #1381
Why it matters
This week addresses critical issues with job cancellation, unique job deduplication, and retention policies that could silently cause incorrect behavior. The fixes span both PostgreSQL and SQLite, with several addressing race conditions and edge cases that affect production reliability.
Changelog entry
- SQLite JobCancel now writes control notifications to the outbox in the same transaction as job updates to ensure workers receive cancellation signals Pull request #1398
- Fixed race condition where cancellations arriving between job claim and executor registration would be dropped Pull request #1397
- Stuck job detection now logs the worker-level timeout value instead of the client-level timeout Pull request #1394
- UniqueOpts.ByArgs now correctly handles JSON keys containing dots and other special characters Pull request #1387
- SQLite job cleaner now respects keep-forever retention settings (-1) for finalized states Pull request #1389
- Added LeaderElectionDisabled configuration option to prevent leader election participation and maintenance service execution Pull request #1382
- UniqueOpts.ByPeriod now buckets scheduled jobs by their run time instead of insertion time Pull request #1377
- Job rescue now verifies jobs remain in running state before applying updates to guard against stale snapshots Pull request #1373
- Improved job list query performance by restoring proper index usage when filtering finalized jobs Pull request #1374
River update: fixed cancellation race conditions, unique-by-args with special characters, scheduled job deduplication, keep-forever retention on SQLite, and stuck job logging accuracy.
New River updates improve reliability across job cancellation, deduplication, and retention. Fixed a race condition where cancellations could be dropped before workers were notified, corrected unique-by-args to handle special JSON key characters, and resolved scheduled job bucketing to prevent duplicates. Also improved SQLite's keep-forever retention handling, stuck job timeout reporting, and job list query performance.
More from riverqueue/river on GitHub
Merged pull requests
- Use bundled PostgreSQL for CLI CI (#1392, merged September 26, 2026 by bgentry) (source)
- Honor keep-forever retention in the SQLite job cleaner (#1389, merged September 25, 2026 by bgentry) (source)
- A few
river_notificationimprovements for SQLite (#1381, merged September 25, 2026 by brandur) (source) - Add configuration
LeaderElectionDisabled(#1382, merged September 25, 2026 by brandur) (source) - Avoid retries in subscription example (#1385, merged September 25, 2026 by bgentry) (source)
- Derive unique periods from UTC scheduled time (#1377, merged September 24, 2026 by bgentry) (source)
- Guard job rescue against stale snapshots (#1373, merged September 22, 2026 by bgentry) (source)
- Fix job list performance and SQLite pagination (#1374, merged September 22, 2026 by bgentry) (source)
- Prepare release v0.47.0 (#1370, merged August 31, 2026 by brandur) (source)
- Add hook to support Pro SQLite driver (#1369, merged August 31, 2026 by brandur) (source)
- Prepare release v0.46.0 (#1367, merged August 29, 2026 by brandur) (source)
- Add back more non-listener coverage for
riverdatabasesql(#1368, merged August 29, 2026 by brandur) (source)