← All articles
a white desk with a laptop and a computer on it

Joplin Server: Self-Host Your Note Sync Backend

Productivity 2026-03-04 · 4 min read joplin notes markdown self-hosted sync docker notion alternative evernote alternative
By Selfhosted Guides Editorial TeamSelf-hosting practitioners covering open source software, home lab infrastructure, and data sovereignty.

Joplin is a note-taking application with a long track record and a clear philosophy: your notes belong to you, stored in open formats you can read without the app. Markdown files. Attachments as actual files. A SQLite database for indexing. Nothing proprietary.

Photo by Krišjānis Kazaks on Unsplash

By default, Joplin syncs via third-party services: Dropbox, OneDrive, Nextcloud, or Joplin Cloud (the paid hosted option). Self-hosting Joplin Server gives you the same sync capabilities on your own infrastructure, without data leaving your network.

Why Joplin for Note-Taking

Before getting into server setup, it's worth being clear about what Joplin is and isn't:

Joplin is good at:

Joplin is not:

For a single user or small household wanting Evernote/Bear/Obsidian functionality without vendor lock-in, Joplin is excellent.

Joplin Server vs. Other Sync Options

Joplin supports several sync backends:

Backend Privacy Cost Setup
Joplin Cloud Notes in Joplin's cloud $3-7/mo Zero
Nextcloud Self-hosted Free (self-hosted) Nextcloud required
Dropbox/OneDrive Notes in their cloud Free tier Account required
WebDAV Varies Varies Server required
Joplin Server Fully self-hosted Free Docker
S3-compatible Varies Varies S3 bucket required

Joplin Server is the official self-hosted sync backend with the most features: multi-user support, note sharing, and eventual collaboration features under development.

Docker Deployment

Joplin Server requires PostgreSQL:

services:
  joplin-db:
    image: postgres:16-alpine
    container_name: joplin-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: joplin
      POSTGRES_USER: joplin
      POSTGRES_PASSWORD: change-this-password
    volumes:
      - joplin-db:/var/lib/postgresql/data

  joplin-server:
    image: joplin/server:latest
    container_name: joplin-server
    restart: unless-stopped
    depends_on:
      - joplin-db
    ports:
      - "22300:22300"
    environment:
      APP_PORT: 22300
      APP_BASE_URL: https://joplin.yourdomain.com
      DB_CLIENT: pg
      POSTGRES_HOST: joplin-db
      POSTGRES_PORT: 5432
      POSTGRES_DATABASE: joplin
      POSTGRES_USER: joplin
      POSTGRES_PASSWORD: change-this-password
      MAILER_ENABLED: 0

volumes:
  joplin-db:

APP_BASE_URL is critical: Set this to the URL where Joplin Server will be publicly accessible. Internal-only URLs work if all clients are on your network; use your external domain for mobile sync outside your home.

Start with docker compose up -d and access http://your-host:22300. The default admin credentials are admin@localhost / admin — change these immediately after first login.

Like what you're reading? Subscribe to Self-Hosted Weekly — free weekly guides in your inbox.

Initial Setup

After starting:

  1. Navigate to http://your-server:22300
  2. Log in with admin@localhost / admin
  3. Go to Admin → Users → Change admin password and email
  4. Create user accounts for each person who will use the sync

Each user gets their own separate note space. Notes aren't shared between users by default (sharing is explicit).

Connecting Joplin Clients

Desktop app (Linux/macOS/Windows):

  1. Open Joplin → Tools → Options → Synchronisation
  2. Synchronisation target: "Joplin Server"
  3. Joplin Server URL: your server URL
  4. Email: your account email
  5. Password: your account password
  6. Click "Check synchronisation configuration" to verify

Mobile (iOS/Android):

  1. Settings → Synchronisation
  2. Sync target: Joplin Server
  3. Enter server URL, email, password
  4. Tap "Check synchronisation configuration"

After connecting, click "Synchronise" to perform the first sync. Notes, notebooks, tags, and attachments sync bidirectionally.

End-to-End Encryption

Joplin supports E2E encryption even with Joplin Server. Enable it in Joplin Desktop under Tools → Options → Encryption. Generate a master key and set a password — the server never sees your plaintext notes.

With E2E encryption:

This makes self-hosted Joplin more private than many SaaS note-taking options, even if your server is compromised.

Sharing Notes

Joplin Server supports sharing individual notes via public links:

  1. Right-click a note in Joplin Desktop
  2. "Share note" → Toggle sharing on
  3. Copy the share link

Anyone with the link can view the note in a browser — useful for sharing a recipe, document, or reference page with someone who doesn't have Joplin. The shared view is read-only.

Nginx Proxy Configuration

For HTTPS access (required for mobile clients outside your network):

server {
    server_name joplin.yourdomain.com;

    location / {
        proxy_pass http://localhost:22300;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    client_max_body_size 200M;
}

The client_max_body_size 200M matters for syncing large attachments (PDFs, images). The default Nginx limit of 1M is too small.

Storage Limits

By default, each user gets unlimited storage. Administrators can set per-user limits in the admin panel: Admin → Users → Edit user → Max total size.

Joplin Server stores attachments as files on disk (or in the database, depending on configuration). Monitor disk usage if you have many users or large attachments.

Joplin Server vs. Nextcloud for Joplin Sync

Aspect Joplin Server Nextcloud WebDAV
Setup complexity Simple (2 containers) Complex (full Nextcloud stack)
Joplin features Full WebDAV sync only
Note sharing Built-in Not available
Multi-user Yes Yes (Nextcloud accounts)
Other files/apps No Yes
Resource usage Low High

If you already run Nextcloud, use its WebDAV for Joplin sync — no additional setup needed. If you want the simplest Joplin-specific sync with sharing features, Joplin Server is cleaner.

Backup

Back up two things:

  1. PostgreSQL database: Contains note metadata, sharing state, and user accounts

    docker exec joplin-db pg_dump -U joplin joplin > joplin-backup-$(date +%Y%m%d).sql
    
  2. Joplin uploads directory: Contains attachment files (if stored externally)

Restore by importing the SQL dump and replacing the uploads directory.

Note: individual note content is also backed up inside Joplin's encrypted export if you use the Joplin export function.

The Joplin project is at laurent22/joplin with active development. The server component is at joplin/server — same repository, different package.

Get free weekly tips in your inbox. Subscribe to Self-Hosted Weekly