Deploy a browser cluster in minutes
Start with Docker Compose on a single node, create an isolated browser, then scale out to a distributed control plane and worker nodes — all self-hosted, no SaaS.
To run Machineuse, start a single-node cluster with Docker Compose, create your first isolated browser via the control plane, then scale out by starting worker agents that join over the brokerless NNG mesh. Requires a Linux host withsystemd-nspawn.
Deploy in five steps
Check prerequisites
You need a Linux host with systemd-nspawn support and Docker installed. A single machine is enough to start; a production fleet is a control plane plus one or more worker nodes.
Start a single-node cluster
Clone the repository and bring the stack up with Docker Compose. This runs the control plane and a local worker on one host so you can create browsers immediately.
Create your first browser
Ask the control plane for an isolated browser instance. It provisions a systemd-nspawn container on an available worker and returns a handle you can connect to.
Scale out worker nodes
Start additional worker agents on more machines and point them at the control plane over NNG. Scheduling adapts automatically — new sessions land on nodes with real capacity.
Observe and operate
Watch per-node metrics from the control plane. Idle browsers snapshot to dormancy on their own, and auto-healing migrates instances off failed workers.
1 · Start a single-node cluster
# Clone the repository
git clone https://github.com/dotcommoners/machineuse.git
cd machineuse
# Bring up the control plane + a local worker
docker-compose up -dsystemd-nspawn is a Linux-only, OS-level container manager. On non-Linux hosts, run the cluster inside a Linux VM. See the documentation for host requirements and configuration.
2 · Create your first browser
# Ask the control plane for an isolated browser instance
machineuse-cli create --image ubuntu:22.04
# List running instances and where they landed
machineuse-cli ls3 · Scale out worker nodes
# Join a new worker to the control plane over NNG
python -m machineuse.nodes.agent \
worker-2 tcp://control-plane:5000
# The control plane now schedules onto worker-2 by live loadThere is nothing else to deploy between nodes — the NNG mesh is brokerless, so you never stand up or secure a separate message broker.
Full installation guideSource on GitHub →
Next: how it works · all features · use cases