Dawarich
Self-hosted location history - a Google Maps Timeline replacement that keeps your movements yours.
One-click deploy, from $25/mo on a Miget plan.
Dawarich is a privacy-first replacement for Google Maps Timeline: import your location history from Google Takeout, OwnTracks, Overland, or GPX, and explore your trips, the places and cities and countries you have visited, and your travel stats on your own interactive map. None of it goes to Google.
It is a four-service stack: the web app (port 5000), a Sidekiq worker for imports and reverse geocoding, a PostgreSQL database with the PostGIS extension, and Valkey. Because PostGIS is not a standard managed extension, the database runs as a private sidecar on the expected image (the same approach the immich template takes); Valkey is managed.
It is flagged experimental because it is genuinely heavier than a single-container app - four services, a hard PostGIS dependency, and a worker that shares storage with the web app. Everything is wired and validated; just give it room and read the first-login notes.
Upstream project: Dawarich
#what you get
- Import from Google Takeout, OwnTracks, Overland, GPX
- Map of trips, visits, and the places you have been
- Travel stats: cities, countries, distance over time
- PostGIS database (private sidecar) + managed Valkey
- Web + Sidekiq worker from one image (role-selected)
- AGPL-3.0; your location history, entirely yours
#topology
| Service | Role | Public |
|---|---|---|
| web | app + map UI (:5000) | yes |
| sidekiq | imports / geocoding worker (private) | no |
| db / redis | PostGIS sidecar / managed Valkey | no |
#miget sizing
// this stack needs
3.5 GiB RAM · 32 GB disk · 4 services
Give it ~4 GB: web and worker ~1 GB each, PostGIS ~1 GB. Imported tracks live in PostGIS and on the shared storage volume; the web and worker share storage (RWX).
Hobby - recommended fit
$25/mo
2 vCPU · 4 GiB · 80 GiB disk
Headroom for your own apps: 8 GiB at $49/mo
Professional - production
$85/mo
4 vCPU · 8 GiB · 50 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 |
|---|---|---|---|
| Dawarich on Miget ★ | 4 GiB plan | $25 | this whole stack, flat - no usage meters, and room left for your own apps |
| Google Maps Timeline | free | usage-based | free, but paid for with your location data |
Dawarich keeps your entire location history on your own infrastructure instead of a data-mining service.
#vs. other PaaS
Estimated monthly cost of running this exact stack (3.5 GiB RAM, 32 GB disk, 4 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 | ~$175 | no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown |
| Render | ~$52 | per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service |
| DO App Platform | ~$47 | no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here) |
| Railway | ~$40 | usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top |
| Fly.io | ~$25 | 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
dawarich -
Set the required variables:
SECRET_KEY_BASE, Rails secret (openssl rand -hex 64)DB_PASSWORD, the PostGIS database passwordAPPLICATION_HOSTS, the https domain - or Rails blocks every request
- 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/dawarich
docker compose up -d Same files, same behavior. The template README covers connection strings and scaling notes.
#faq
What does this replace?
Google Maps Timeline, which mines your every move. Dawarich keeps your entire location history on infrastructure you own, imported from the same Google Takeout export plus OwnTracks, Overland, and GPX.
Why a PostGIS sidecar instead of managed Postgres?
Dawarich needs the PostGIS spatial extension, which is not a standard managed-database feature. So the template runs Postgres with PostGIS as a private sidecar on its own volume, the same pattern the immich template uses for its specialized database.
Why is it marked experimental?
It is a four-service stack (web, worker, PostGIS, Valkey) around 4 GB, heavier than the catalogue’s single-container apps, and Dawarich moves quickly. Everything is wired and validated, but set APPLICATION_HOSTS correctly and read the first-login notes before relying on it.
Ship Dawarich today
One compose stack, 3.5 GiB of RAM, from $25/month flat, and it runs on your laptop with the same files.