Quick start
Describe a workspace, create a universe and open it — from nothing to two running copies of a project.
Before you start
You need a container runtime with docker compose, git, and a multiverse.yaml (a path or a git URL).
Your first universe
# record the workspace, clone its repos, run doctor $ multiversectl bootstrap ./multiverse.yaml --root ~/acme # universe 1: a worktree of every repo $ multiversectl new 1 # start its containers $ multiversectl up 1 # list universes and their state $ multiversectl ls # print the hostnames universe 1 answers on $ multiversectl urls 1 # check the host, the workspace and universe 1 $ multiversectl doctor 1 # stop and delete universe 1 (asks first) $ multiversectl rm 1
Seeing what you have
ls is one block per universe — branch, service, hostname and URL for every address it answers on:
$ multiversectl ls universe 3 · acme-u3 · 6 running · 192-168-1-20.traefik.me ───────────────────────────────────────────────────────────────── APP BRANCH RUNNING SERVICE HOST URL admin u3 1 app-dev adm http://adm-u3.192-168-1-20.traefik.me api u3 4 web api http://api-u3.192-168-1-20.traefik.me web devapi http://devapi-u3.192-168-1-20.traefik.me:8001 mailpit mail http://mail-u3.192-168-1-20.traefik.me web u3 1 app-dev app http://app-u3.192-168-1-20.traefik.me also checked out: mobile=u3
Run multiversectl --help for every command and flag. ls -o wide adds every service, whether it is up and the volumes it owns; -o list is one line per universe, for piping. They combine: -o list,wide.
A second universe
The point of the tool is the next command, not the first one. Create another universe and the first keeps running:
$ multiversectl new fix/login $ multiversectl up fix/login $ multiversectl ls
Both serve at once, on different hostnames, with their own containers, their own databases and their own checkouts. Nothing was stopped and no port was reassigned — Networking explains why they do not collide.