muro ships as a Docker image you can run on any Linux box that speaks Postgres. The license is included on the Self-host plan. Reasons to switch from hosted to self-hosted come up in customer conversations every week, but they aren't always good reasons. Here's an honest split.
When self-hosting is the right call
- 01You already run other services on Hetzner / OVH / a private cloud. The marginal cost of one more container is near zero. You're not adding a new operational burden — you're reusing an existing one.
- 02You have data residency requirements that hosted EU doesn't cover. Some German Bundesländer want the data on a server they can physically point at; some healthcare networks need it inside their own VPC. Hosted muro is in EU but the box isn't yours.
- 03You're running 20+ websites and want one inbox. The hosted Pro tier caps at 10 sites; Self-host has no limit. Beyond ~30 sites, the Self-host monthly fee is cheaper than custom-quoting an extended hosted plan.
- 04You want to peer the chat traffic with your own monitoring. Sentry, Grafana, Datadog — your existing observability stack picks up the muro container the same way it picks up everything else. No separate vendor billing for logs.
- 05You want to fork. The codebase is source-available on the Self-host plan; some teams customise the branding deeper, add a column to a query, or change the rate limit logic. We don't merge those forks back unless they're generic — but you keep yours.
- 06Your industry asks for it. Defence, government, anything that needs an air-gapped option. Self-host runs disconnected from the internet for everything except outbound email (and you can swap that for a local relay).
When you should stay on hosted
- 01You have fewer than 5 websites. The hosted Team or Pro plan is cheaper than your time spent on patches.
- 02You don't have a dev who can run `docker compose up` on a server you administer. Self-hosting muro is intentionally simple, but it's not zero. You will see failed Postgres backups, expired TLS certs, a Hetzner reboot one Sunday morning.
- 03You want the latest features on day one. Hosted tracks
main. Self-host tracks tagged releases (~1 release/month). The features land on hosted first by ~30 days. - 04Your compliance question is GDPR. GDPR is fine on hosted muro — EU residency, signed DPA, public sub-processor list, audit trail, right-to-erasure. Self-host doesn't add GDPR strength; it just shifts the burden to you.
What self-hosting actually involves
The minimum viable deploy: one VPS with 4 GB RAM (we recommend 8), Postgres 17, Soketi for real-time, an SES or Postmark account for email. Total infra cost on Hetzner CX22 + managed Postgres on Neon: ~€18/mo. Plus the $99/mo Self-host license. Total all-in: ~$120/mo, fixed regardless of usage.
A pragmatic third path
Some teams start on hosted, get to feature-parity confidence in 2-3 months, then migrate to self-host once they're sure they want to commit to operating it. We support migration in both directions — there's a muro-export CLI on the Self-host plan that pulls everything as a SQL dump + media zip, and the inverse importer reads from a hosted JSON export.
If you're not sure, stay on hosted. The plan upgrade is one click. Migrating later is two hours of work and we help.