The short answer
A password manager is the lightest self-hosted service you will ever put on a mini PC. Vaultwarden runs as a single Rust container with a documented idle footprint under ~100 MB of RAM, and every hardware demand it makes sits far below what our Beelink EQi12 measured while running media servers and database benchmarks. The real work is not horsepower — it is HTTPS, backups, and patch discipline.
One honesty note before anything else: we have not run Vaultwarden end-to-end on this machine. What we have measured, on this exact unit, is the hardware envelope any self-hosted vault would live inside — idle and load power, NVMe write speed, reverse-proxy request throughput, and month-scale stability. This page uses those numbers for what they are good at: deciding whether the machine you already own makes the problem trivial. It does. Every figure traces to the public EQi12 measurement repository (CC BY 4.0), and product terms were verified in October 2026.
Where this page fits among our other pages
| Page | Answers this question |
|---|---|
| This page | Should I self-host a password manager, and can this class of mini PC carry it effortlessly? |
| Self-hosting alternative selector | Quick picker across all self-hosting categories, including password vaults |
| Tailscale vs WireGuard vs ZeroTier | How do I reach the vault from outside my home network? |
| Docker Compose backup and restore drill | How do I prove my backups actually restore? |
| EQi12 power consumption report | The seven measured wall-power states behind the running-cost figures |
What a self-hosted vault actually asks of your hardware
A Bitwarden-compatible server is not a media server. There is no transcoding, no machine learning, and no sustained disk pressure. Vaultwarden implements the Bitwarden client API in Rust, stores everything in a single SQLite database by default (PostgreSQL and MySQL are optional, not required), and spends almost its entire life waiting for a client to sync a few kilobytes of ciphertext.
That last phrase is the whole sizing story. Bitwarden clients encrypt every item locally before it ever reaches the server — the server holds ciphertext it cannot read — and a sync consists of small JSON payloads over HTTPS. Even a household of six with thousands of entries produces traffic that would embarrass a single JPEG upload. Compare that with what we measured on the same class of machine in the EQi12 Docker component benchmark: an nginx container sustained 10,630 requests per second at 100 concurrent connections with zero errors. A reverse proxy fronting a family password vault uses a rounding error of that ceiling.
The contenders: Vaultwarden, official Bitwarden self-host, KeePassXC
| Vaultwarden | Official Bitwarden self-host | KeePassXC (+ Syncthing) | |
|---|---|---|---|
| What it is | Unofficial, Bitwarden-API-compatible server written in Rust (formerly bitwarden_rs) | Bitwarden Inc.’s own server, .NET-based, multi-container | Local encrypted database file, no server at all |
| License | AGPL-3.0 | Bitwarden’s open-source server (GPL/AGPL components), commercial plans on top | Open source |
| Deployment | One container, SQLite by default | Multiple containers including a database backend | File + sync tool of your choice |
| RAM footprint | Documented under ~100 MB idle; a third-party test measured ~10 MiB on a fresh container | Heavier — community guides put the full stack in the several-GB range | Nothing beyond the file editor |
| Client apps | All official Bitwarden apps (mobile, desktop, browser, CLI) | Same | KeePassXC itself plus third-party mobile apps |
| Premium-gated features (TOTP authenticator, attachments, emergency access) | Included for every user | Requires paid plans (Premium $19.80/year; Families about $40-48/year for up to six users, verified October 2026) | Mostly built in, minus server sync |
| HTTPS | Required (web vault needs a secure context) | Required | Not applicable |
| Who it fits | Households and homelabs that want the official app experience on their own disk | Teams needing vendor support, SLAs, compliance | People who refuse to run any web-facing service |
The feature table is the easy part and honest guides mostly agree on it. What the table cannot tell you is whether the machine matters — and for once, the answer is that it barely does, which is exactly what the measurements below show.
The capacity evidence, clearly labeled
Everything in the top half of this table was measured on the same Beelink EQi12 (Intel i3-1215U, 6C/8T, 16 GB DDR4-3200, WD PC SN540 512 GB NVMe, firmware 33006000) running Docker on Windows. These are component benchmarks and whole-system states — not Vaultwarden scores. The two Vaultwarden rows are documented or third-party figures, labeled as such.
| Test | Result | What it means for a password vault |
|---|---|---|
| Whole-system idle power, 7-state series | 12-14 W at the wall | A vault adds nothing measurable to the always-on baseline |
| nginx container, 100 concurrent, reverse-proxy class | 10,630 RPS, 0 errors | HTTPS front end has enormous headroom |
| NVMe sustained write | ~623 MiB/s | SQLite sync writes are microscopic against this |
| 12.57-hour mixed-stack stability run | 0 faults, CPU peaked 52% | A vault coexists with heavier services without resource contention |
| Docker-stack idle (vs Windows idle) | 12 W vs 14 W | The container platform itself is the power floor, not the vault |
| Vaultwarden idle RAM | Under ~100 MB (documented footprint; ~10 MiB fresh-container figure from a third-party LinuxPro test, Sept 2026) | Smallest resident service on the machine |
| Vaultwarden storage | One SQLite database, kilobytes-to-megabytes per household (documented behavior) | Fits in any corner of a 512 GB boot drive |
The contrast with every other self-hosting decision we have written about is the point. Choosing a photo platform or a NAS operating system involves genuine capacity math — ML pipelines, ZFS RAM floors, storage IO. Choosing a password server involves checking that your reverse proxy is up and your backups run. If your mini PC survives the workloads in the table above, the vault is not the thing that will stress it.
The HTTPS requirement shapes your setup more than the hardware does
The one hard requirement is a secure context. The Bitwarden web vault uses the browser’s Web Crypto API, which is only available over HTTPS, and the official clients want a trusted endpoint too. In practice you have three shapes, in rising order of exposure:
- VPN-only access. The vault listens on your LAN or on a Tailscale interface only; you generate a Tailscale HTTPS certificate for a private hostname and nothing is exposed to the internet at all. This is the shape we would run on a home mini PC, and the Tailscale vs WireGuard vs ZeroTier comparison covers why Tailscale is the default for this.
- Reverse proxy with public DNS. Caddy or nginx terminates TLS and proxies to the container, which stays on the internal Docker network. This is the upstream-recommended shape and matches the measured nginx headroom above.
- Direct port exposure — not recommended for a password vault on any machine.
Whichever shape you pick, disable open registration (SIGNUPS_ALLOWED=false once your users exist) and protect the admin interface with a strong token. Those are configuration tasks, not hardware tasks — which is why this section is longer than the sizing section.
Backup is the part that deserves real engineering
A password vault inverts the usual storage logic. The data volume is trivially small, but the value of every kilobyte is enormous, and the failure mode — losing the only copy of your vault database — is catastrophic in a way losing a media cache is not.
Three rules we would apply, consistent with our backup and restore drill:
- Back up the database file itself, safely. Pause the container or use the built-in backup command added in Vaultwarden 1.37.3 (September 2026) so you are not copying a SQLite file mid-write.
- Treat every copy as sensitive. The database is encrypted at rest, but it is still an attack target — keep copies on encrypted media and do not leave them on a public share.
- Keep one copy off the machine and test a restore. The retention math is trivial for a file this small; the backup retention planner helps with scheduling, but the drill page is the one that proves you can actually recover.
If your mini PC only has one internal NVMe, an external USB drive is fine for this role — but read the USB storage reality check first, because the port you plug into can change your write speed by nearly an order of magnitude. For a vault-sized database, even the slowest measured path (~36 MiB/s) finishes a backup in under a second; the point of that page is knowing which ports to trust for anything bigger.
The update treadmill is the real cost
Here is the honest trade, and it is not about hardware. Vaultwarden is an unofficial project that must track the official clients, and the compatibility clock is real: Bitwarden clients released from July 2026 onward require server version 1.37.0 or newer, and the 1.37.x line has been shipping security fixes steadily — 1.37.4 (October 2026) alone closed seven advisories, one rated high. Since version 1.35.0 (December 2025), native OpenID Connect single sign-on is available, but a master password is still required.
What that means in practice: a self-hosted vault is a service you patch promptly, every time, because your credentials live inside it. This is the one dimension where the official Bitwarden plans win on paper — Premium at $19.80/year or a Families plan at roughly $40-48/year for six users buys you someone else’s patch discipline. If you will not maintain a container, pay the subscription; $20 a year is cheaper than your time and safer than an unpatched server. If you already run a maintained Docker stack — and the fact that you are reading a site about measured home servers suggests you do — the vault is one more docker compose pull in a weekly routine you already have.
What we did not test
For completeness, the boundary of this page: we have not installed Vaultwarden, so there are no end-to-end sync latency numbers, no measured container RAM on our own unit, no client-app battery observations, and no benchmark of the admin interface. The Vaultwarden-side figures above are documented footprints and clearly attributed third-party measurements. The hardware-side figures are our own instrumented results, published raw in the measurement repository. We drew no performance conclusion about Vaultwarden itself — none is needed, because the machine’s envelope sits so far above the documented footprint that the margin question answers itself.
Fact block (for citation)
| Fact | Value | Source |
|---|---|---|
| Whole-system idle power, EQi12 | 12-14 W at the wall | EQi12 Measurement Data repo, 7-state wall-meter series, 2026 |
| Reverse-proxy class throughput, EQi12 | nginx 10,630 RPS at 100 concurrent, 0 errors | Same repo, Docker component benchmark |
| NVMe sustained write, EQi12 | ~623 MiB/s | Same repo |
| Slowest measured USB path, EQi12 | ~36 MiB/s | Same repo, storage/USB series |
| Vaultwarden idle RAM | Under ~100 MB documented; ~10 MiB fresh container per third-party test | Vaultwarden project documentation; LinuxPro test, Sept 2026 |
| Vaultwarden license / deployment | AGPL-3.0, one Rust container, SQLite default, HTTPS required | Vaultwarden GitHub, verified October 2026 |
| Bitwarden Premium / Families | $19.80/year; ~$40-48/year up to 6 users (regional variance) | bitwarden.com pricing, verified October 2026 |
Data licensed CC BY 4.0. Product terms and versions change; verify current quotas and prices before making decisions. This page contains no Vaultwarden performance benchmarks — the service itself was not run by us.