TREK is a self-hosted trip planner that runs in one Docker container. An alternative to TripIt and Wanderlog, with a privacy mode and about 400 MB of RAM.
By default, TREK contacts external services run by the project (place search and routing on the sponsor's servers); you can turn this off in the settings.
TREK is a trip planner that you host yourself. It is a web application in a single container; its data lives in two folders next to the Compose file, one for the database and one for uploads. You create trips, add places to them and look places up through a map search, and everything runs on your own server instead of in someone else's account.
According to the authors, TREK also covers day plans, bookings, costs, packing lists, shared trips and a journal. We have not tested those parts, so this page does not describe them in detail.
People who search for a TripIt or Wanderlog alternative usually want the same job done on their own hardware: one place for a trip's places, dates and plans that nobody else can switch off. TREK is built for that, and you control where the data is stored.
We have not compared TREK with TripIt or Wanderlog feature by feature, and we did not open the interface, so we make no claims about how it feels to use. What we did check is how it behaves on the server, including which hosts it talks to. That is the part of a self-hosted planner that is hard to see from the outside.
TREK_PLACES_ENABLED=false and TREK_SERVICES=off and captured the server's network traffic through login, trips, place search and reverse geocoding. The server contacted one external host, nominatim.openstreetmap.org, the public OpenStreetMap search service, and made no requests to the project's liketrek.com hosts.okTREK_SERVICES=off, the project's routing service answers "not available on this instance". We did not set up another routing service, so route calculation is untested.COOKIE_SECURE=false so sessions work over plain HTTP. If you put TREK behind an HTTPS proxy, remove it; we did not test the proxy setup.Is TREK open source? Yes, it is released under AGPL-3.0-only, and its source is public. You can use it for any purpose. The license has one main condition: if you offer a modified version to users over a network, you must give them its source code.
Does TREK send my data to the project's servers?
By default it contacts external services run by the project for place search and routing. The tested recipe turns that off with TREK_PLACES_ENABLED=false and TREK_SERVICES=off. In our server-side capture with those settings, the only outside host was nominatim.openstreetmap.org, and nothing went to liketrek.com. We did not capture traffic from a browser.
Does place search still work in private mode? Yes. Searching for a place and looking up an address both worked, using OpenStreetMap's Nominatim.
Can TREK calculate routes in private mode? Not with the project's built-in routing: that service is disabled and returns an error. Another routing service can be chosen by an admin, but we did not configure or test one.
TREK vs TripIt or Wanderlog: which should you choose? We have not compared them. Choose TREK if you want to host your trip planner yourself and see which outside services it uses. Stay with the service you use now if you need something we have not tested, such as the interface, bookings or shared editing.
Choose TREK if you want a self-hosted trip planner and care about where the server sends requests: in the private configuration we verified, it talked only to OpenStreetMap's public search service. Do not rely on it for routing or for features beyond trips and place search until you have tried the interface yourself, because our test never opened it. Plan for a large image, around 400 MB of RAM and a first-run password change.
We started this Compose file in a fresh Debian 13 virtual machine on Nov 4, 2026 (Docker 29.9.2, Compose v5.7.0, emulated VM, 4 vCPU, 4 GB) and checked it through TREK's own API: the health endpoint answered, the admin logged in, a trip was created and read back, and place search and reverse geocoding returned results. The first response took about a minute after docker compose up -d (the image pull took about 2 minutes). The container used about 390 MiB. We did not open the interface. The image below is mauriceboe/trek:5.1.0, the tag we ran; the source repository is https://github.com/liketrek/TREK, and that repository's README and Compose file also point at mauriceboe/trek.
Docker Compose with mauriceboe/trek:5.1.0, including TREK_PLACES_ENABLED=false and TREK_SERVICES=off. An earlier run without those two variables did contact the project's place service; the file below is the one checked on Nov 4.
.env with a fresh encryption key:echo "ENCRYPTION_KEY=$(openssl rand -hex 32)" > .env
compose.yaml. Replace <ADMIN_PASSWORD> with your own; it is used only at the first start.services:
app:
image: mauriceboe/trek:5.1.0
container_name: trek
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
- KILL
tmpfs:
- /tmp:noexec,nosuid,size=128m
ports:
- "127.0.0.1:3000:3000"
environment:
- NODE_ENV=production
- PORT=3000
- ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
- TZ=${TZ:-UTC}
- LOG_LEVEL=${LOG_LEVEL:-info}
- ALLOWED_ORIGINS=${ALLOWED_ORIGINS:-}
- COOKIE_SECURE=false # only for plain HTTP; remove behind an HTTPS proxy
- [email protected]
- ADMIN_PASSWORD=<ADMIN_PASSWORD>
- TREK_PLACES_ENABLED=false # do not contact the project's places service
- TREK_SERVICES=off
volumes:
- ./data:/app/data
- ./uploads:/app/uploads
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 10m
max-file: "3"
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:$${PORT:-3000}/api/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
COOKIE_SECURE=false is only for plain HTTP. Remove it behind an HTTPS proxy. ADMIN_EMAIL and ADMIN_PASSWORD are used only when no users exist yet.
docker compose pull
docker compose up -d
curl -s http://127.0.0.1:3000/api/health
The health endpoint should answer {"status":"ok"}. The login response asks for a password change at first sign-in; we did not go through that screen. The port is bound to 127.0.0.1. Putting an HTTPS reverse proxy in front, and FORCE_HTTPS, was not tested.
Back up ./data and ./uploads before any update (the update path was not tested). To remove the test setup: docker compose down -v, then docker rmi mauriceboe/trek:5.1.0 and delete ./data and ./uploads.
The official Compose file uses the floating tag latest. We did not run that tag. Pin 5.1.0, as above.
Not investigated: Helm, Unraid, a from-source build and package-manager packages.
TripIt and Wanderlog are trademarks of their respective owners. open-source.store is not affiliated with them.
Go, gRPC and Protobuf done right, LLM agents in production, and the hard parts of shipping a first product.
Show that TREK is listed as an open-source alternative. Paste into your README: