# ~/.config/containers/systemd/vaultwarden.container
[Unit]
Description=Vaultwarden password vault
After=network-online.target [Container]
Image=-weight: 500;">docker.io/vaultwarden/server:latest
ContainerName=vaultwarden
PublishPort=8080:80
Volume=vaultwarden-data.volume:/data
AutoUpdate=registry [Service]
Restart=always
TimeoutStartSec=300 [Install]
WantedBy=default.target
# ~/.config/containers/systemd/vaultwarden.container
[Unit]
Description=Vaultwarden password vault
After=network-online.target [Container]
Image=-weight: 500;">docker.io/vaultwarden/server:latest
ContainerName=vaultwarden
PublishPort=8080:80
Volume=vaultwarden-data.volume:/data
AutoUpdate=registry [Service]
Restart=always
TimeoutStartSec=300 [Install]
WantedBy=default.target
# ~/.config/containers/systemd/vaultwarden.container
[Unit]
Description=Vaultwarden password vault
After=network-online.target [Container]
Image=-weight: 500;">docker.io/vaultwarden/server:latest
ContainerName=vaultwarden
PublishPort=8080:80
Volume=vaultwarden-data.volume:/data
AutoUpdate=registry [Service]
Restart=always
TimeoutStartSec=300 [Install]
WantedBy=default.target
-weight: 500;">systemctl --user daemon-reload
-weight: 500;">systemctl --user -weight: 500;">start vaultwarden.-weight: 500;">service
-weight: 500;">systemctl --user daemon-reload
-weight: 500;">systemctl --user -weight: 500;">start vaultwarden.-weight: 500;">service
-weight: 500;">systemctl --user daemon-reload
-weight: 500;">systemctl --user -weight: 500;">start vaultwarden.-weight: 500;">service - Your homelab runs on Windows / WSL2 / macOS. Quadlet is Linux + systemd. Period. If you're on Docker Desktop, this isn't for you.
- You're deeply invested in Compose-specific features like profiles, extends, x-* anchors, or the Compose CLI's build workflows. podman-compose exists but compatibility isn't 100%, and Quadlet isn't trying to replicate Compose semantics.
- You want GUI-first management. Portainer, Dockge, and the like are built around Docker. Cockpit has Quadlet integration now, but the ecosystem is thinner.
- You share stacks across machines with non-Linux users. Compose files are more portable as artifacts than a folder of .container units tied to one host's systemd tree.
- GPU passthrough for media transcoding is a hard requirement and you have it working on Docker. It's doable on Podman, but expect extra work. If your Jellyfin is happy today, don't break it for philosophy. - You run a Linux-native homelab on Fedora, Rocky, Alma, CentOS Stream, Debian, or openSUSE and your containers are long-lived services rather than dev environments.
- You care about boot ordering. "Start reverse proxy after databases after network is up" is a one-liner in systemd, and a fragile convention in Compose.
- You want auto--weight: 500;">update with rollback without bolting on a third-party tool.
- You're tired of the Docker daemon being a single point of failure for your entire container story.
- You're already comfortable with systemd as an operator. This is the key one. If -weight: 500;">systemctl, journalctl, and unit file syntax feel natural to you, Quadlet is going to feel like containers finally speaking your language. If they don't, the learning curve is real and not worth it for a Plex -weight: 500;">install. - Docker Compose for development and prototyping. Fast iteration, familiar tooling, easy to share. If I'm testing a new self-hosted tool for the first time, it's going into a Compose file in a scratch directory.
- Quadlet for the services I've committed to. Once something graduates from "I'm trying this out" to "this runs my household," it's worth the 15 minutes to port it to a .container file and let systemd own its lifecycle.