rqlite is a lightweight, open-source, distributed relational database built on SQLite and Raft.
Versions 9.3.5 through 9.3.10 focus on internal correctness and operational robustness, particularly around Raft snapshotting, WAL handling, and testing. These releases also include improvements to logging, the rqlite shell, and routine dependency upgrades, including a new SQLite release.
There are no breaking changes in this series, but several fixes address subtle failure modes that can arise under load or during snapshot persistence.
Snapshot and WAL Reliability
Snapshot Cleanup and Failure Handling
Snapshotting and Log Truncation is the technique Raft uses to ensure its log doesn’t grow without bound. Version 9.3.10 tightens snapshot lifecycle handling. If snapshot persistence fails, or is aborted before it even begins, any temporary WAL files are now reliably cleaned up. This avoids orphaned files and reduces the risk of unexpected disk usage growth over time.
Related changes improve logging around Raft snapshot creation making it easier to understand what the system is doing during snapshotting, especially when operations are cancelled or interrupted.
WAL Checkpointing and Truncation
Version 9.3.9 improves handling of WAL checkpoint failures. These changes strengthen rqlite’s behaviour when the underlying SQLite WAL cannot be checkpointed as expected, a situation that may arise if certain types of queries are in progress at the time of the checkpoint.
Logging and Error Reporting
Several releases improve logging clarity and structure:
- Snapshot logging was enhanced in 9.3.7 and further refined in later versions.
- Snapshot sink logging now records ownership details when taking synchronization locks. This helps with debugging and operations.
Together, these changes make diagnosing snapshot-related and concurrency issues more straightforward in production environments.
Shell and User-Facing Improvements
rqlite Shell Testing and Fixes
Versions 9.3.6 and 9.3.5 add basic end-to-end testing of the rqlite shell and fix the .restore command, which previously regressed in a released version. These tests help ensure that the shell remains fully functional in every release.
Deterministic .tables Output
Version 9.3.10 updates the .tables shell command to output table names in alphabetical order.
SQL and API Enhancements
Version 9.3.9 adds QueryWithContext() to the DB layer, allowing callers to propagate cancellation and timeouts more precisely. This is an internal API improvement that enables better control over long-running queries.
Additional unit tests related to foreign key control were added in 9.3.6, improving coverage around constraint handling.
Dependency and Platform Updates
- SQLite was upgraded to version 3.51.1 in 9.3.7.
- rqlite moved to Go 1.25.5 in 9.3.6.
- Dependencies were refreshed again in 9.3.8.
These updates keep rqlite aligned with upstream fixes, performance improvements, and security patches.
For full details, see the CHANGELOG. To discuss these releases or ask questions, join the rqlite Slack channel.