Sessions & changesets
The SESSION extension records the changes made on a database into a changeset (or patchset), which you can serialize, ship, and replay onto another database — the foundation for offline sync, audit logs, and lightweight replication. SQLITE_ENABLE_SESSION is compiled into the lib; no other pure-Go SQLite driver exposes this.
sc, _ := db.Conn(ctx)sc.Raw(func(dc any) error { c := dc.(*sqlite.Conn) sess, _ := c.CreateSession("main") defer sess.Close() sess.Attach("") // track all tables (or a specific table name)
// ... run INSERT/UPDATE/DELETE on c ...
cs, _ := sess.Changeset() // []byte; or sess.Patchset() // ship cs to a replica, then on the replica's conn: return replicaConn.ApplyChangeset(cs, sqlite.WithConflictHandler(myHandler), sqlite.WithTableFilter(myFilter))})API surface (on *sqlite.Conn): CreateSession → *Session (Attach / Enable / Changeset / Patchset / Diff / Close); ApplyChangeset (with WithConflictHandler / WithTableFilter), InvertChangeset (undo), ConcatChangesets (merge).
Runnable: examples/features/advanced/session/ — record on a primary, replay onto a replica, then undo via InvertChangeset.