April 24, 2021·4 min read·engineeringrqlitesqliteraftdependencies

rqlite 5.12 updates both its SQL engine and consensus library

The April release embeds SQLite 3.35.4 and Hashicorp Raft 1.3.0. Those version choices affect different layers and need separate explanations.

A replicated SQL service has more than one implementation version that matters. The April 24 release of rqlite 5.12.0 upgrades its embedded SQLite engine to 3.35.4. Its tagged changelog also records dependency updates including Hashicorp Raft 1.3.0. One version identifies the engine compiling and executing SQL. The other identifies the consensus library coordinating replicated state.

The short release announcement leads with SQLite. That is reasonable for users interested in SQL capability, but it should not collapse the rest of the service into an engine version. rqlite's HTTP protocol and replication behavior remain additional layers around SQLite. An engine feature becoming available in the embedded library does not, by itself, define how every client should consume it.

I value rqlite for adding replication around a familiar relational engine. The separation makes dependency upgrades readable, provided each claim stays with the component that supplies it. This release is a useful example because both SQL execution and consensus dependencies change together.

The engine receives the March SQL additions

The SQLite 3.35.4 release notes carry the feature set introduced in 3.35.0. It includes ALTER TABLE DROP COLUMN, expanded UPSERT syntax, and RETURNING for inserts, updates, and deletes. Those are engine capabilities in the embedded version chosen by rqlite 5.12.0.

The same notes distinguish those additions from maintenance work within the 3.35 family. Version 3.35.4 fixes a problem in the EXISTS optimization and defects in RETURNING. It also corrects handling of an unknown table referenced by a returning term, making that situation raise an error instead of being silently ignored. Those corrections help explain why an exact patch version belongs in the release description.

The engine notes also list built-in mathematical functions, but they require a compile-time option. Their presence cannot be inferred solely from the number 3.35.4. A service that embeds SQLite still chooses a build configuration. This is another reason to distinguish the embedded version from an unconditional promise that every optional capability is enabled.

For application authors, the immediate value is a specific engine baseline. It gives a source against which SQL semantics and fixes can be examined. It does not remove the need to understand the service endpoint used for a statement, particularly when a write can produce result rows through newer SQL syntax.

The chosen patch version has a limit

SQLite had already published 3.35.5 on April 19. That patch fixes DROP COLUMN defects that could corrupt a database file, as well as an obscure incorrect-result problem in the optimizer. The rqlite announcement explicitly names 3.35.4, so those later engine fixes should not be attributed to this service release.

This is a contemporaneous distinction, not hindsight. Both engine releases precede April 24. A dependency update can introduce a feature family while still selecting a patch level that lacks a newer correction. Describing the rqlite release as simply supporting the latest SQLite behavior would be inaccurate.

That matters most for a migration using the newly available column-removal operation. The existence of the SQL syntax and the presence of a particular corruption fix are separate facts. The rqlite release statement establishes the former engine baseline. SQLite's own patch notes establish the additional work in 3.35.5.

I prefer stating that boundary directly instead of treating every dependency bump as an unqualified recommendation to adopt every newly reachable feature. The service release is useful, but its exact embedded version remains relevant to which database operations an application chooses to use.

Raft and the SQLite driver have their own versions

The go.mod file in the release tag pins Hashicorp Raft at 1.3.0 and the rqlite SQLite driver at 1.20.2. These numbers belong to different projects. The driver's module version is not another spelling of SQLite's C engine version.

The changelog presents the Raft update as part of dependency maintenance. It does not claim a new rqlite consistency level or a new cluster protocol in 5.12.0. Attributing either behavior to the dependency number alone would require evidence the release does not supply. The confirmed change is the library baseline used to implement the existing service.

Earlier April entries in the same tagged changelog record a GZIP-writer fix and a join dialer's local-address option. They remain separate releases in the cumulative history. Version 5.12.0's own entries concern the SQLite and dependency upgrades, so a description should not present all April maintenance as new in this one release.

The result is a concrete component baseline for the service. SQL behavior comes from SQLite 3.35.4 and its selected build. Consensus uses the pinned Raft dependency. The surrounding HTTP and database-driver layers remain part of how applications reach that engine, while SQLite's April 19 fixes remain outside the engine version explicitly named by rqlite 5.12.0.