# Wanderer

Trail database for saving and sharing routes and hikes.

- Replaces: [AllTrails](https://openlogs.fyi/alternatives/alltrails)
- Summary: Paid trail map services, such as AllTrails.
- Stack: Go (language)
- Deployment: docker_compose
- License: AGPL-3.0 (osi) [source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/README.md), read 2026-10-22)
- Difficulty: medium. 3 services (1 database or broker: meilisearch), 4 volume mounts, 2 env values to set, no elevated host access. Heuristic score 5 of 11: medium.
- Requirements: not stated
- Repository: [open-wanderer/wanderer](https://github.com/open-wanderer/wanderer)

## Install

1. Docker with the Compose plugin ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the compose file as docker-compose.yml ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml))

   ```yaml
   version: '3'
   
   x-common-env: &cenv
     MEILI_URL: http://search:7700
     MEILI_MASTER_KEY: vODkljPcfFANYNepCHyDyGjzAMPcdHnrb6X5KyXQPWo
   
   services:
     search:
       container_name: wanderer-search
       image: getmeili/meilisearch:v1.36.0
       environment:
         <<: *cenv
         MEILI_NO_ANALYTICS: "true"
       ports:
         - 7700:7700
       networks:
         - wanderer
       volumes:
         - ./data/data.ms:/meili_data/data.ms
       restart: unless-stopped
       healthcheck:
         test: curl --fail http://localhost:7700/health || exit 1
         interval: 15s
         retries: 10
         start_period: 20s
         timeout: 10s
     db:
       container_name: wanderer-db
       image: flomp/wanderer-db
       depends_on:
         search:
           condition: service_healthy
       environment:
         <<: *cenv
         POCKETBASE_ENCRYPTION_KEY: fde406459dc1f6ca6f348e1f44a9a2af
         POCKETBASE_PROXY_SECRET: dev-proxy-secret-change-me
         ORIGIN: http://localhost:3000
       ports:
         - "8090:8090"
       networks:
         - wanderer
       restart: unless-stopped
       volumes:
         - ./data/pb_data:/pb_data
         - ./data/plugins:/data/plugins
       healthcheck:
         test: ["CMD", "/curl", "--fail", "http://localhost:8090/health"]
         interval: 15s
         retries: 10
         start_period: 20s
         timeout: 10s
     web:
       container_name: wanderer-web
       image: flomp/wanderer-web
       depends_on:
         search:
           condition: service_healthy
         db:
           condition: service_healthy
       environment:
         <<: *cenv
         ORIGIN: http://localhost:3000
         BODY_SIZE_LIMIT: Infinity
         POCKETBASE_PROXY_SECRET: dev-proxy-secret-change-me
         PUBLIC_POCKETBASE_URL: http://db:8090
         PUBLIC_DISABLE_SIGNUP: "false"
         UPLOAD_FOLDER: /app/uploads
         UPLOAD_USER:
         UPLOAD_PASSWORD:
         OVERPASS_API_URL: https://overpass-api.de
         VALHALLA_URL: https://valhalla1.openstreetmap.de
         NOMINATIM_URL: https://nominatim.openstreetmap.org
         PUBLIC_MAP_MAX_POLYLINES: 100
       volumes:
         - ./data/uploads:/app/uploads
         # - ./data/about.md:/app/build/client/md/about.md
       ports:
         - "3000:3000"
       networks:
         - wanderer
       restart: unless-stopped
       healthcheck:
         test: ["CMD", "curl", "--fail", "http://localhost:3000/"]
         interval: 15s
         retries: 10
         start_period: 20s
         timeout: 10s
   # valhalla:
   #   image: ghcr.io/gis-ops/docker-valhalla/valhalla:latest
   #   ports:
   #     - "8002:8002"
   #   volumes:
   #     - ./data/valhalla:/custom_files
   #   environment:
   #     - tile_urls=https://download.geofabrik.de/europe/germany/bayern/oberbayern-latest.osm.pbf
   #     - use_tiles_ignore_pbf=True
   #     - force_rebuild=False
   #     - force_rebuild_elevation=False
   #     - build_elevation=True
   #     - build_admins=True
   #     - build_time_zones=True
   
   networks:
     wanderer:
       driver: bridge
   ```

3. Set the values the compose file needs ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml))

   ```text
   These variables have no default in the compose file: UPLOAD_PASSWORD, UPLOAD_USER. Compose reads them from the shell or from a .env file next to the compose file. Replace the placeholder values listed under Gotchas.
   ```

4. Start it ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml))

   ```bash
   docker compose up -d
   ```

5. Open the app ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml))

   ```text
   Open http://localhost:3000. The compose file publishes host port 3000 for the web service.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some images use the latest tag or no tag: Images without a pinned version: db: flomp/wanderer-db (no tag), web: flomp/wanderer-web (no tag). A later pull can get a different version. ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml), checked 2026-10-22)
- The compose file has placeholder values: Placeholder values: POCKETBASE_PROXY_SECRET is "dev-proxy-secret-change-me" (db), POCKETBASE_PROXY_SECRET is "dev-proxy-secret-change-me" (web). ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 7700 (search), 8090 (db), 3000 (web). A port without a host address listens on all host network interfaces. ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./data/data.ms at /meili_data/data.ms (search), ./data/pb_data at /pb_data (db), ./data/plugins at /data/plugins (db), ./data/uploads at /app/uploads (web). ([source](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 92
- Stars: 4014, forks: 201
- Last push: 2026-10-21 (0 days ago)
- Latest release: v0.21.0 on 2026-09-28 (23 days ago)

## Sources

- [Repository: https://github.com/open-wanderer/wanderer](https://github.com/open-wanderer/wanderer)
- [License: https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/LICENSE](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/LICENSE)
- [Business model: https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/README.md](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/README.md)
- [Compose file: https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml](https://github.com/open-wanderer/wanderer/blob/298d3369354862d96bd1f769880a047ca90e2b2e/docker-compose.yml)

---
Canonical: https://openlogs.fyi/tools/wanderer  
Last updated: 2026-10-22
