Profile
Back to NewsBack
GitHub Trending 7 min
Reader Mode
kenn-io/docbank: Local-first system of record for documents (PDFs, images, text files, etc.) for you and your agents

kenn-io/docbank: Local-first system of record for documents (PDFs, images, text files, etc.) for you and your agents

16 hours ago

docbank

Go 1.27+</a> CI</a> Release</a>

Alpha software. Keep your own copies of anything irreplaceable, and
verify a backup before you rely on it.

Agent-native document system of record

Docbank is an open-source document vault for people, applications, and agents. It runs on your own machine. It imports files, email, photos, and recordings, makes their text searchable, and keeps every version you save. When you need to hand records to someone else, it exports the versions you checked.

!The Docbank web application browsing a synthetic vault.

Use it from the command line, a local web app, a terminal browser, or an authenticated HTTP API, or connect an agent with docbank mcp. They all talk to the daemon, a local background process that owns the vault. A Go application can instead embed a vault of its own.

What can I use it for?

| Task | Guide | | --- | --- | | Import and organize records | Importing and tagging | | Find a document | Searching and search by meaning | | Extract a document's text and read it | Document processing | | Read email and follow attachments | Web email reader | | Browse photos and organize albums | Photo assets | | Export documents and search reports | Verified bundles and search reports | | Keep earlier content versions | Editing and versions | | Automate filing and retrieval | Agent integration | | Recover deleted documents | Trash and recovery | | Create and verify backups | Backup and restore | | Keep a permanent record of changes | Audited history | | Add filesystem or S3-compatible storage | Multi-store storage |

Docbank does not synchronize a working folder across devices or create public share links. The capability guide lists what it does today, and the roadmap lists what is planned.

Install

Linux or macOS:

curl -fsSL https://docbank.ai/install.sh | sh

Windows PowerShell:

irm https://docbank.ai/install.ps1 | iex

The installers pick the native Linux, macOS, or Windows archive for amd64 or arm64. They refuse to install an archive whose digest does not match the release's SHA256SUMS. You can also download the archives from GitHub Releases and verify them yourself.

To build from source, install Go 1.27+, CGO, a C compiler, Node 24+, and npm:

git clone https://github.com/kenn-io/docbank.git
cd docbank
make install

The setup guide lists the build requirements for each platform. For a stock image configured through environment settings and mounted secrets, see Run in a container.

Start a vault

The first data command creates the vault and starts its daemon:

docbank document add ~/Documents --dest /archive
docbank document tree /archive
docbank search "tax return"
docbank web

Retrieve a file, list its versions, replace its content, and rename it. Docbank verifies a file before handing it back. Replacing content adds a version and leaves the earlier ones in place, and a rename keeps the document's ID:

docbank document get /archive/Documents/receipt.pdf ./receipt.pdf
docbank document versions list /archive/Documents/receipt.pdf
docbank document put revised-receipt.pdf /archive/Documents/receipt.pdf
docbank document move /archive/Documents/receipt.pdf /archive/Documents/receipt-2026.pdf
docbank vault verify

Create a backup, verify it, and restore it into a separate directory to check:

docbank backup init --repo ~/Backups/docbank
docbank backup create --repo ~/Backups/docbank --tag first-import
docbank backup verify --repo ~/Backups/docbank
docbank backup restore --repo ~/Backups/docbank --target ~/Restores/docbank-test

The ten-minute quickstart covers versions, tags, search, trash, maintenance, and restore.

Who owns the vault and its storage?

  • Standalone. One daemon owns the vault. The CLI, browser, TUI, scripts,
and external agents all go through its authenticated API on the local machine.
  • Embedded. A Go application owns each vault in its own process. Every
vault has its own root directory, and you choose CGO or pure-Go SQLite.
  • Secondary storage. Docbank verifies content in configured filesystem and
S3-compatible stores but does not encrypt it. Restrict those stores to their owner and encrypt them at the storage layer.
  • Backup. Copying the local database and primary blob directory while the
daemon is stopped gives a complete backup only if primary storage has a verified copy of every content file the vault keeps. docbank backup create also includes content held only in secondary stores. See the backup guide for the full rules.

Telemetry

Docbank sends anonymous usage events by default:

  • daemon_active at startup and once per later UTC day while running.
  • app_opened when the web app opens, about once per UTC day per browser and
daemon run.
  • screen_viewed with a fixed screen name, once per vault per UTC day for each interface, browser and terminal, across daemon restarts.
  • session_ended once when a tab closes or stays hidden for 30 minutes, or the
terminal browser exits, with duration grouped into four buckets. Browser visible time adds up across tab switches. Hidden time is excluded. The terminal browser counts the time from opening to exit, including idle time.
  • document_added, search_run, and document_opened after completed document actions, with surface of web, tui, or cli. Searches also carry search_type of text, semantic, or hybrid. PostHog counts these events per day. CLI reports require a terminal on stdin, stdout, or stderr and omit --agent runs; CLI and TUI actions omit runs under CLAUDECODE or CODEX_THREAD_ID.
  • search_empty when a submitted search has no results, with surface and search_type as above. It accompanies search_run, including when the search scope is empty.
  • error_shown when a search, add, or open you ran fails, with surface of web, tui, or cli and kind of search, add, or open. Rejected input counts as a failed search or add like any other failure. A failed search or open counts once, and an upload or photo import run with failed items counts once. Sign-in prompts, cancels, passive loads, refreshes, other drawers and dialogs, notices, and CLI usage errors before connecting stay silent. A Photos open whose detail load fails counts as a failed open. The terminal browser sends document_opened on Enter and sends no error_shown with kind of open for a failed detail load. Other previews or detail loads after opening a document are secondary loads and stay silent. Failed Add re-plans, closed CLI output pipes for add, cat, and search, and an existing destination for get also stay silent. A missing download destination directory, or one that is not a directory, also stays silent.
Asynchronous imports from the CLI or the web mailbox and load-file drawers, and push, send no core actions.

Each event carries a random per-vault install ID, the version and commit, the operating system and architecture, and the distribution channel, such as homebrew. Events never include document content, names, paths, or queries. Set DOCBANK_TELEMETRY_ENABLED=0 or DO_NOT_TRACK=1 to turn telemetry off. See anonymous usage telemetry.

Documentation

Docbank has a sibling, msgvault, which archives communications. Msgvault preserves an immutable record of messages. Docbank manages working documents that people and agents still organize, retrieve, version, and use.

Contributing

Start with the development guide for the repository layout, package ownership, generated clients, and checks. Follow AGENTS.md and the documentation guide when updating code or documentation.

License

Copyright 2026 Kenn Software LLC.

Docbank is licensed under the Apache License, Version 2.0. See NOTICE for attribution information.

Chat with me