Beyond the Messy Note Pile
Most of us start taking notes in simple apps like Apple Notes or Google Keep. It works perfectly until you hit about 500 notes. Suddenly, finding a specific meeting minute from six months ago feels like a chore. You might try Notion or Obsidian next. Notion is powerful but stays locked in a proprietary cloud, often feeling sluggish on older hardware. Obsidian is great, but syncing across your phone and work laptop usually requires a paid subscription or technical workarounds.
The real issue isn’t where you write; it’s how the data is stored. Most notes are “static text”—dead words on a page. We need our notes to act like “dynamic data.” Imagine a world where your notes automatically build their own task lists or project dashboards. This is the core of a ‘Digital Garden.’ It’s a space where information isn’t just stored; it’s linked and surfaced through automated queries.
SilverBullet bridges this gap. It is an open-source, extensible writing platform that runs in your browser while keeping everything in plain Markdown files. It treats your notes as objects. This means you can query your content using SQL-like syntax. I’ve used this setup for months to manage technical documentation, and it remains snappy even with thousands of files.
Why Choose SilverBullet?
SilverBullet doesn’t treat your notes as isolated documents. Instead, it operates on a concept called “Spaces.” A Space is just a folder of Markdown files, but SilverBullet indexes them in the background. This unlocks features that most editors can’t handle without dozens of unstable plugins:
- Live Query Language: You can write a small block of code to find every note tagged #bug with a status of “open” and display them in a clean table.
- Browser-Based & Portable: It runs in a Docker container. You can access your entire vault from a work laptop, a home PC, or a library computer without installing a thing.
- Mobile Ready: It functions as a Progressive Web App (PWA). You can “install” it on an iPhone or Android device, and it works offline just like a native app.
- Lightweight Footprint: The Docker image is roughly 150MB and typically sips less than 100MB of RAM, making it perfect for a cheap VPS or a Raspberry Pi.
Installation: Deploying with Docker Compose
You’ll need a server or home lab machine with Docker ready to go. We will set up a persistent volume so your data doesn’t vanish when the container restarts.
1. Organize Your Folders
Start by creating a dedicated home for your notes. This keeps your host machine tidy.
mkdir -p ~/homelab/silverbullet/space
cd ~/homelab/silverbullet
2. The Docker Compose Setup
Create a docker-compose.yml file. We’ll use the official image and map a custom port to avoid common conflicts.
services:
silverbullet:
image: zefhemel/silverbullet
container_name: silverbullet
restart: unless-stopped
environment:
- SB_AUTH=admin:your_secure_password
volumes:
- ./space:/space
ports:
- "3005:3000"
Here is what these settings do:
- SB_AUTH: This enables basic login protection. Change
admin:your_secure_passwordto your own credentials immediately. - Volumes: This links the
./spacefolder on your disk to the container. Your Markdown files live here. - Ports: We’re using port
3005because port3000is often hogged by other development tools.
3. Fire It Up
Launch your new garden with one command:
docker compose up -d
Verify that everything is running by checking the status:
docker ps
Configuration: Notes That Think
Log in at http://your-ip:3005. You’ll see a minimalist interface. The real magic happens when you start using Objects and Queries.
Adding Metadata
Add YAML frontmatter to the top of any note. This transforms a plain text file into a searchable data point.
---
tags: project
status: active
priority: 1
owner: "Engineering"
---
# Database Migration
Notes for the Q3 database upgrade.
Using Live Queries
Stop manually updating index pages. If you have 20 different project notes, just drop a query block into your homepage:
<!-- #query page where tags = "project" and status = "active" render [[Library/Core/Query/Table]] -->
| Name | Priority | Owner |
| ---- | -------- | ----- |
| [[Database Migration]] | 1 | Engineering |
<!-- /query -->
The moment you create a new note with the “project” tag, it will pop up in this table automatically. You are no longer managing files; you are managing a living database.
Maintenance and Remote Access
A knowledge base is only useful if it’s safe and accessible. Since SilverBullet uses flat files, your backup strategy is dead simple.
Monitoring Logs
If a query behaves strangely, check the container logs for errors. This is usually where you’ll find permission issues or syntax mistakes.
docker logs -f silverbullet
Reliable Backups
You don’t need complex database exports. Since everything is a .md file, you can just zip the folder or sync it to a private GitHub repo. A 1,000-note vault is usually less than 20MB, making backups nearly instantaneous.
# Quick manual backup
tar -czf sb_backup_$(date +%F).tar.gz ~/homelab/silverbullet/space
Accessing Your Garden from Anywhere
To use your “Second Brain” on the go, use a reverse proxy like Nginx Proxy Manager or a tool like Tailscale. If you go the proxy route, make sure to enable WebSockets. SilverBullet uses them to keep your browser and server perfectly in sync.
By hosting SilverBullet on Docker, you move away from passive note-taking. Your documentation becomes a queryable asset that evolves alongside your work. It’s a stable, fast, and private way to ensure your knowledge remains useful for years to come.

