A declarative, YAML-based homelab manager. labops is a CLI tool that simplifies, automates and standardizes the setup, configuration and maintenance of your homelab infrastructure using simple configuration files and powerful backend automation.
📖 Documentation · Getting started · Configuration · Commands
What it does
You describe your homelab once — the machines, the containers, the services they expose — and labops derives the rest from it.
hosts:
cprox:
type: proxmox
os: debian
ip: 10.0.10.3
lxc:
pihole:
ip: 10.0.10.5
os: debian
vmid: 105
web_services:
- proxy_name: pihole
port: 8080
That container is now three things at once: something labops update will patch, a pihole.lab DNS record, and a pihole.example.com route in your Caddyfile. Nothing was declared twice, so nothing can drift.
- Host management — setup and updates across Alpine, Debian and RedHat, via built-in Ansible playbooks
- Proxmox VMs & LXC — containers driven through the Proxmox host with
pct, so they need no sshd - Target selection — update an arbitrary slice of the lab by kind, OS, tag or position in the tree, ad-hoc or from a named set
- Docker stacks — sync compose files to a node, bring them up, pull newer images
- DNS automation — every node becomes a Pi-hole v6 record, derived from the inventory
- Reverse proxy — a Caddyfile rendered from your
web_services, with access lists and wildcard TLS - Wake — a magic packet for bare metal,
qm/pct startfor a Proxmox guest
Installation
pipx install labops
# or
pip install labops
Since labops is a standalone CLI tool, using pipx is highly recommended to isolate its dependencies.
Usage
Point it at a YAML config and go. labops finds homelab.yml by walking up from your current directory, the way docker compose finds a compose file.
labops --help # every available command
labops validate # is the config sound?
labops host list # what do I have?
labops update --all # patch everything
A worked example config lives in test-samples/homelab-complete.yml.
→ Full documentation, including a configuration reference and a JSON Schema for editor autocompletion.
Development
See the development guide for the full setup. In short:
uv sync
source .venv/bin/activate
just check # lint + type-check
just test # pytest
just docs-serve # preview the docs site
The project uses Dev Containers for a consistent environment and uv for package management. Releases are automated with release-please; the package is published to PyPI by GitHub Actions, not by hand.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file labops-0.10.0.tar.gz.
File metadata
- Download URL: labops-0.10.0.tar.gz
- Upload date:
- Size: 325.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6bc1b13332d37f9eaa43a8036fbce1ee30351e853ef796dd7399b787fdba78cb
|
|
| MD5 |
0e0f02c64dc362b264b4fdd362b95e14
|
|
| BLAKE2b-256 |
c0c2925e12c320e2e26a2fa8800a6603c426e873f7a1e775a895475bdfab28f9
|
File details
Details for the file labops-0.10.0-py3-none-any.whl.
File metadata
- Download URL: labops-0.10.0-py3-none-any.whl
- Upload date:
- Size: 131.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
986f34a81ea599e3fa13cfa26805dcca5bf058bf847e7b1863b7eeaf54350a26
|
|
| MD5 |
6db29c2d3e4ae0ad59077b2895b984f6
|
|
| BLAKE2b-256 |
59f83588335f7959545c70bdbf9fb7b5693a1ffbd26c671a3774eae375fa3350
|