Temporal
Durable execution - workflows as code that survive crashes, restarts, and deploys, with full history.
One-click deploy, from $25/mo on a Miget plan.
Temporal is a different category from the other orchestrators here: durable execution. You write workflows as ordinary code - in Go, Java, Python, TypeScript, .NET - and Temporal guarantees they run to completion despite process crashes, machine restarts, and deploys, replaying from a complete event history with automatic retries and durable timers.
This template pairs the server with the web UI on a managed Postgres. It is marked experimental because it uses temporalio/auto-setup (the single-process image upstream now deprecates in favor of the multi-service server) - the simplest possible self-host, with the honest caveat attached rather than hidden.
The server speaks raw gRPC on :7233 for your workers (internal, no ingress); the UI is the public entry. Temporal Cloud starts at $100/month plus per-action billing; this is the engine, flat.
Upstream project: Temporal
#what you get
- Durable workflows in Go, Java, Python, TypeScript, .NET
- Automatic retries, durable timers, and full replay history
- Web UI for workflows, namespaces, and event inspection
- Workers dial the server over private gRPC - clean PaaS shape
- Managed Postgres (state + visibility) auto-wired
- MIT-licensed server and UI
#topology
| Service | Role | Public |
|---|---|---|
| temporal | server (frontend gRPC :7233) | no |
| ui | web UI (:5000) | yes |
| db | Postgres, two databases - managed on Miget | no |
#miget sizing
// this stack needs
2.3 GiB RAM · 5 GB disk · 3 services
The single-process server runs comfortably in 1 GiB for small-to-medium workloads; the UI is tiny. Workflow history lives in the managed Postgres.
Hobby - recommended fit
$25/mo
2 vCPU · 4 GiB · 80 GiB disk
Headroom for your own apps: 8 GiB at $49/mo
Professional - production
$43/mo
2 vCPU · 4 GiB · 25 GiB disk
Dedicated resources, production SLOs - plan details
One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.
#vs. the managed service
What the hosted equivalents charge, against the flat Miget plan this stack fits on. Prices as of June 2026, sources linked.
| Service | Plan | Monthly | What you get |
|---|---|---|---|
| Temporal on Miget ★ | 4 GiB plan | $25 | this whole stack, flat - no usage meters, and room left for your own apps |
| Temporal Cloud | Essentials | ~$100 | 1M actions + storage included, then $25-50 per million actions |
#vs. other PaaS
Estimated monthly cost of running this exact stack (2.3 GiB RAM, 5 GB disk, 3 containers) elsewhere, from published June 2026 rates.
| Platform | Est. monthly | Notes |
|---|---|---|
| Miget ★ | $25 flat | compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan |
| Heroku | ~$113 | no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown |
| DO App Platform | ~$32 | no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here) |
| Render | ~$29 | per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service |
| Railway | ~$23 | usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top |
| Fly.io | ~$14 | cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra |
Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.
#deploy it
On Miget
- Create a Compose Stack in app.miget.com pointing at the templates repository
- Set the stack path to
temporal -
Set the required variable:
SKIP_DB_CREATE, true on Miget after pre-creating the two databases (see template README)
- Deploy. Miget layers
compose.miget.yaml(RAM, privacy, volumes, managed services) automatically
Locally first?
Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:
git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/temporal
docker compose up -d Same files, same behavior. The template README covers connection strings and scaling notes.
#faq
How is Temporal different from Kestra or Prefect?
Those orchestrate tasks/flows you define declaratively or in scripts; Temporal makes arbitrary application code durable - the workflow IS your program, guaranteed to survive failures and resume exactly where it left off. It is the tool for long-running, must-not-lose-state business processes (payments, provisioning, sagas).
Why experimental, and what is the database step?
It uses the auto-setup image, which upstream deprecated for production in favor of the multi-service server - it works well at small-to-medium scale, and the badge says so. On Miget’s single-role managed Postgres you pre-create two databases (temporal, temporal_visibility) once and set SKIP_DB_CREATE=true; the README has the two SQL lines.
How do my workers connect?
Workers (your code, deployed as separate apps) dial the server over gRPC at temporal:7233 on the private network - no public ingress for the server. The UI is the only public surface. Register namespaces via the UI or the temporal CLI.
Ship Temporal today
One compose stack, 2.3 GiB of RAM, from $25/month flat, and it runs on your laptop with the same files.