This surprises me. I was under the impression that SQLite backups run inside a dedicated transaction in order to avoid this.

This comment cleared that up for me: VACUUM INTO backups are transactional, but the .backup mechanism is not: https://news.ycombinator.com/item?id=31387556

Ben I suggest updating that cron backups documentation page to recommend VACUUM INTO instead!

Good catch. I went ahead and added an issue on the docs. https://github.com/benbjohnson/litestream.io/issues/56