What riverqueue/river shipped
Written by FoxPlug from public releases; not affiliated with Riverqueue. An automatic summary of the public release, pull request and commit data of github.com/riverqueue/river. Riverqueue did not write it and does not use or endorse FoxPlug. Every line links to the public change it describes.
Get a weekly update like this for your product, free
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)