Joplin

Open-source note-taking and to-do app with sync

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

Joplin is an open-source note-taking and to-do application with Markdown editing, web clipper, and end-to-end encrypted sync. It targets individuals who want private, portable notes across devices. It can sync via a self-hosted Joplin Server, Nextcloud, or WebDAV.

Joplin setup guides & articles

Hands-on coverage of Joplin from the blog.

Key features

  • Markdown notes and to-dos
  • End-to-end encrypted sync
  • Web clipper extension
  • Apps on every platform

Pros & cons

Strengths

  • Strong privacy with E2EE
  • Flexible sync options
  • Active development

Trade-offs

  • Sync server setup optional but extra
  • Editor less polished than rivals

Joplin replaces

Last reviewed Aug 26, 2026 · 854 words

Most people who "self-host Joplin" never run Joplin Server, and they are right not to. Joplin is local-first: every note lives in a SQLite database on each device, and the sync target is a dumb store the apps push to and pull from. If you already run Nextcloud or any WebDAV share, point Joplin at it and you are syncing in 2 minutes. Joplin Server is worth its extra container for two reasons only: much faster sync on notebooks with thousands of notes, and the ability to share notebooks or publish a note to a public link. Decide which camp you are in first; the rest of the setup follows from it.

Pick the sync target before anything else

TargetSetup timeLarge notebooksSharingE2EE
Nextcloud / WebDAV2 minSlow; 1 request per itemNoYes
Joplin Server15 min plus PostgresFastNotebooks and public linksYes
S3 / MinIO5 minFastNoYes
File system + Syncthing5 minFastNoYes, but conflict-prone

WebDAV is the sane default for one person with a few hundred notes. It is also the one that grinds: the protocol has no batch operations, so a first sync of 5,000 notes is 5,000 round trips, and a mobile sync over a slow link can run for minutes. S3 against a MinIO bucket you already run is a good middle path. The file-system target pointed at a Syncthing folder works until two devices write at once; the Joplin maintainers warn against it, and I agree.

Joplin Server in 25 lines

The server needs Postgres. The SQLite mode exists, but the project calls it a testing option, and I would take that at face value.

services:
  db:
    image: postgres:16
    environment:
      - POSTGRES_USER=joplin
      - POSTGRES_PASSWORD=change-me
      - POSTGRES_DB=joplin
    volumes:
      - ./pg:/var/lib/postgresql/data
    restart: unless-stopped
  joplin:
    image: joplin/server:latest
    depends_on:
      - db
    ports:
      - "22300:22300"
    environment:
      - APP_PORT=22300
      - APP_BASE_URL=https://notes.example.com
      - DB_CLIENT=pg
      - POSTGRES_HOST=db
      - POSTGRES_PORT=5432
      - POSTGRES_USER=joplin
      - POSTGRES_PASSWORD=change-me
      - POSTGRES_DATABASE=joplin
    restart: unless-stopped

Put a TLS reverse proxy in front, open the base URL, and log in as admin@localhost with password admin. Change both before you do anything else, then create a normal user for yourself and use that account in the apps. APP_BASE_URL has to match the public URL character for character, or published-note links and the mobile app's redirects point at the wrong place. In each desktop or mobile app, set the synchronisation target to "Joplin Server", enter the URL and the normal user's credentials, and sync. The 256 MB RAM figure in the catalogue is realistic for the server itself; Postgres wants another 100 MB or so.

Turn on end-to-end encryption on the first device, before the first sync

Configuration, Encryption, Enable. You choose a master password, and from then on the server (or Nextcloud, or S3) stores ciphertext only. Do this on the first device before syncing: enabling it later re-uploads every note and attachment, and on a 2 GB notebook that is an afternoon. Every subsequent device prompts for the master password on its first sync and then decrypts locally. Two consequences to accept up front. The server can no longer read anything, so check the sharing documentation before you rely on publishing notes from an encrypted account. And losing the master password loses the server copy for good, though every synced device still holds plaintext locally, which is why a regular File, Export, JEX archive belongs in your backup rotation: JEX is the only format that round-trips notebooks, tags, and attachments intact. The wider case for keeping exports of everything is in own your data exports.

The editor complaint is fair, and plugins fix most of it

The catalogue con is accurate: the split-pane Markdown editor is functional rather than lovely, and the rich-text mode drops some Markdown on round trips. The plugin repository is where Joplin closes the gap. Rich Markdown renders formatting inline in the editor, Note Tabs and Outline add the navigation people miss from Obsidian, and Templates covers meeting notes and journals. Install them from Configuration, Plugins, and restart once. The web clipper is a separate browser extension that talks to the running desktop app on localhost:41184, so it only works while Joplin is open on that machine. If you want a database-like notes tool with a real WYSIWYG editor and hierarchy, Trilium is the closer fit; the Joplin vs Trilium comparison lays out that split.

What I'd do

One person, under 1,000 notes, already running Nextcloud: WebDAV target, E2EE on, JEX export monthly, no server. More notes than that, or a partner you share notebooks with: the compose above behind Caddy, E2EE on from the first device, Postgres dumped nightly. Either way the apps are free on every platform, the AGPL licence and 56,000 stars mean the project is going nowhere, and the whole thing runs on a Raspberry Pi with room left over.

Compare Joplin

25 head-to-head comparisons.

Similar notes & knowledge base apps