Limitations
Honest boundaries of Wolbarg 0.6 — peers, PDF quality, SQLite, Postgres SSL/pool, fail-closed hybrid/rerank, and removed graph memory.
Maturity
Core remember / recall (semantic + hybrid + metadata filters) on SQLite and PostgreSQL is the most battle-tested path. Document ingest, OCR/vision, and LLM compression are supported but depend on optional packages and external services where noted.
Experimental (may change before 1.0): rememberFromMessages() (especially mode: "extract") and subscribe(). Pin your wolbarg version if you depend on these shapes. Extract-mode quality is owned by your LLM.
For Vercel AI apps, prefer the stable middleware path in @wolbarg/vercel-ai (AI SDK v7+) rather than hand-rolling recall/remember around generateText. Mid-stream cancel before the model finish event does not remember incomplete turns.
Ingest dependencies
npm install pdf-parse@1.1.4 # PDF
npm install mammoth # DOCX
npm install tesseract.js # OCR
npm install pg # PostgreSQL storage- .txt / .md / .csv / .json — built-in
- .pdf —
pdf-parserequired; text-layer only unless OCR/vision on images - .docx —
mammothrequired - images — configure
ocrand/orvision
See Installation.
PDF extraction
- Scan / camera PDFs with no text layer yield empty extract
- Prefer simple text PDFs or pin
pdf-parse@1.1.4
SQLite
- Uses Node
node:sqlite— Node 22.5+ - Hybrid BM25 uses FTS5 when available
subscribe()on SQLite is in-process only (same Node process)- Export / checkpoint / import / rollback are whole-file and refuse multi-org files — prefer one file per organization
- Under extreme lock contention, callers must handle
StorageLockedError— see Concurrency
PostgreSQL
- Requires
pg pgvectoroptional; otherwise BYTEA + in-process cosine- Remote hosts default to
sslmode=requirewhen unset; loopback is unchanged - Default pool
maxPoolSizeis 20 - Optional
schemanamespacing for tables, indexes, and NOTIFY channels - Checkpoint / export / import require file-backed SQLite, not Postgres
See Production.
Hybrid search and rerank (fail-closed)
Since 0.6.0, there is no silent degradation:
| Flag | Missing provider | Provider failure |
|---|---|---|
hybrid: true | ValidationError | throws (no semantic-only fallback) |
rerank: true | ValidationError | RerankError from built-in adapters |
Configure keywordSearch: bm25() (or a custom provider) before enabling hybrid. Catch RerankError explicitly — there is no identity-order fallback.
Graph memory
Removed in 0.6.0. sqliteGraph, neo4jGraph, linkMemories, getRelated, and includeGraph are gone from core. There is no neo4j-driver peer. Model relationships with metadata filters or an external store. See Graph memory (removed) and Migration.
Telemetry
- Telemetry database is SQLite only today (Postgres is typed but not implemented)
captureQueriesdefaults tofalse(privacy)
See Observability.
Embedding cache
- On Postgres, durable cache defaults off (L1-only) unless configured otherwise — Embedding cache
Optional providers
compress()needsllm— otherwiseProviderNotConfiguredErrorhybrid: true/rerank: truerequire their providers — see fail-closed table above
Out of scope
- No hosted cloud control plane
- No built-in agent framework / chat UI
- No application authentication / authorization (
organizationis a namespace, not IAM) - No graph memory APIs (removed in 0.6.0)
- No multi-process SQLite
subscribe() - No Postgres telemetry store
- No general memory TTL or cost-accounting APIs yet