Python LLM agent with long-term memory
shippedPython 3.11+
A CLI chat agent whose entire long-term memory is one local .sqlrite file. Embeds each turn, hybrid-searches messages + summaries + a structured facts table on every recall, and persists across process restarts. No Postgres, no Redis, no Pinecone — just one file.
- Vector KNN over past turns via HNSW, plus BM25 keyword recall via fts_match / bm25_score
- Heuristic fact extraction into a (subject, predicate, object) table — surfaced via plain SQL
- Zero-config first-run with a hash embedder + offline echo agent; swap in OpenAI / sentence-transformers / Anthropic via CLI flags
- 31 offline tests; runs end-to-end without an API key
HNSWVECTOR(384)BM25 / FTSPyO3 SDK
Chat with your notes — Claude Desktop + MCP
shippedNode.js 20+
A Node.js CLI that ingests a folder of markdown notes into a SQLRite database, then exposes it to Claude Desktop (or any MCP client) via sqlrite-mcp --read-only. Claude calls bm25_search / vector_search / query directly against your local notes — no cloud sync, no custom RAG pipeline.
- Markdown → frontmatter-aware chunker → hash or OpenAI embedder → SQLRite documents + chunks tables
- Hybrid retrieval fuses BM25 and vector cosine in a single SQL ORDER BY (see docs/fts.md)
- `sqlrite-notes serve` wraps sqlrite-mcp so the Claude Desktop config snippet is one block of JSON
- Default embedder is fully offline (zero-dep hash bag-of-words); flip to text-embedding-3-small with OPENAI_API_KEY
- 40 unit + integration tests; works against the prebuilt @joaoh82/sqlrite npm binaries
HNSWBM25 / FTSMCP servernapi-rs SDK
Local-first journaling — Tauri 2 + Svelte 5
shippedRust + Svelte 5
A markdown daily-notes desktop app whose entire data layer is one .sqlrite file you can copy between machines, back up with rsync, or open in the SQLRite REPL. Phase 8 BM25 full-text search with hit highlighting, click-to-filter tags, and an 'ask my journal' panel that turns natural language into read-only SQL against your own entries.

- Tauri 2 backend owns an Arc<Mutex<Connection>> in tauri::State — commands serialise through one engine handle, no torn writes
- BM25 full-text search over entry content with token-boundary-aware <mark> highlighting on the Svelte side
- 'Ask my journal' panel calls Connection::ask, validates the returned SQL is SELECT/WITH-only, and shows you both the SQL and the rows — API key never crosses into the webview
- Export options: copy the .sqlrite file as-is, or dump every entry as YAML-frontmatter markdown into a folder
- Locked-down Tauri capabilities (core window + dialog only — no fs / shell / http)
Connection APIBM25 / FTSaskTauri 2
Browser SQL playground — WebAssembly
shippedWebAssembly
The full SQLRite engine compiled to WebAssembly, running entirely in a browser tab — no server, no install, no account. Type SQL, hit Run, see results. Load a Pokémon / Northwind / movies-with-embeddings dataset in one click, then poke at JOINs, GROUP BY, and HNSW cosine vector search right on the page.
- Same sqlrite-engine crate as every other SDK, built for wasm32 via @joaoh82/sqlrite-wasm (~750 KB gzipped, fetched once)
- CodeMirror 6 editor with SQL highlighting + Cmd/Ctrl+Enter; results grid with column types, NULL highlighting, and CSV export
- Vector-search demo dataset: 12 films with 4-dim embeddings + an HNSW index, ranked by vec_distance_cosine in the browser
- Session persists to OPFS (localStorage fallback) via SQL-script replay; share a query by URL hash; download / upload .sql
- Hosted on this site — open it live, no clone required
WASM SDKHNSWCodeMirror 6OPFS
Edge / IoT event collector — Go
shippedGo 1.21+
A Go service that buffers telemetry from many concurrent HTTP producers into a local .sqlrite file, while a background uploader goroutine drains it to a remote sink — both writing the same database at once via BEGIN CONCURRENT (Phase 11 MVCC). The .sqlrite file is the durable buffer between an unreliable network and the upstream system: it survives reboots and stays queryable with SQL on-device.
- HTTP write path and uploader each hold their own BEGIN CONCURRENT transaction against one engine via the Go driver's sibling-handle registry — multi-writer concurrency a single-writer DB can't express
- Row-level conflict detection + the canonical retry-on-ErrBusy loop; zero dropped events under 32 concurrent producers (verified by the load generator)
- Honest, measured throughput: on v0 BEGIN CONCURRENT is ~0.9× a single mutex (the win is capability + correctness, not raw speed) — the README ships all three measurement tables and explains why
- Documents the v0 engine sharp edges it designs around: no param binding, 4 KiB MVCC commit cap, app-assigned ids under MVCC, reopen detection without a queryable catalog
- Backpressure (503) + /healthz + /stats; Dockerfile + compose with an optional read-only sqlrite-mcp sidecar; Linux + macOS CI against the in-repo engine
Go SDK (cgo)BEGIN CONCURRENTMVCCsqlrite-ffi