DN

Dnote

Simple command-line notebook with multi-device sync

Notes & Knowledge Base ★ 3.1k stars Easy setup AGPL-3.0

Dnote is an open-source, simple command-line notebook for programmers and terminal users. It captures quick notes without breaking focus and can sync through a self-hostable server.

Key features

  • Command-line note capture
  • Self-hostable sync server
  • Browser extension
  • Spaced-repetition digests

Pros & cons

Strengths

  • Stays out of the way for developers
  • Quick capture from terminal

Trade-offs

  • Terminal-first workflow
  • Limited rich formatting

Dnote replaces

Last reviewed Sep 13, 2026 · 829 words

dnote add docker "docker system prune -af --volumes wipes build cache too, run before disk fills"

That is the entire interaction model. Dnote is a command-line notebook where a note is one thought filed into a "book", written without leaving the terminal you are already in, and the self-hostable server exists so the same notes appear on your laptop, your desktop and the browser extension. It is for engineers who lose things they learned at 16:40 on a Tuesday. It is not a knowledge base, a markdown editor, or a Joplin replacement, and the 3,079 stars belong to people who wanted precisely that narrowness.

The workflow, and where the server fits

Locally, the CLI keeps notes in a SQLite file under ~/.dnote. dnote view lists books, dnote view docker lists notes in one, dnote find prune searches across all of them, and dnote edit and dnote remove do what they say. Notes are plain text with markdown that the web UI renders. The sync command talks to a server, and that server is the piece you self-host:

services:
  dnote:
    image: dnote/dnote:latest
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - OnPremise=true
      - DBHost=postgres
      - DBPort=5432
      - DBName=dnote
      - DBUser=dnote
      - DBPassword=change-me
      - WebURL=https://notes.example.com
      - SmtpHost=smtp.example.com
      - SmtpPort=587
      - [email protected]
      - SmtpPassword=change-me
    depends_on:
      - postgres
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      - POSTGRES_DB=dnote
      - POSTGRES_USER=dnote
      - POSTGRES_PASSWORD=change-me
    volumes:
      - ./pgdata:/var/lib/postgresql/data

Behind a reverse proxy with TLS, create an account through the web UI, then on each machine dnote login with the API endpoint pointed at your server, and dnote sync. The 128 MB minimum is accurate for the Go server; Postgres is the bigger of the two. The SMTP settings are optional, but they enable the one feature that separates Dnote from grep ~/notes.

Spaced repetition is the reason to run the server

Dnote's digests email you a selection of old notes on a schedule you set, drawn from the books you choose, on the theory that a note you wrote 4 months ago about a shell flag is only valuable if you get reminded it exists. For a working developer that is a surprisingly effective way to turn a pile of fragments into things you actually remember. Without the server there is no digest, and without SMTP there is no digest; both are worth the 10 minutes.

What a self-hoster pairs it with

Dnote is the capture layer, not the archive. The realistic stack is Dnote for the terminal-shaped fragments (a flag, an error message and its fix, the one-liner you keep re-deriving), and a proper notes app for everything with structure. Joplin or Memos take the longer material; the notes category covers the field. The browser extension gives you the same quick-add from a web page, which is where half of the fragments come from.

Because notes are plain text in SQLite on the client, getting them out is trivial: the local file is a complete copy, readable with any SQLite tool, and if the server disappears you have lost nothing. That is the correct shape for a tool you want to trust for years.

The honest state of the project

Development is quiet. The CLI and server are stable and do what they did; new features are rare and issues sit. The AGPL-3.0 licence means anyone forking it to sell has to publish, which for a personal tool is irrelevant. I would not choose Dnote expecting a roadmap. I would choose it because it is finished, small, and does not need one, and because a dnote add habit costs 3 seconds where opening a notes app costs 30 and often does not happen.

Where it is the wrong pick

If you write long notes with images, use Joplin. If you want web-first quick capture with a mobile app, Memos is closer. If you are not living in a terminal most of the day, the entire premise is missing and any of the apps in notes apps you own will serve you better. And if you want your notes on a phone, Dnote's answer is the web UI in a browser, which is workable but not something it was designed around.

What I'd do

Install the CLI on every machine you type on, run the server in Docker next to your other services with SMTP configured, and turn on a weekly digest from your two or three most-used books. Keep your structured notes elsewhere. Give it 2 weeks; the test is whether you find yourself typing dnote add without thinking. If you do, you have a tool you will use for a decade. If you do not, uninstall it with no regret, since the whole thing cost 128 MB and a Postgres database.

Compare Dnote

21 head-to-head comparisons.

Similar notes & knowledge base apps