Self-hosted · Private
Your knowledge,
always within reach.
A personal knowledge system that mirrors your Obsidian vault from S3, indexes it with QMD, and exposes a secure web UI for grounded retrieval.
Features
Built for personal, private knowledge work.
Every component runs in your own infrastructure — nothing leaves your network without your intent.
Dual Query Engines
Ask questions against your vault using QMD's fast vector retrieval, or switch to OpenCode-backed grounded answers with your preferred LLM.
Multi-threaded Chat
Every question is a thread. Browse your history from a persistent sidebar, resume conversations, and keep source citations alongside each answer.
Secure by Default
Only the Next.js UI is reachable externally through Cloudflare Tunnel and Access. QMD, OpenCode, and the sync worker are locked to the internal Docker network.
Architecture
From vault to answer, end to end.
Obsidian writes to S3 via Remotely Save. The stack takes it from there — syncing, indexing, and serving — entirely on your hardware.
Obsidian Vault
Remotely SaveAWS S3
read-only bucketsync-worker
every 5 minQMD index
vectors + searchNext.js UI
web appCloudflare
Tunnel + AccessDeployment
One Compose file. Any ARM64 Linux box.
The full stack — sync worker, QMD, OpenCode query service, scheduler, and web app — orchestrated by a single Docker Compose file.
webpublic
qmdinternal
opencode-queryinternal
sync-workerinternal
schedulerinternal
cloudflaredtunnel
Quick Start
# Clone and configure git clone https://github.com/you/lattice cp .env.example .env # Set your S3 bucket, region, and creds # Set CLOUDFLARE_TUNNEL_TOKEN # Create runtime directories mkdir -p /srv/lattice/{vault,qmd,status,logs} # Start the stack make up