Dependencies
What you actually need, in tiers. Start at the core and add only what your use case requires.
Core — the research workbench
- 1 process. No database, no message broker.
- Only hard dependency: libvirt / KVM. rvmc clones and boots VMs through libvirt; that is the one thing it can’t do without.
- Runs single-user with
RVMC_AUTH_MODE=local(see Auth modes).
That’s the whole floor for booting era-correct machines.
+ Docker — helper services
- code-server (in-workbench editing) and the wayback-cache proxy (serve archived responses to a guest that expects a dead server) run as containers.
- Add Docker only if you want these.
+ An OpenAI-compatible endpoint — the AI
- The autopsy analyst and the rvmc chat agent need an LLM. Provide your own OpenAI-compatible endpoint + key (cloud, or a local Ollama/vLLM). See Bring your own AI.
- No AI, no analysis or agent — but the manual VM workbench still works.
+ Autopsy — PostgreSQL
- The autopsy service analyzes bundles as jobs, and its job runner uses a PostgreSQL-backed
queue (a
SELECT … FOR UPDATE SKIP LOCKEDclaim loop — no Redis/broker needed). - So enabling autopsy adds PostgreSQL to the requirements.
- Storage for artifacts is pluggable (local filesystem, an artwork drive, or S3-compatible).
+ Multi-tenant server — the full edge
For a shared, internet-reachable deployment (RVMC_AUTH_MODE=forward):
- Traefik (the reverse proxy / edge) + Authentik (OIDC forward-auth), and Authentik’s own Postgres + Redis.
- This is the ZKM production posture; skip it entirely for solo self-hosting.
Summary
| Tier | Adds | Needed for |
|---|---|---|
| Core | libvirt/KVM | booting VMs (single-user) |
| + Docker | Docker | code-server, wayback-cache |
| + AI | OpenAI-compatible endpoint + key | autopsy analysis, agent |
| + Autopsy | PostgreSQL | analyzing bundles as jobs |
| + Multi-tenant | Traefik + Authentik (+ PG/Redis) | shared internet deployment |
Language runtimes: rvmc and autopsy are Python services with a React SPA for the workbench UI;
exact versions are pinned per repo (see each repo’s pyproject.toml / package.json).