v3.0.0 — The SQLite storage backend is removed
Breaking release. SurrealDB has been the production backend since 2.0.0; the SQLite backend was kept only as an internal test fixture, deprecated since 2.21.0. This release removes it entirely.
storage_backend = "sqlite" is now a hard error
Setting it (via config.toml or SURREAL_MEMORY_STORAGE) now raises immediately with the two supported alternatives and a link to the migration guide, instead of silently falling back to something else — a silent fallback here would look exactly like data loss.
Existing SQLite brains at ~/.surrealmemory/brains/*.db are never read, written or deleted by 3.0.0. Installing a 2.x release restores full access to them at any time. See migrating-to-3.0.md to move a brain to SurrealDB, or set SURREAL_MEMORY_STORAGE=memory to try the tool without a database.
What's removed
All 31 storage/sqlite_*.py modules, storage/factory.py (HybridStorage, create_storage — confirmed unused outside tests), storage/read_pool.py and storage/neuron_cache.py — roughly 10,200 lines. InMemoryStorage is now the only non-SurrealDB backend, and now implements the full NeuralStorage interface (previously 64 of 172 methods were inherited stubs, tolerable only because SQLite covered the gap in tests).
Bugs this surfaced and fixed along the way
Migrating tests off SQLite exposed three real gaps in InMemoryStorage that were fixed rather than deferred: get_unprocessed_events was a hardcoded stub returning nothing, find_fibers_batch never applied its limit, and get_alert/get_depth_priors were missing entirely.
Pinning, training dedup and graph density only ever worked on SQLite
Six storage methods lived on SQLiteStorage and were never declared on the NeuralStorage interface. Every caller reached for them through hasattr or a swallowed exception, so on SurrealDB — the production backend — they did nothing at all, and nothing reported it:
- Pinned memories were decayed and pruned.
smem_pinrefused every action — pin, unpin and list.smem trainwas not idempotent — each run re-encoded the whole corpus.activation_strategy="auto"never left classic BFS.
All are now declared on NeuralStorage and implemented on both remaining backends.
Upgrade notes
If storage_backend currently resolves to "sqlite", every command touching storage will fail with a clear message pointing at the two alternatives. See the migration guide — it takes a few minutes and never touches your .db files.