Harbor documentation
Harbor is a self-hosted document vault for a household. Learn how to install Harbor, organize household records, and recover from a backup.
Harbor runs as a small stack of containers on one Linux machine, with everything it stores on one encrypted volume. Your household reaches it privately through Tailscale, directly at a domain of your own on the internet, or directly on your own network or a VPN you already run; Tailscale is one option, not a requirement. Paperwork gets in by upload or by email. Harbor extracts searchable text and, with a language model configured, suggests how to organize documents and track their dates. Configure nightly encrypted backups and review the monthly restore-test results in Settings.
Start here#
- Install: choose where Harbor will run, at home, on a cloud server, or on a server you already have, and follow the guide for it.
- First run: create your account, add a test document, and check backups.
Before adding important records, configure Backups and The break-glass envelope.
What you are building#
Outside the house
- Your laptop or phonethrough Tailscale, at your domain, or on your own network
- Your mailboxIMAP, read only
- The model you chosetext of each document
- Your backup targetencrypted snapshots, nightly
The box
- tailscaleoptional: serves the app on your tailnettalks to your laptop or phone
- caddyoptional: serves the app at your domain, over HTTPStalks to your laptop or phone
- webthe appinternal only
- apiHTTP API, sessions, migrationsinternal only
- workerOCR and text extraction; the only process that opens a documentno route out
- suggestertitles, categories, dates, summariestalks to the model you chose
- mailfetchreads connected mailboxestalks to your mailbox
- backupnightly dump and snapshot, monthly restore testtalks to your backup target
- postgres · redisstate and queuesinternal only
/data one encrypted volume: documents, database, queues, secrets
Two of those containers are worth knowing by name. The worker extracts text and creates previews, without direct internet access. The suggester is the one that talks to a language model, and it sends text, never files. The language model says exactly what it sends, and What runs describes every container.
Where these pages come from#
They are written from the repository's own docs: deploy.md, restore.md, and the design spec. When troubleshooting a version-specific issue, use the repository documentation for the release you have installed.