Hold Off on Litestream 0.5.0
Posted3 months agoActive3 months ago
mtlynch.ioTechstory
calmmixed
Debate
40/100
LitestreamSqliteDatabase Replication
Key topics
Litestream
Sqlite
Database Replication
The author warns against upgrading to Litestream 0.5.0 due to several issues, sparking a discussion about the trade-offs between new features and stability.
Snapshot generated from the HN discussion
Discussion Activity
Moderate engagementFirst comment
48m
Peak period
6
1-2h
Avg / period
2.6
Comment distribution18 data points
Loading chart...
Based on 18 loaded comments
Key moments
- 01Story posted
Oct 14, 2025 at 12:10 PM EDT
3 months ago
Step 01 - 02First comment
Oct 14, 2025 at 12:58 PM EDT
48m after posting
Step 02 - 03Peak activity
6 comments in 1-2h
Hottest window of the conversation
Step 03 - 04Latest activity
Oct 15, 2025 at 4:18 AM EDT
3 months ago
Step 04
Generating AI Summary...
Analyzing up to 500 comments to identify key contributors and discussion patterns
ID: 45581761Type: storyLast synced: 11/20/2025, 12:26:32 PM
Want the full context?
Jump to the original sources
Read the primary article or dive into the live Hacker News thread when you're ready.
https://github.com/benbjohnson/litestream/releases/tag/v0.5....
[0] https://fly.io/blog/litestream-v050-is-here/#the-ltx-file-fo...
Thanks to mtlynch and everyone else who has submitted bug reports. We're squashing issues and working to get everything stable as quickly as possible.
All things considered, this is probably just a tiny footnote in this software's life.
That alone should hint everyone it was a big leap.
https://fly.io/blog/litestream-revamped/#lightweight-read-re...
But the concept is really cool, and it's workable. I already have a version that mostly works.
https://github.com/ncruces/go-sqlite3/tree/litestream/litest...
With Litestream v0.5.0 doing the replication, you'll get some transient read failures that really shouldn't happen.
If you build Litestream from head (or wait for v0.5.1), that'll be fixed. You'll still have similar issues around the time of a snapshot, if you keep only one snapshot.
Other than that, I'm pretty confident it just works. But the performance probably sucks. I need to add a layer of caching. But that's it.
What's in object storage is not an SQLite file, but enough information to restore your SQLite file at various points in time. The way it's stored is optimized for frequent incremental updates and less frequent point restores.
The lightweight read replicas VFS allows you open an SQLite database read-only directly from the data in object storage, without having to first do a point restore, downloading all the data, and creating a local copy of the database.
You “stream” the data directly from object storage as needed, get a consistent view of it, and can query it while the “primary” is concurrently updating it.
It works, but SQLite kinda expects data to be local and low latency, which this might not be.
SQLite has a page cache, which you can use, but everytime there is a write, the entire cache is dropped.
Which means if you poll for updates regularly (which for various reasons you have to) you'll get frequent latency spikes.
One way to improve this is to add a page cache that has an understanding of which pages have changed and which have stayed the same. Prefetching would help to, but SQLite is really unhelpful there.
This is the piece I'm still missing. The rest mostly works already with Litestream v0.5.1.
Rollback mode needs to drop its page cache whenever there is any change to the database, because what changed – and what didn't – is not stored anywhere.
Confusingly, the read-replica VFS needs to pretend the database is in rollback mode even if it isn't. Otherwise, we'd have to fake a database file, a WAL and a WAL index, instead of just a database.
There’s been an official Litestream container image for over 3 years at this point (since version 0.3.4, it’s at the same Docker Hub as 0.5.0).
After your comment, I thought, "Oh, I should contribute a PR to the repo to add the Docker badge so the Docker image is obvious to everyone," but it turns out the badge has been right there for four years.[0]
What I suspect happened is that I tried to use the Litestream Docker image once, discovered that image was amd64-only (until 0.3.9), so I didn't use it because I needed ARM, and then I just kept copy/pasting my workaround from project to project.
[0] https://github.com/benbjohnson/litestream/commit/6acfbcbc64d...
If you're running into it, I'd test again with the latest release (0.5.1) and see if it's still present. If so, I suspect it would get more traction from the dev team if the report was complete, as it's currently missing repro steps and the litestream.yml is not compatible with 0.5.0 (it still has "replicas" plural).
Livestream, sqlite and caddy are incredibly at making single box/vps ops a breeze.