Deploy Wanderer

Trail database for GPX hikes, rides and route planning

Deploy Wanderer

/pb_data

Just deployed

/meili_data

Deploy and Host Wanderer on Railway

Wanderer is an open-source trail database for people who walk, run and ride. Upload a GPX, TCX or FIT recording and it becomes a trail page with distance, an elevation profile, an interactive map, photos, waypoints and a summit book for repeat visits. Hikers, trail runners and outdoor clubs use it to keep a permanent record of routes a tracking app buries behind a subscription. Instances speak ActivityPub, so a self-hosted Wanderer can follow users elsewhere.

Deploy Wanderer on Railway and this template gives you the full three-tier setup rather than one container. The web service runs the SvelteKit application and is the address your users visit. The db service runs Wanderer's PocketBase backend, holding every trail, photo and GPX file on a persistent volume. The search service runs Meilisearch, powering the trail library, map queries and place search. The app reaches both over the private network and proxies uploads through the web tier, so no storage endpoint is public.

Wanderer web, PocketBase and Meilisearch services on Railway

Getting Started with Wanderer on Railway

Open the web service's URL once the deploy is green. Wanderer ships no default account, so click Login → Register and create yours. There is no privileged first user — Wanderer has no admin role, and the site is administered through the PocketBase dashboard. Now click New Trail, then Upload file, and drop in a GPX export from your watch. Wanderer parses it at once: distance, duration and elevation gain appear in the sidebar, the route is drawn on the map, and the category is guessed. Name the trail, add a location and a photo, then hit Save Trail. If it appears under Trails with its thumbnail the stack is working — that page comes from Meilisearch and the photo from PocketBase. Then set PUBLIC_DISABLE_SIGNUP to true to close registration, and visit /_/ on the db service for the PocketBase dashboard.

Wanderer trail library with a saved Bavarian hike Trail page showing route stats and elevation profile Wanderer map explorer with the route drawn over Eibsee Strava, komoot and Hammerhead plugins in Wanderer settings

About Hosting Wanderer

Wanderer solves a problem every long-time hiker hits: routes scattered across a watch vendor's cloud, a phone app and a folder of GPX files, none of it searchable. Self-hosting puts it in one place you own, with no activity cap. Key features:

  • GPX, TCX and FIT import, with distance, duration and elevation derived automatically
  • Route planning with auto-routing, reorderable anchors and points of interest
  • Photos, waypoints and a per-trail summit book
  • Lists for grouping trails, with visibility set per list and per trail
  • Full-text and map-viewport search across trails and lists
  • ActivityPub federation, so instances can follow each other
  • Strava, komoot and Hammerhead plugins for importing activities and sending routes

Wanderer's backend is PocketBase, a single Go binary with an embedded SQLite database and file store, which is why this template needs no separate database service — the db service is the database, and its volume holds every record and upload. Meilisearch sits beside it as a derived index that PocketBase writes into and the web tier queries for anything list-shaped. It stores no primary data, but keeps its own volume so a redeploy does not force a reindex.

Why Deploy Wanderer on Railway

Railway removes the parts of a three-container stack that are usually the work:

  • Private networking between web, PocketBase and Meilisearch, no ports to publish
  • Persistent volumes on both stateful services out of the box
  • A generated HTTPS domain, which Wanderer needs for ActivityPub identities
  • One-click redeploys when a new Wanderer release ships
  • Usage-based pricing, so a personal instance costs very little

Common Use Cases

  • A personal route archive that outlives whichever watch or phone app you use now
  • A hiking or cycling club's shared library of local routes
  • Trip planning: draft a route on the map, save it, export it to a GPS device
  • A federated community instance for a region or sport

Dependencies for Wanderer

  • webflomp/wanderer-web:v0.20.0. The SvelteKit frontend and API. Every browser request goes here; it also proxies uploads out of PocketBase.
  • db — a one-layer image over flomp/wanderer-db:v0.20.0, built from the source repository. Wanderer's PocketBase backend, plus a boot step that creates the dashboard superuser before the port opens, and the three integration plugins.
  • searchgetmeili/meilisearch:v1.36.0. Indexes trails, lists and actors. Private only.

