Hetzner
An Alchemy app on Hetzner is one or more Servers — real VMs, booted in seconds and billed by the hour — running your Effect programs as Services: bundled with rolldown, copied over SSH, and supervised by systemd. No Dockerfile, no ansible, no hand-written unit files. Around them you declare the rest of the platform — volumes, private networks, firewalls, load balancers, and DNS — in the same TypeScript program.
New here? Set up your project and API token, then start the tutorial.
Compute
Section titled “Compute”- Servers — the VM: pick a
serverType, animage, and alocation; attach SSH keys, networks, firewalls, volumes, and placement groups. Alchemy injects a deploy key so it can reach every server it manages. - Services — your code on a Server.
An HTTP
fetchhandler (or a background process) deployed as a systemd unit; N Services can share one Server. - SSH — typed
exec/scpagainst any managed Server, usable from deploy-time Effects. - Images & snapshots — snapshot a Server with
Hetzner.Image, look up stock images withHetzner.findImage.
Storage
Section titled “Storage”- Volumes — network block storage
attached to a Server. Mount one into a Service with the
MountVolumebinding and read/write it like a local directory.
Networking
Section titled “Networking”- Networks, Firewalls & Load Balancers — private networks with subnets, stateful firewall rules applied to servers, and managed load balancers with health checks and TLS certificates.
- Floating & Primary IPs — stable public addresses that survive server replacement.
- Zones & records — Hetzner DNS zones
and record sets as resources, plus
ReadDns/WriteDnsbindings for querying and mutating records from deploy-time Effects.
What are you building?
Section titled “What are you building?”| You’re building | Reach for |
|---|---|
| An HTTP API on a VM | Server + Service |
| A background worker / daemon | Service with host.run(...) — no port, no HTTP |
| Persistent state on disk | Volume + MountVolume |
| A load-balanced, TLS-terminated app | Load Balancer + Certificate |
| Servers talking privately | Network + usePrivateIp targets |
| Locking down public access | Firewall |
| Your own domain | Zone + RecordSet |
| A stable IP across replacements | Primary IP / Floating IP — see Networking |
| Golden images | Hetzner.Image snapshots — see Servers |
Where next
Section titled “Where next”- Setup — create a Hetzner project, generate an API token, and connect alchemy.
- Tutorial — from empty directory to a Server running an HTTP Service with a mounted Volume and a firewall.
- Providers reference — generated API docs for every Hetzner resource Alchemy ships.