GoblinDock turns "spin up a fully-configured VM" into a few clear buttons. Stack Lego-style blocks into a golden image, hit deploy, and the goblin does the boring parts — cloud-init, Ansible, console and all.
One container · one SQLite file · no Redis, no Postgres, no moving parts.
One container. Everything inside.
Upload the raw material, bake it into something deployable, then summon as many copies as you like — each one configured on the way up.
Give GoblinDock a public cloud image URL — Ubuntu 24.04 LTS, for example. It downloads and imports it into Proxmox as the starting point every build is cut from.
ISO · base imageStack the blocks you want — packages, Docker, users, scripts — and GoblinDock runs them on a throwaway VM, cleans it up, and saves the result as a reusable Proxmox template.
golden image = base + blocksPick a golden image, choose a size and an optional recipe, and click deploy. GoblinDock clones it, finishes configuring it on first boot, and tells you the IP once it's up.
deploy ± a recipeProvisioning, configuration, lifecycle and a real console — bundled into one panel your whole household (or team) can share.
29 built-in blocks plus your own — install packages, write files, run scripts, add Docker, drop in Claude Code. Fork a built-in to customise it.
The same noVNC console Proxmox uses, plus an xterm.js serial tab — proxied so the browser only ever talks to GoblinDock.
Every long action is a job with a step checklist, progress bar and a streaming log. Watch the goblin work in real time.
First-run admin setup, Admin / User roles, per-user VM isolation, per-target resource ceilings and an audit log. A non-admin only ever sees their own VMs and a redacted view of everything else.
A recipe is an image-independent bundle of blocks applied per-deploy — AI Dev Box, MySQL node, whatever you name it. Same blocks, baked once into a golden or layered fresh onto every clone.
Start, stop, restart, rebuild or destroy — with live CPU / RAM / disk, full config, guest-agent OS & network info, and the deployment log all on one per-VM page. A rebuilt VM even keeps its static IP and VLAN.
When you stack several blocks, GoblinDock doesn't run them one-by-one as separate executions — it merges them by phase. Same phase, one execution, in canvas order.
# one script, runs as root set -e echo '>>> GoblinDock: Base OS Setup' timedatectl set-timezone UTC localectl set-locale LANG=en_US.UTF-8
- name: deploy-gd-vm hosts: all become: true tasks: - name: Install Packages # task 1 - name: Install Docker CE # task 2 - name: Run Script # task 3
Three ansible blocks aren't three SSH sessions — they're three tasks in one playbook, run in order. See the exact generated YAML any time with View YAML in the builder.
A vendored React SPA — no build step — served straight from the container. Mono-forward, goblin-gold, dark by default.
Compose a golden image from typed blocks — each tagged cloud-init or ansible — grouped into OS Setup, Install, Configure, Scripts and Cleanup.
Table or cards, filter by status, search by name. Auto-refreshing, role-filtered, and it names & tracks each VM for you.
Built-in and custom blocks side by side, each tagged with its category and phase. Fork any built-in to make it yours.
{{ secrets.NAME }} & variables.
GoblinDock went through a security & correctness review, independently verified. Your tokens never leave the box.
Secrets and Proxmox tokens are Fernet-encrypted (HKDF-derived from your secret key) and masked in logs and previews.
/api/state is role-filtered. A non-admin only ever receives their own VMs and a redacted connection view — no host, no token id, no SSH paths.
A hard VMID-window check means GoblinDock can never touch a VM outside its range. Inputs are data, not code — every value is shell- and YAML-quoted.
A failed Proxmox task fails the job instead of logging success — so the database never advances past a VM that wasn't actually created.
Non-root, digest-pinned base, version-pinned deps and pinned Ansible collections. CSRF tokens, security headers, CSP, self-hosted fonts.
Signed, httpOnly session cookies; password policy enforced; disabled accounts rejected on every path — including the console WebSockets.
Three commands and a browser tab. The first load asks you to create the admin account — then you're building golden images.
docker compose up --build -d