OpenLogs

All tools

Wanderer

Trail database for saving and sharing routes and hikes.

Replaces

Paid trail map services, such as AllTrails.

All open-source alternatives to AllTrails

Difficulty

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.

Stack

Go (language)

Deployment

docker_compose

Requirements

Not stated.

License

AGPL-3.0 (OSI-approved open source)

Read from github.com/open-wanderer/wanderer/blob/298d336/LICENSE

Business model

Unknown

The README at the pinned commit does not state a business model, so it stays unknown.

Source: github.com/open-wanderer/wanderer/blob/298d336/README.md, read on .

Repository

open-wanderer/wanderer

GitHub stats

Stars
4,014
Forks
201
Open issues and pull requests
92
Last push
2026-10-21
Latest release
v0.21.0
Released
2026-09-28

From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as AGPL-3.0.

Compose file

Config check passed docker compose config exited 0 on this exact file on 2026-10-22.
docker-compose.yml Version 1
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

From the app's own repository: github.com/open-wanderer/wanderer/blob/298d336/docker-compose.yml.

Compose file from the app repository.

Install

  1. Docker with the Compose plugin (github.com/open-wanderer/wanderer/blob/298d336/docker-compose.yml)

    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 (github.com/open-wanderer/wanderer/blob/298d336/docker-compose.yml)

    Use the compose file shown above.

  3. Set the values the compose file needs (github.com/open-wanderer/wanderer/blob/298d336/docker-compose.yml)

    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 (github.com/open-wanderer/wanderer/blob/298d336/docker-compose.yml)
    docker compose up -d
  5. Open the app (github.com/open-wanderer/wanderer/blob/298d336/docker-compose.yml)

    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

Signals

  • Open issues and pull requests: 92
  • Last push: 2026-10-21 (0 days before this page was built)
  • Latest release: v0.21.0 on 2026-09-28 (23 days before this page was built)