What you describe is exactly what SQLite's [WAL mode][1] does, if one does not [*checkpoint*][2] (which is active by default). What's missing is the ability to use that .wal file independently, and *apply* it *manually* to the DB, although [someone managed to do that][3] w/o patching SQLite (AFAIK), by careful use of the official SQLite3 API. The [SQLdiff](https://sqlite.org/sqldiff.html) utility is *static*. You'd need to keep an unchanged copy of your old.db, and diff with the resulting new.db, to obtain SQL text for *logical* changes between the two. While the .wal file records *physical* changes to pages. In any case, your use-case is not quite mainstream, and not directly supported by SQLite I'm afraid. [1]: https://sqlite.org/wal.html [2]: https://sqlite.org/wal.html#checkpointing [3]: https://github.com/benbjohnson/litestream