.----------------------------------.
/ /|
+----------------------------------+ |
| | |
| .--------------------------. | |
| | DOCUMENTS fts5 | | |
| '--------------------------' | |
| .--------------------------. | |
| | VECTORS soon | | |
| '--------------------------' | |
| .--------------------------. | |
| | GRAPH edges | | |
| '--------------------------' | |
| | |
| hadano.db o | |
+----------------------------------+/
Your AI's memory.
One file. No daemon.
A local knowledge database for AI tools — full-text and graph search in a single SQLite file, served over MCP. It runs on your machine, works offline, and costs nothing to use.
01 / Mechanism
Search in two stages, not one.
Most AI memory tools run a semantic search across the whole database on every query. That's expensive, it's non-deterministic, and it's hard to trace. Hadano finds the document first, then expands only from what it actually found.
query
|
v
+--------------------------+ stage 1 — deterministic
| search_documents | fts5 trigram + bm25
+--------------------------+ no model, no network, no guessing
|
| matched chunks
v
+--------------------------+ the only bridge between stages.
| seed (max 3) | nothing else crosses it.
+--------------------------+
|
v
+--------------------------+ stage 2 — expansion
| search_knowledge | one-hop graph traversal
+--------------------------+ seeded, never global
|
v
source document every result traces back here
Stage 1 is keyword search over SQLite FTS5 with a trigram tokenizer, so Japanese and other CJK text work without a morphological analyzer. Stage 2 is a one-hop graph walk, seeded by at most three chunks that stage 1 actually matched. That cap is the whole design. It's what keeps cost bounded and keeps every result traceable.
What it won't do
- Search the entire database semantically on every query
- Quietly fall back to embeddings when your keywords miss
- Extract entities or invent relations behind your back
- Ask you for a model, a GPU, or an API key before it starts
What you get instead
- The same query returns the same result, every time
- Zero hits means zero hits — and zero hidden cost
- Your client's model does the thinking; the database stays boring
- It works on a laptop, on a plane, or on a $40 single-board computer
02 / Where this fits
A file, not a server.
The AI memory category is mostly made of two shapes: a database engine you run as a server, and a memory service someone else runs for you. Both are good at things this is not good at. The difference worth knowing is the shape, not the feature list.
| A database server | A hosted service | Hadano | |
|---|---|---|---|
| What you run | a process, or their cloud | nothing — it's theirs | a file |
| Resident memory | hundreds of MB | none, locally | 27.4 MB, while querying |
| With no network | sometimes | no | yes |
| Where documents sit | your server, or theirs | theirs | your disk |
| Concurrent writers | many | many | one |
| What you have to learn | a query language, a schema | their API and its limits | nothing — seven tools |
| Moving the whole thing | dump, restore, migrate | export, if offered | copy one file |
Use something else when
- Several people or processes need to write to the same knowledge base at once
- A team needs shared, always-on access today — that is on the roadmap, not shipped
- Procurement requires SOC 2 or ISO 27001 attestations
- Your corpus is larger than the disk of the machine that needs to read it
Those are real requirements, and they are why server databases exist. This is built for the other case: one person, one machine, a knowledge base small enough to hold and important enough to keep.
03 / The file
Everything lives in one file.
There's no server process, no vector service, and no sidecar index. Copy
hadano.db to another machine and you've moved the entire knowledge
base — documents, embeddings, graph, and audit history.
hadano.db | +-- documents ... doc_id, title, body, sha256, created_at +-- chunks ...... 800 codepoints, 100 overlap, deterministic +-- chunks_fts .. FTS5, trigram tokenizer .......... stage 1 +-- vec_chunks .. sqlite-vec vec0, soon ............ stage 2 +-- edges ....... src, rel, dst, doc_id ............ stage 2 +-- audit_log ... request_id, args, rows, duration_ms | '-- WAL, foreign keys on, secure_delete on
Every write carries a request ID, and every tool call lands in
audit_log with its arguments, row count, and duration. You can ask the
database what it was asked to do, and when. Dump the whole thing to JSONL and
restore it into an empty file — one command each way.
04 / Install
Two steps. One dependency.
Not yet published. The package name below is reserved but the release isn't on PyPI, so this is what setup will look like, not a command that works today. The full walkthrough is in get started, and every parameter is in the manual.
# 1. install pip install hadano-ai-cabinet # 2. register it with your MCP client { "mcpServers": { "hadano": { "type": "stdio", "command": "python", "args": ["-m", "hadano.server"], "env": { "HADANO_DB": "~/hadano.db" } } } }
That's the whole setup. No database server to run, no vector service to host, no model to download. It works with Claude Code, Claude Desktop, Cursor, and anything else that speaks MCP over stdio.
The seven tools
| tool | what it does |
|---|---|
| store_document | Save a document, with optional relations |
| search_documents | Stage 1 — find the document |
| search_knowledge | Stage 2 — expand from the seeds |
| query_graph | Walk the relation graph, up to three hops |
| get_document | Read a document back by ID |
| delete_document | Remove it, and everything derived from it |
| db_status | Counts, versions, integrity check |
05 / Measured
Numbers we can show you.
Every figure below comes from the benchmark in the repo, not from an estimate.
The corpus is 50,000 documents, 100,000 chunks, and 100,000 edges, with embeddings
off. python -m hadano.bench reproduces every row, and you'll be able
to run it yourself once the repository is public.
| operation | scale | p95 |
|---|---|---|
| get_document | 50k docs | 0.11 ms |
| search_documents | 100k chunks | 1.79 ms |
| store_document | — | 15.3 ms |
| query_graph | 100k edges | 87.6 ms |
| cold start, integrity check included | 50 MB db | 954 ms |
| idle memory | — | 27.4 MB |
The number worth staring at is the last one. A resident vector service costs you hundreds of megabytes before it answers a single query. This costs 27 MB, and only while a query is actually running.
06 / Pricing
Using it is free. Always.
We don't charge for documents, vectors, edges, searches, MCP calls, or tokens. Your machine does the work, so there's nothing for us to meter. Running it locally is free and stays free. What we'll eventually charge for is running it for you — and even that is a choice, not the default. Where the file sits is a second choice, and it costs the same either way.
Individuals, developers, open source projects, edge devices.
- No feature gates and no document caps
- Full-text and graph search over one file
- MCP stdio for Claude Code, Claude Desktop, and Cursor
- Offline operation, commercial use included
- Local backup, dump and restore
The same database and the same seven tools, running on our server instead of your disk — on your storage or ours, for the same price.
- Reach the same knowledge base from any machine, with nothing to install
- Point it at your own S3 or GCS bucket, or let us hold the file — your call, same price
- What crosses the wire is a result, not a database — kilobytes, not gigabytes
- Local stays free and stays supported; this is an alternative, not a migration
price writer
phase 1 LOCAL hadano.db on your own disk . free 1
|
| same package, same file format, same seven tools
v
phase 2 CLOUD API hadano.db on our server ..... $10 1
|
| swap where the file lives. nothing else changes.
v
phase 3 BYOS hadano.db in your bucket .... $10 1
one writer at every step — so there is no conflict resolution,
no vector clocks, and no sync client for you to install.
phases 2 and 3 are one subscription. which storage it uses is your
call, and the price does not change either way.
Only phase 1 exists today, and it isn't published yet. Phases 2 and 3 are the intended direction, not a commitment to a date. The price shown is planned, in USD, billed up front; the annual plan is one charge for twelve months. There is no introductory rate that expires — what you sign up at is what you keep paying. Whichever storage you pick, the service is provided as is and we do not warrant the contents of your database. Dump and restore exist so that a copy is always yours to take, and keeping one is your job, not ours.
07 / Design
Built to be inspected.
The spec pins down every value range, SQL statement, error code, and acceptance test, with no judgment words anywhere, so someone else can rebuild the same behavior from the document alone. Bugs found in review get written back as regression tests, not just patched.
| artifact | count | note |
|---|---|---|
| tests | 285 | including a real-process MCP round trip |
| recorded decisions | 61 | each with the measurement behind it |
| error codes | 6 | a closed set — new ones are forbidden |
08 / Questions
Frequently asked.
- Does it need an API key, a GPU, or a model download?
- No. Search is keyword matching over SQLite FTS5 plus graph traversal, so the database starts and answers queries with no model present.
- Does my data leave my machine?
- Not when you run it locally, which is the only way it runs today. The local build makes no network calls at all — it reads and writes one SQLite file on your disk and talks to your AI client over stdio. The hosted tier on the roadmap is opt-in and separate; local will not start phoning home because it exists.
- Which MCP clients work with it?
- Any client that speaks MCP over stdio — Claude Code, Claude Desktop, Cursor, and others. Registration is the few lines of JSON shown above.
- How is this different from a vector database?
- A vector database searches embeddings across the whole corpus on every query. Hadano runs deterministic keyword search first, then expands from at most three chunks that keyword search actually matched. Cost stays bounded, and every result traces back to a source document.
- Can several people share one knowledge base?
- Not today. A local database has one writer, and that constraint is what keeps the design small enough to reason about. Shared access is what the hosted tier on the roadmap is for.
- Can it run on a Raspberry Pi?
- Yes. Idle memory is 27.4 MB and there's no daemon, so it runs anywhere Python and SQLite run.
- What happens when I delete a document?
- Its chunks, full-text rows, vectors, and edges go in the same transaction, and
the database runs with
secure_deleteon, so the bytes get overwritten instead of sitting in free pages. - When can I actually install it?
- Not yet. The core is built and tested, and the numbers on this page are real measurements, but the package and the source repository aren't public. This page exists so you can see the design before that happens.
- Is it really free for commercial use?
- Yes. There are no seat counts, no document caps, and no telemetry. The paid tier is the hosted API, and only if you want it. The core is released under the Apache License 2.0, which includes an explicit patent grant.