Tools

replaces 1Password, LastPass, and other password managers

Vaultwarden

A lightweight, Bitwarden-compatible password vault you run yourself, used with the official Bitwarden apps. There's no separate 'Vaultwarden app': every client just points at your own server instead of Bitwarden's.

Project page ↗Steps and versions verified against official docs: September 2026

This assumes you've already done the base setup: a server, SSH access, a firewall, and Docker installed. A password vault is also the one tool on this site worth a second thought before you make it your daily driver. See the note at the bottom before you commit to it.

01

Point a domain at your server

Bitwarden's own apps refuse to connect over plain HTTP, so you'll need a subdomain with real HTTPS, for example vault.yourdomain.com. In your domain registrar's DNS settings, add an A record for that subdomain pointing at your server's IP address. This can take anywhere from a few minutes to a few hours to take effect. Then open the two ports it needs: sudo ufw allow 80,443/tcp.

02

Write the compose file

Vaultwarden joins the shared web network instead of exposing its own port. The proxy reaches it internally, by container name.

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    environment:
      DOMAIN: "https://vault.yourdomain.com"
      SIGNUPS_ALLOWED: "true"
      ADMIN_TOKEN: "REPLACE-WITH-A-GENERATED-TOKEN"
    volumes:
      - ./vw-data:/data
    networks:
      - web

networks:
  web:
    external: true
DOMAINMust exactly match the https address you'll actually use, including "https://". A mismatch breaks attachments and login links.
ADMIN_TOKENProtects the separate /admin panel. Generate one with openssl rand -base64 32 on your server and paste it in. Leaving this out entirely disables the admin panel, which is also a valid choice if you don't need it.

Start it: docker compose up -d.

03

Wire it into the shared reverse proxy

This site uses one Caddy instance for the whole server, not one per app, and every tool guide points back to the same setup rather than each showing its own. If you haven't set it up yet, the domains and HTTPS deep dive is the canonical walkthrough, including the exact port and Caddyfile block for every tool on this site. Once it's running, connecting Vaultwarden is one block in the shared Caddyfile:

vault.yourdomain.com {
    reverse_proxy vaultwarden:80
}

Then reload it: docker compose restart caddy in the proxy's folder.

04

Create your account

Visit your domain and click "Create Account." Use a real email and a strong master password, this password encrypts your entire vault, and losing it means losing everything in it, with no reset option.

05

Lock the door behind you

Now that your account exists, stop anyone else from registering one. Change SIGNUPS_ALLOWED to "false" in the compose file and run docker compose up -d again to apply it.

06

Install the apps

iOS App StoreGoogle PlayBrowser extensionsDesktop apps

Install the official Bitwarden apps, not a Vaultwarden-branded one; there isn't one. In each app's settings, before logging in, toggle "Self-hosted" and enter your server URL, then log in with the account you just created.

Before you rely on this

  • Back up the whole vw-data folder, not just the database file inside it. It also holds your encryption keys and file attachments; losing those invalidates sessions and orphans files even if the database itself is intact.
  • Vaultwarden is an unofficial, community-built reimplementation of Bitwarden's server, not covered by Bitwarden's own security program. The practical takeaway is to keep the image updated: run docker compose pull && docker compose up -d every so often, rather than letting it sit untouched for years.
  • Push notifications (instant sync across devices) only work with apps installed from the official App Store or Google Play. F-Droid builds of the Bitwarden app work fine otherwise, but you'll need to pull-to-refresh instead of getting instant updates.
  • A password vault is the highest-stakes thing on this page: if your server is down, you're locked out of every account it protects, including, potentially, the one you'd use to fix the server. Weigh that against the convenience of a commercial password manager before making this your only vault, and if you do go ahead, make sure your backup routine is genuinely working, tested, not just scheduled, before you delete anything from your old manager.

More tools

Ready for the next one?

Every guide here assumes you've already completed the base setup: server, firewall, and Docker.