We earn commissions when you shop through the links below.
Full disclosure → The official self-hostable Bitwarden server — full vendor support and enterprise SSO. Heavier than Vaultwarden, but the right pick when you need a supported, on-prem deployment.
Our recommendationPick Bitwarden's official server when you need the vendor-supported deployment — enterprise SSO, the System Administrator Portal, a support contract behind your organisation's vault — and can run the whole stack it ships: `bitwarden.sh` stands up the C#/.NET services behind nginx with an MSSQL Express database (10 GB relational-size cap, no extra licence). Upstream asks for 2 GB of RAM and 12 GB of storage minimum, 4 GB and 25 GB recommended. The source is AGPLv3 except `/bitwarden_license`, which is under the Bitwarden License. For a personal or family vault, Vaultwarden is the lighter unofficial server that Bitwarden's own FAQ says its clients are expected to mostly work with.
Follow the Bitwarden deploy guide → What you take on
Bitwarden's self-host guide is thorough, but the install has prerequisites the four-line snippet hides:
non-negotiableYou need an installation id and key from bitwarden.com/host before ./bitwarden.sh install; they register the install, authenticate to the push relay and validate paid-feature licences. Upstream says treat them as secrets and never share one pair across installations, and pick the US or EU region to match the cloud account you will license from.
non-negotiableDo not install as root: the guide creates a bitwarden user in the docker group and runs everything from /opt/bitwarden. Ports 80 and 443 must be free (custom ports mean editing ./bwdata/config.yml then ./bitwarden.sh rebuild), the protocol must be consistent end to end — mixing HTTPS at the proxy with HTTP internally "causes connection, authentication, and syncing errors" — and running under a subfolder is unsupported.
non-negotiableNothing works until SMTP is set: fill the globalSettings__mail__smtp__* values in ./bwdata/env/global.override.env (and adminSettings__admins for the admin portal), then ./bitwarden.sh restart; new accounts need email verification. Premium and organisation features are unlocked by uploading a licence file from a paid cloud account, and an organisation licence must be refreshed within 60 days of renewal or the organisation is disabled.
non-negotiableUpdate with ./bitwarden.sh updateself then ./bitwarden.sh update; self-hosted releases lag the cloud by several days, so the admin portal can advertise an update you cannot pull yet. Back up the whole ./bwdata directory: nightly MSSQL dumps land in ./bwdata/mssql/backups for 30 days, but env, core/attachments and core/aspnet-dataprotection are not in them.
non-negotiableThe 2 GB floor is upstream's minimum (Linux Standard Deployment: 2 GB RAM, 12 GB storage, x64 1.4 GHz; 4 GB and 25 GB recommended). If that is too much, "Bitwarden lite" (ghcr.io/bitwarden/lite, the renamed Unified beta) is a single container needing at least 200 MB that can use SQLite, PostgreSQL, MySQL/MariaDB or MSSQL — but upstream scopes it to personal use and home labs, and it takes no nightly backups.