Upstream: open-wanderer/wanderer, AGPL-3.0.

Environment Variables Reference

VariableServicePurpose
ORIGINweb, dbPublic URL of the frontend. Used for email links and ActivityPub ids
POCKETBASE_SUPERUSER_EMAILdbDashboard login created on first boot
POCKETBASE_SUPERUSER_PASSWORDdbDashboard password, minimum 10 characters
POCKETBASE_ENCRYPTION_KEYdbExactly 32 characters. Encrypts stored secrets
PUBLIC_DISABLE_SIGNUPwebSet true to close registration after signing up
PUBLIC_PRIVATE_INSTANCEwebSet true to hide content from logged-out users
POCKETBASE_SMTP_*dbHost, port, credentials and sender for outgoing email
VALHALLA_URL, NOMINATIM_URL, OVERPASS_API_URLwebRouting, geocoding and points of interest. Default to the public OpenStreetMap services

Deployment Dependencies

Hardware Requirements for Self-Hosting Wanderer

ResourceMinimumRecommended
CPU1 vCPU across the three services2 vCPU
RAM1 GB total2 GB, mostly Meilisearch indexing
Storage5 GB on db, 5 GB on searchGrow db with your photos
RuntimeNode 22, Go, Rust (all in the images)

Storage is what grows: every uploaded photo lands on the db volume beside the GPX.

Self-Hosting Wanderer with Docker

Upstream ships a Compose file:

git clone https://github.com/open-wanderer/wanderer.git
cd wanderer
docker compose up -d

Set POCKETBASE_ENCRYPTION_KEY to a 32-character value and MEILI_MASTER_KEY to something long before exposing it. Since v0.20.0 the Strava, komoot and Hammerhead integrations are separate WASM bundles you install by hand:

mkdir -p data/plugins
curl -fsSL -o strava.tar.gz \
  https://github.com/open-wanderer/wanderer/releases/download/v0.20.0/wanderer-plugin-strava.tar.gz
tar -xzf strava.tar.gz -C data/plugins
docker compose restart db

The Railway template bakes all three into the db image, so they are already listed under Settings → Plugins and only need your provider credentials.

Is Wanderer Free to Self-Host?

Wanderer is open source under AGPL-3.0 and free to run for as many users as you like. There is no paid edition, no license key and no feature gate. On Railway you pay only for the compute and storage the three services use, which for a personal instance is small.

FAQ

What is Wanderer? Wanderer is a self-hosted trail database. It imports GPX, TCX and FIT recordings, turns them into trail pages with maps, elevation profiles and photos, and lets you search, group and share them. It is open source and federates over ActivityPub.

What does this Railway template deploy? Three services: the Wanderer web application, its PocketBase backend on a persistent volume, and Meilisearch. The web service gets a public HTTPS domain, and the PocketBase dashboard is published too so you can administer it.

Why does Wanderer need Meilisearch as a separate service? Every list view — the trail library, the map viewport, place search, the trail picker inside lists — is a Meilisearch query, not a database scan. It holds a derived index of what PocketBase stores, but the app will not serve those pages without it.

Where are my trails, GPX files and photos actually stored? All of it lives in PocketBase's SQLite database and file store on the db volume. There is no separate database service and no object storage, so backing up that volume backs up the instance.

How do I stop strangers registering on my self-hosted Wanderer instance? Set PUBLIC_DISABLE_SIGNUP to true on the web service once your account exists. To also hide existing trails from anyone not logged in, set PUBLIC_PRIVATE_INSTANCE to true.

How do I connect Strava or komoot to self-hosted Wanderer? The plugin bundles are already installed. Go to Settings → Plugins, open the settings panel for the provider, supply the API credentials from its developer portal, and switch the plugin on.

Can I send email from a self-hosted Wanderer instance? Yes. Set POCKETBASE_SMTP_ENABLED to true on the db service with POCKETBASE_SMTP_HOST, _PORT, _USERNAME, _PASSWORD and _SENDER_ADDRESS. They are applied on every boot, so password resets work without opening the dashboard.


Template Content

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
47
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51