Your trips. Your plan. Your server.
That is the tagline on TREK — a self-hosted, real-time collaborative travel planner that has climbed to 6.8k GitHub stars and 614 forks while most travel apps still require surrendering itineraries, photos, and location history to a SaaS vendor.
Latest release: v3.1.2 (June 2026), two days after v3.1.1 bug fixes. TREK ships maps, budgets, packing lists, a journey journal, expense splitting, an Atlas of visited countries, AI assistance, SSO, and a installable PWA — all on your hardware, backed by SQLite, synced over WebSockets.
TL;DR
| Detail | TREK |
|---|---|
| Repo | github.com/mauriceboe/TREK |
| Latest version | v3.1.2 (June 2026) |
| License | AGPL-3.0 |
| Stars / forks | ~6.8k / ~614 |
| Demo | demo.liketrek.com |
| Backend | NestJS 11, Node.js, SQLite, ws |
| Frontend | React, Vite, TypeScript, Tailwind, Zustand |
| Auth | JWT, OAuth 2.1, OIDC, Passkeys, TOTP MFA |
| Maps | Leaflet + Mapbox GL (3D dashboard) |
| Weather | Open-Meteo (no API key) |
| Deploy | Docker, Compose, Helm/K8s, Unraid, PWA |
What TREK Actually Does
TREK is not a static itinerary PDF generator. It is a live collaborative workspace for trip planning — closer to Wanderlog or TripIt in feature scope, but running on infrastructure you control.
Core modules
| Module | What it does |
|---|---|
| Dashboard | Trip overview with 3D map visualization |
| Trip planner | Day plans, routes, POIs |
| Journey journal | Trip logging and narrative |
| Costs | Budget tracking with expense splitting |
| Packing lists | Shared checklists per trip |
| Atlas | Map of visited countries (geoBoundaries data) |
| Vacay planner | Seasonal / vacation planning workflows |
| Admin panel | Users, backups, auto-backup schedules |
Real-time sync means multiple travelers can edit the same trip simultaneously — changes propagate over WebSocket (/ws) without manual refresh. That architecture choice matters for group trips where one person adds a restaurant while another adjusts the route.
AI built in
TREK includes AI features in the product surface (per the README hero). The repository ships MCP.md — Model Context Protocol documentation for integrating external AI tools with TREK's data layer. If you are building agent workflows that need structured trip context (dates, POIs, budgets), MCP is the integration path rather than scraping the UI.
For broader MCP patterns, see our MCP complete guide.
Get Started in 30 Seconds
The fastest path is Docker:
ENCRYPTION_KEY=$(openssl rand -hex 32) docker run -d -p 3000:3000 \
-e ENCRYPTION_KEY=$ENCRYPTION_KEY \
-v ./data:/app/data -v ./uploads:/app/uploads mauriceboe/trek
Open http://localhost:3000.
On first boot, TREK seeds an admin account. Either set environment variables:
-e [email protected] -e ADMIN_PASSWORD='your-secure-password'
Or read the generated credentials from the container log:
docker logs trek
Critical volume mount rule
Mount only ./data and ./uploads. Never mount a volume at /app — doing so hides the application code baked into the image and the container fails with Cannot find module 'tsconfig-paths/register'. If you previously used a full /app mount, switch to the two-directory pattern; your existing data in data/ and uploads/ is preserved.
| Path | Contents |
|---|---|
./data/travel.db | SQLite database |
./data/logs/trek.log | Auto-rotated logs |
./uploads/ | User uploads |
Production Deployment
Docker Compose
Full compose examples with secure defaults are in the TREK docs. Production pattern: TLS-terminating reverse proxy in front, WebSocket upgrade support on /ws.
Helm (Kubernetes)
helm repo add trek https://mauriceboe.github.io/TREK
helm repo update
helm install trek trek/trek
See charts/README.md for values — including PVC annotation support added in recent releases.
Unraid
TREK ships an unraid-template.xml and ca_profile.xml for Unraid Community Apps submission — relevant if your homelab already runs Immich or other self-hosted media stacks.
Reverse proxy
TREK requires WebSocket upgrade support on /ws for real-time sync. Nginx and Caddy examples are in the repository docs. Without WebSocket passthrough, collaboration appears to work locally but sync breaks behind the proxy.
Updating
docker compose pull && docker compose up -d
Or for plain Docker:
docker pull mauriceboe/trek
docker rm -f trek
docker run -d --name trek -p 3000:3000 \
-v ./data:/app/data -v ./uploads:/app/uploads \
--restart unless-stopped mauriceboe/trek
Check existing mount paths first: docker inspect trek --format '{{json .Mounts}}'.
Install as PWA (No App Store)
TREK works as a Progressive Web App:
- Open TREK over HTTPS (required for PWA install)
- iOS: Share → Add to Home Screen
- Android: Menu → Install app (or Add to Home Screen)
The app launches fullscreen with its own icon — useful on trip days when you want quick access to the day plan without browser chrome.
Security and Encryption
TREK encrypts sensitive data with ENCRYPTION_KEY. To rotate keys (e.g. upgrading from a version that derived encryption from JWT_SECRET):
docker exec -it trek node --import tsx scripts/migrate-encryption.ts
The script creates a timestamped DB backup before changes and prompts for old and new keys (input is not echoed).
Authentication stack:
- JWT for session tokens
- OAuth 2.1 + OIDC for enterprise SSO
- Passkeys (WebAuthn) for passwordless login
- TOTP MFA for second factor
Backups are configurable in the Admin Panel — manual create/restore plus scheduled auto-backups with retention policies.
TREK vs SaaS Travel Apps
| Dimension | TREK (self-hosted) | Wanderlog / TripIt (SaaS) |
|---|---|---|
| Data location | Your server / homelab | Vendor cloud |
| Real-time collab | WebSocket on your infra | Vendor-managed |
| Cost | Server + maintenance | Subscription |
| Customization | Full source (AGPL) | None |
| Offline / PWA | Installable PWA | Native apps only |
| AI integration | MCP documented | Vendor-locked |
TREK fits the same self-hosting philosophy as files.md local-first notes and Immich for photos: your data, your rules, with AGPL ensuring network-service modifications stay open if you offer TREK commercially to others.
Atlas and Data Sources
The Atlas module visualizes visited countries and sub-national regions. Boundaries come from geoBoundaries (Runfola et al., 2020), licensed CC BY 4.0. Full third-party attributions are in NOTICE.md.
Weather data uses Open-Meteo — no API key required, which keeps homelab setup friction low.
Who Should Use TREK
Good fit:
- Families or friend groups planning shared trips with live editing
- Privacy-conscious travelers who do not want itineraries in a third-party cloud
- Homelab users already running Docker/Compose/K8s stacks
- Teams wanting SSO (OIDC) on an internal trip-planning tool
Less ideal:
- Users who want zero maintenance — self-hosting has ops cost
- Trips requiring deep airline/hotel GDS integration (TREK is planner-first, not booking-first)
- AGPL-averse organizations that cannot comply with network-service copyleft
Related ExplainX coverage
| Post | Connection |
|---|---|
| Immich self-hosted photos | Another AGPL homelab stack (NestJS family) |
| files.md local-first notes | Self-hosted personal data pattern |
| MCP guide | TREK's MCP.md integration path |
| Notion + Cursor agents | Collaborative task boards — different domain, same real-time workflow idea |
Summary
TREK v3.1.2 is the most complete open-source answer to "why does my trip planner need to live in someone else's cloud?" — real-time collaboration, 3D maps, budgets with expense splitting, packing lists, journal, Atlas, PWA install, Passkeys, and documented MCP hooks, deployable in one Docker command.
6.8k stars suggest the audience was waiting for this. If you are already self-hosting photos and notes, adding trips is a natural next tab.
Last updated: June 26, 2026. Version and stats from github.com/mauriceboe/TREK and release v3.1.2.