liketrek/TREKPublic

A self-hosted travel/trip planner with real-time collaboration, interactive maps, PWA support, SSO, budgets, packing lists, and more.

AI summary: A self-hosted travel planner to visually organize trips, track expenses, and manage reservations with AI assistance.

Stars
14.5K
+61 today
Forks
1.3K
Watchers
41
Open issues
2
Open PRs
5
Contributors
~86
Commits
2.8K
Branches
58

TypeScriptAGPL-3.0Created Mar 19, 2026Last push 2d agoLatest release v4.3.3+217 stars this week+1.4K this month

Quick answers

What is TREK?
A self-hosted travel planner to visually organize trips, track expenses, and manage reservations with AI assistance.
What does TREK do?
TREK is an open-source, self-hosted travel planning application serving as an alternative to commercial services like Wanderlog. It provides a highly visual, drag-and-drop interface for users to build comprehensive day plans, plot routes on interactive maps, and collaborate in real-time with other travelers. Beyond route mapping, the platform tracks shared trip budgets, manages ticket reservations, and stores essential documents in one centralized location. Additionally, it integrates a built-in MCP server that allows AI agents to automatically generate packing lists, plan itineraries, and analyze trip costs based on user prompts.
Who is TREK for?
TREK is designed for frequent travelers, homelab enthusiasts, and friend groups who want a private, comprehensive tool to plan and document their trips. It is ideal for users looking for a feature-rich, self-hosted alternative to proprietary travel planners.
How do I get started with TREK?
docker compose up -d
How popular is TREK on GitHub?
liketrek/TREK has 14,528 stars and 1,258 forks on GitHub, and gained 217 stars in the last 7 days.
What license does TREK use?
liketrek/TREK is released under the AGPL-3.0 license.

Star history

since Jul 29, 2026
05K10KJul 2026Aug 2026Sep 2026Oct 2026
14.5K stars as of Oct 2, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Update history

1 recorded
  • Oct 4, 2026Previously tracked as mauriceboe/TREK; its 1 daily snapshot and 3 trending appearances were merged into this profile. Stars: 11,124 on 2026-07-29 under the old name, 14,528 on 2026-10-02 (+3,404).

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 2 commits2026-03-19: 39 commits2026-03-20: 6 commits2026-03-21: 14 commits2026-03-22: 8 commits2026-03-23: 8 commits2026-03-24: 17 commits2026-03-25: 6 commits2026-03-26: 9 commits2026-03-27: 5 commits2026-03-28: 21 commits2026-03-29: 48 commits2026-03-30: 65 commits2026-03-31: 40 commits2026-04-01: 52 commits2026-04-02: 15 commits2026-04-03: 67 commits2026-04-04: 51 commits2026-04-05: 63 commits2026-04-06: 27 commits2026-04-07: 12 commits2026-04-08: 12 commits2026-04-09: 23 commits2026-04-10: 26 commits2026-04-11: 27 commits2026-04-12: 31 commits2026-04-13: 21 commits2026-04-14: 31 commits2026-04-15: 30 commits2026-04-16: 30 commits2026-04-17: 18 commits2026-04-18: 22 commits2026-04-19: 12 commits2026-04-20: 21 commits2026-04-21: 47 commits2026-04-22: 22 commits2026-04-23: 11 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 8 commits2026-04-27: 4 commits2026-04-28: 5 commits2026-04-29: 1 commit2026-04-30: 1 commit2026-05-01: 1 commit2026-05-02: 0 commits2026-05-03: 5 commits2026-05-04: 2 commits2026-05-05: 0 commits2026-05-06: 3 commits2026-05-07: 2 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 2 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 4 commits2026-05-14: 0 commits2026-05-15: 2 commits2026-05-16: 1 commit2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 2 commits2026-05-25: 3 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 2 commits2026-06-17: 0 commits2026-06-18: 2 commits2026-06-19: 11 commits2026-06-20: 5 commits2026-06-21: 4 commits2026-06-22: 7 commits2026-06-23: 2 commits2026-06-24: 1 commit2026-06-25: 4 commits2026-06-26: 9 commits2026-06-27: 22 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 2 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 2 commits2026-07-05: 2 commits2026-07-06: 3 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 3 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 1 commit2026-07-17: 1 commit2026-07-18: 7 commits2026-07-19: 3 commits2026-07-20: 5 commits2026-07-21: 10 commits2026-07-22: 0 commits2026-07-23: 13 commits2026-07-24: 20 commits2026-07-25: 46 commits2026-07-26: 37 commits2026-07-27: 34 commits2026-07-28: 8 commits2026-07-29: 54 commits2026-07-30: 3 commits2026-07-31: 2 commits2026-08-01: 16 commits2026-08-02: 11 commits2026-08-03: 15 commits2026-08-04: 4 commits2026-08-05: 3 commits2026-08-06: 6 commits2026-08-07: 22 commits2026-08-08: 23 commits2026-08-09: 43 commits2026-08-10: 59 commits2026-08-11: 38 commits2026-08-12: 16 commits2026-08-13: 10 commits2026-08-14: 12 commits2026-08-15: 12 commits2026-08-16: 9 commits2026-08-17: 14 commits2026-08-18: 25 commits2026-08-19: 1 commit2026-08-20: 14 commits2026-08-21: 11 commits2026-08-22: 5 commits2026-08-23: 30 commits2026-08-24: 1 commit2026-08-25: 41 commits2026-08-26: 2 commits2026-08-27: 17 commits2026-08-28: 73 commits2026-08-29: 35 commits2026-08-30: 5 commits2026-08-31: 2 commits2026-09-01: 29 commits2026-09-02: 30 commits2026-09-03: 15 commits2026-09-04: 52 commits2026-09-05: 24 commits2026-09-06: 39 commits2026-09-07: 24 commits2026-09-08: 18 commits2026-09-09: 22 commits2026-09-10: 6 commits2026-09-11: 20 commits2026-09-12: 48 commits2026-09-13: 50 commits2026-09-14: 14 commits2026-09-15: 6 commits2026-09-16: 18 commits2026-09-17: 24 commits2026-09-18: 6 commits2026-09-19: 29 commits2026-09-20: 24 commits2026-09-21: 17 commits2026-09-22: 18 commits2026-09-23: 41 commits2026-09-24: 6 commits2026-09-25: 10 commits2026-09-26: 5 commits
2,500 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    14,528 stars

  • Very active

    2,500 commits in 52 weeks

  • Well documented

    High community health score

  • Continuous integration

    Automated checks passing

  • Repeat trending

    3 trending appearances

What TREK does

TREK is an open-source, self-hosted travel planning application serving as an alternative to commercial services like Wanderlog. It provides a highly visual, drag-and-drop interface for users to build comprehensive day plans, plot routes on interactive maps, and collaborate in real-time with other travelers. Beyond route mapping, the platform tracks shared trip budgets, manages ticket reservations, and stores essential documents in one centralized location. Additionally, it integrates a built-in MCP server that allows AI agents to automatically generate packing lists, plan itineraries, and analyze trip costs based on user prompts.

TREK is designed for frequent travelers, homelab enthusiasts, and friend groups who want a private, comprehensive tool to plan and document their trips. It is ideal for users looking for a feature-rich, self-hosted alternative to proprietary travel planners.

  • Interactive trip mapping: Features a drag-and-drop planner paired with 3D terrain maps to optimize daily travel routes.
  • Expense splitting: Tracks multi-currency trip costs and calculates who owes whom, similar to Splitwise.
  • Real-time collaboration: Utilizes WebSockets to instantly sync itinerary changes, chat messages, and polls across multiple users.
  • Reservation management: Imports and organizes flights, hotels, and tickets from booking confirmation emails or PDFs.
  • AI automation: Exposes a built-in MCP server allowing AI assistants to plan days, build budgets, and create packing lists.

Where teams use it

Group trip coordination

Friend groups use the platform to collaboratively plan itineraries, vote on activities, and split shared expenses equitably.

Offline travel access

Travelers install the PWA on their mobile devices to access maps, tickets, and plans reliably without cellular service.

AI-assisted itinerary generation

Users connect their AI assistants via the MCP server to automatically draft day-by-day travel plans for new destinations.

Homelab travel archiving

Privacy-conscious individuals host the app locally to securely store their travel history, photos, and passport documents.

Getting started: docker compose up -d

README

main branch
TREK
your trip. your plan.

A self-hosted, real-time collaborative travel planner — with maps, budgets, packing lists, a journal, and AI built in.


Demo   Docker   Sonar Quality Gate   GitHub Actions Workflow Status   Discord   Roadmap   Ko-fi   BMAC
License Latest Release Docker Pulls Stars


TREK, a tour of the app

What you get

Plan, track, share
See all features

Most of what follows is an addon an admin switches on or off. Lists, Costs, Documents, Collab, Vacay and Atlas ship on; Journey, Collections, MCP, AI Parsing and AirTrail ship off and are marked below.

🧭 Planning
  • Day plans: drag places between days and reorder inside a day, with undo. Notes and bookings drag the same way, and a map marker drops straight onto a day
  • Maps: Leaflet, Mapbox GL or MapLibre GL (OpenFreeMap, no token), with clustering, photo markers and route lines. 3D buildings and terrain are Mapbox only
  • Place search: Google Places when a key is set (photos, ratings, opening hours), otherwise OpenStreetMap with no key
  • Place enrichment: descriptions, facts, hours and photo candidates from OpenStreetMap, Wikipedia, Wikidata and Wikimedia Commons
  • POI explore: pull OpenStreetMap POIs by category for the current viewport over Overpass
  • Import: shared Google Maps and Naver Maps lists, plus GPX, KML and KMZ files
  • Export: GPX of a trip's places and tracks, and an ICS feed per trip or across all of them
  • Routes: auto-sort a day (nearest neighbour then 2-opt, locked stops and hotel anchors stay put), driving, walking or cycling profiles over OSRM, then open it in Google Maps or CoMaps
  • Public transport: door-to-door itineraries over Transitous
  • Weather: 16-day forecast from Open-Meteo, no key. Dates outside that window read the archive for the same date instead
  • Day notes: markdown body with an icon and a colour, reordered by drag and drop or moved to another day
  • Trip dates: move a trip and the days re-date themselves, either dragging the bookings along or re-anchoring them. Trips also copy and archive
🧳 Bookings and money
  • Reservations: 16 booking types with status, confirmation code, travellers and attached files
  • Flights and trains: several legs with stopovers, per-leg times and endpoint timezones, against 4,045 bundled airports so local times resolve without a key
  • Accommodation: a stay spans a range of days with a check-in window, and shows on every night it covers
  • Booking import: EML, PDF, PKPass, HTML and TXT confirmations through KItinerary. Needs the kitinerary-extractor binary, which ships in the Docker image
  • AirTrail (off by default): link a self-hosted AirTrail instance to import flights as reservations and keep them in sync
  • Costs: split expenses in integer cents with equal or custom shares, several payers per expense, settle-up suggestions, a settlement log, and CSV export
  • Currencies: a currency per expense with the rate frozen at entry. Rates come from Frankfurter, no key
  • Packing lists: categories, admin-managed templates, assignees, three visibility tiers, and a packed-of-total line. Bags with weight roll-up are a separate admin switch, off by default
  • To-dos: assignee, due date, priority, and a reminder before one falls due
  • Files: attach to a trip, place, day entry or reservation. 50 MB each, 500 MB for video, with trash and restore
  • PDF export: cover page, place photos, day notes, bookings and costs, with an optional page break per day
👥 Collaboration
  • Real-time sync (WebSocket): edits land live for everyone who has that trip open
  • Members: add by email or username, hand ownership to someone else, or add guests who have no login at all
  • Permissions: an admin maps each of 16 trip actions to admin, trip owner, trip member or everybody
  • Invite links: one reusable link per trip with an optional expiry. Admins can also issue signup invites with a use limit that drop the new account straight into a trip
  • Public share: a read-only trip page anyone can open without an account
  • Collab: group chat with replies, reactions and link previews, shared notes with attachments, polls, and a What's Next list of upcoming activities. Each of the four switches on its own
📔 Journal, Atlas and Vacay
  • Journey (off by default): dated entries with story, mood, weather and tags, photos and video from uploads or a linked Immich or Synology Photos library, map views, co-authors, and a public share link
  • Atlas: mark countries and sub-national regions visited on geoBoundaries outlines, plus a bucket list, travel stats and a consecutive-years-travelled count
  • Vacay: leave calendar with half days, public holidays from date.nager.at, school holiday overlays for 16 European countries, carry-over between years, and joint or read-only sharing of a plan
  • Collections (off by default): a place library outside any trip, with labels, ratings, a custom image per place, copy-into-a-trip, and sharing by invite
🧩 Plugins
  • Third-party plugins: install from the TREK registry or sideload a zip, switch on per instance, with their own pages under /plugins/<id>
  • Sandboxed: one child process per plugin, 63 grantable permissions, an admin-edited outbound host allowlist, memory and RPC caps, and daily caps on AI and notification calls
  • Trust: registry downloads are pinned by sha256 and checked against the author's minisign key. A sideloaded zip is marked unverified, and TREK_PLUGINS_ENABLED=false turns the whole system off
  • Extension points: map markers and layers, place details, day schedules, PDF sections, Atlas layers, journal rows, trip warnings, calendar sources, route profiles and notification channels. Plugin pages run in an opaque-origin iframe
  • SDK: trek-plugin-sdk on npm, with a manifest validator, a mock host, and a dev-link mode that runs a local build against real data
🤖 AI and MCP
  • MCP server (off by default): OAuth 2.1 with mandatory PKCE and dynamic client registration. 199 tools, 30 resources, 4 prompts
  • Scopes: 29 scopes in 14 groups, each one tickable on the consent screen. Tokens are bound to the /mcp resource, and every tool call lands in the audit log
  • Reach: create trips and days, edit places, packing lists, to-dos, costs, reservations, collections and journeys, mark countries visited, all inside the scopes the token holds
  • Prompts: trip-summary, plus packing-list and budget-overview when those addons are on
  • Addon-aware: seven addon gates decide which tools and resources a session sees. Flipping one drops live sessions so the surface re-registers
  • Booking extraction (off by default): read a confirmation with a local Ollama server, any OpenAI-compatible endpoint, or Anthropic, configured instance-wide or per user
📱 Mobile and offline
  • Installable: iOS and Android straight from the browser, no App Store. Runs standalone without browser chrome, with the status bar tinted per theme
  • Phone layouts: a separate shell below 768px with its own tokens, a bottom bar and safe-area insets. Which items sit in that bar is up to the user
  • Offline reads: the app shell and every route chunk are precached, and trips, places and file blobs live in a per-user IndexedDB store, so a trip opens with no network
  • Offline writes: mutations queue and replay with an X-Idempotency-Key, so a reconnect cannot double-apply. A stale edit is parked for a keep-mine or keep-theirs choice
  • Offline maps: pre-download a trip's raster tiles, and clear them again
  • API responses are never cached by the service worker. They vary per session, so they always come from the network
⚙️ Admin, accounts and security
  • Login methods: password login, password registration, OIDC login, OIDC registration and passkey login each switch on and off on their own. OIDC_ONLY leaves SSO as the only way in
  • SSO (OIDC): one provider by discovery, with PKCE and id_token verification (Authentik, Keycloak, Google and the like)
  • 2FA: TOTP with ten single-use backup codes, and an admin can require it instance-wide
  • Passkeys: WebAuthn login by fingerprint, face, PIN or security key, off until an admin enables it. A passkey also satisfies the 2FA requirement
  • Hardening: per-IP limits on login, password reset and 2FA attempts, a password policy, secrets encrypted at rest and masked on read, and an SSRF guard on every URL you configure
  • Admin panel: users and invites, the permission matrix, packing templates, categories, addons, plugins, API keys, MCP tokens and OAuth sessions, backups, storage, audit log, and GitHub releases
  • Backups: manual or scheduled hourly, daily, weekly or monthly, with retention in days. The zip carries the at-rest key, so a restore can decrypt its own secrets
  • Storage: pluggable storage backends per content category — keep everything on local disk, or add S3-compatible backends and replicate any category to them, configured entirely from the admin panel
  • Notifications: a per-user matrix of events against in-app, email (SMTP), webhook and ntfy, plus any channel a plugin registers
  • Appearance: light, dark or follow the OS, seven colour schemes plus a custom accent, transparency, compact density, reduce motion, and text size per tier
  • 23 languages: en, de, es, fr, it, nl, hu, ru, zh, zh-TW, pl, cs, ar (right to left), br, id, tr, ja, ko, uk, gr, sv, vi, ca
  • In-app help: the wiki ships inside the image and is served from disk at /help, so the docs match the version you are running

Atlas · dashboard · trip planner Mobile PWA · dashboard, day plan, map, costs Collections · journey journal · costs

AI usage

We use LLM-assisted coding tools across parts of this codebase. Nothing ships that a maintainer has not read and understood: every change goes through a pull request, is reviewed and tested, and has a human who can answer for it. "The AI wrote that" is not an answer any of us would accept from ourselves.

See How we use AI in TREK for the details.


Get started in 30 seconds

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 — if you set ADMIN_EMAIL/ADMIN_PASSWORD those are used, otherwise the credentials are printed to the container log (docker logs trek).


Tech stack

Node.js NestJS SQLite React Vite TypeScript Tailwind Leaflet Docker

Real-time sync via WebSocket (ws). Backend on NestJS 11. State with Zustand. Auth via JWT + OAuth 2.1 + OIDC + Passkeys (WebAuthn) + TOTP MFA. Weather via Open-Meteo (no key required). Maps with Leaflet and Mapbox GL.


Docker Compose (production)

The repository ships a ready-to-use docker-compose.yml with secure defaults and every option documented inline. Download it, then:

docker compose up -d

See Install with Docker Compose for the full walkthrough.


Helm (Kubernetes)

helm repo add trek https://chart.liketrek.com
helm repo update
helm install trek trek/trek

See charts/README.md for values.


Install as App (PWA)

TREK works as a Progressive Web App — no App Store needed.

  1. Open TREK in the browser (HTTPS required)
  2. iOS: Share ▸ Add to Home Screen
  3. Android: Menu ▸ Install app (or Add to Home Screen)

TREK then launches fullscreen with its own icon, just like a native app.


Updating

See Updating — Docker Compose, Docker run, Helm, Portainer, Unraid and Proxmox, plus the encryption-key note.


Reverse Proxy

For production, put TREK behind a TLS-terminating reverse proxy. TREK uses WebSockets for real-time sync, so the proxy must support WebSocket upgrades on /ws.

If you use the MCP addon, the proxy must also pass the Mcp-Session-Id header through in both directions on /mcp — Nginx and Caddy do this by default, but a proxy that strips it makes every tool call open a new session instead of reusing one. See the Reverse Proxy wiki page for details.

Nginx
server {
    listen 80;
    server_name trek.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name trek.yourdomain.com;

    ssl_certificate     /etc/ssl/fullchain.pem;
    ssl_certificate_key /etc/ssl/privkey.pem;

    # 500 MB covers backup-restore uploads (capped at 500 MB server-side).
    client_max_body_size 500m;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /ws {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400;
    }

    # Only needed if you use the MCP addon. Responses are Server-Sent Events,
    # so buffering must be off or tool results arrive late.
    location /mcp {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_read_timeout 3600s;
    }
}
Caddy
trek.yourdomain.com {
    reverse_proxy localhost:3000
}

Caddy handles TLS and WebSockets automatically.


Environment variables

Every variable, its default and what it does: see Environment Variables.

Star History

Star History Chart

Data sources

The Atlas map's country and sub-national (province/county) boundaries come from geoBoundaries (Runfola et al., 2020), licensed CC BY 4.0. See NOTICE.md for full third-party attributions.


License

TREK is AGPL v3. Self-host freely for personal or internal company use. If you modify and offer TREK as a network service to third parties, your modifications must be open-sourced under the same licence.

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

95 total
  1. v4.3.3v4.3.3Sep 26, 2026

    ## 4.3.3 [Full diff since 4.3.2](https://github.com/liketrek/TREK/compare/v4.3.2...v4.3.3) ### Fixed - Logging in through a self-hosted identity provider works again when its host name also has an IPv6 link-local record. Since 4.3.0 a single blocked address refused the whole name, and LAN DNS servers commonly publish a host's `fe80::` address next to its IPv4, so every OIDC login failed with "Requests to link-local / cloud-metadata addresses are not allowed". Immich, Synology and the other integrations on such a name failed the same way. TREK now leaves the blocked address out and connects over the host's other addresses, and a name that resolves to nothing else is still refused. `ALLOW_INTERNAL_NETWORK` and `ALLOW_LINK_LOCAL_IPS` work as before, except that the AWS and Alibaba metadata addresses now stay blocked for URLs a user types even with `ALLOW_INTERNAL_NETWORK` on, as they already were for the admin settings, and a link-local or metadata address written as an IPv6 form of its IPv4, such as `::169.254.169.254`, is now refused everywhere. (#2529, Closes #2506) - Trips can be deleted on a container without a writable temp directory, such as one with a read-only root filesys

  2. v4.3.2v4.3.2Sep 24, 2026

    ## 4.3.2 [Full diff since 4.3.1](https://github.com/liketrek/TREK/compare/v4.3.1...v4.3.2) ### Fixed - The road trip can start and end a day where you slept. It had no way to: the day after a booked night started at its first place, or at the last place of the day before, so a moving day showed only the new hotel and several nights in one hotel drew each day as if it began somewhere else. With "Start and end each day at your stay" switched on under the driving settings, off by default and on the desktop and the phone, a day after a booked night starts at that stay and a day before one ends there. The hotel stands at the edge of the day under its own name, with a badge for the edge it is: Check-out with the latest hour on the day you leave, Day start in the middle of a stay, Overnight in the evening, and Check-in with the hour the room is ready on a moving day. A moving day without places becomes the drive from one stay to the next. The check-out hour is shown and never used as the departure, and a plan that sets out later turns its badge into a warning. Flights, ferries, trains and hire cars at the edge of a day take precedence, a flight or train saved without located terminals

  3. v4.3.1v4.3.1Sep 22, 2026

    ## 4.3.1 [Full diff since 4.3.0](https://github.com/liketrek/TREK/compare/v4.3.0...v4.3.1) ### Changed - The places filter in the planner's right sidebar (All, Unplanned, Planned, Tracks) is the app's own select instead of four pills. With the tracks tab the row had grown past what the rail holds without clipping a word; the count rides on the trigger the way it rode on the active pill, and every option carries its own in the menu. (#2436) - Shared links in the Collab tab are chips now, two to a row across the panel: favicon, title and host, a pinned chip in the accent tint, the whole chip being the link. Edit, pin and delete sit faint in its tail and come forward on hover; on touch they are always shown. (#2413) ### Fixed - The release notice keeps its promise box whole when the window is too short for the note. The right column scrolls in that case, and on a 1080p screen at 100% it does, but the box was pressed down to its label while the paragraphs around it kept their height. Everything inside the two scrolling columns now keeps its size. Below 1080px the two halves stack again as they should; the release half had been squeezed to nothing there, and the support buttons now

  4. v4.3.0v4.3.0Sep 20, 2026

    ![TREK Release 4.3.0](https://raw.githubusercontent.com/liketrek/TREK/e225548c796f8fcd87877d6b4c536421839df2c9/docs/tiles/v430-release-banner.png) ## 4.3.0 [Full diff since 4.2.1](https://github.com/liketrek/TREK/compare/v4.2.1...v4.3.0) ### Added **TREK Places API** - Place search runs on TREK's own API, rebuilt monthly from Overture and served from places.liketrek.com: 73.6 million places, no key, no quota. It answers search, autocomplete, place details, the map's category pills and booking geocoding. - The TREK API is on by default, with no admin toggle. `TREK_PLACES_ENABLED=false` keeps search on OpenStreetMap plus Google, and `TREK_PLACES_URL` points an instance at a self-run copy. - Opening hours come from a separate layer of 5.7 million objects, read in 5 ms: OpenStreetMap first, then the hours a place publishes itself. - Restaurants, shops and hotels take their description from their own site, credited by host and linked. 43 percent of places in the TREK API carry a website. - A trip's surroundings download for offline use, up to 3000 places per request and kept per trip. Rostock costs about a megabyte, and search and autocomplete then work with no network, labelled as

  5. v4.2.1v4.2.1Sep 6, 2026

    <a href="https://github.com/liketrek/TREK/discussions/categories/feature-requests"><img alt="Upvote your favourite feature requests" src="https://raw.githubusercontent.com/liketrek/TREK/74c47a6158d2d1ffc66e0c3a2a65f6e9221230d2/wiki/assets/Banner-Feature-Requests.png" /></a> Fifteen reported issues off the 4.2.0 tag, two privately reported security advisories, and one operator request. **No breaking changes and no schema change.** This release appends no migrations at all, so a rollback to 4.2.0 stays possible on the data side. Two changes need a word before you update. ## Read this first * **Installed PWAs reload themselves once, and offline map tiles have to be downloaded again.** The offline fix in this release replaces the old "wipe everything on a version change" behaviour with a proper worker update, but the code that runs on your device right now is still the old one, so it does its clean-up one last time on the first start after this update. Open TREK **with a connection** and leave it open until it has reloaded itself (about 23 MB). Afterwards, go to **Settings → Offline** and press **Download for offline use** once. Your trips, files and anything waiting to sync are sto

Code frequency

additions and deletions
+479.8K-479.8KWeek of 2026-03-15: +40,772 linesWeek of 2026-03-15: -2,844 linesWeek of 2026-03-22: +52,511 linesWeek of 2026-03-22: -39,557 linesWeek of 2026-03-29: +98,580 linesWeek of 2026-03-29: -38,319 linesWeek of 2026-04-05: +147,322 linesWeek of 2026-04-05: -53,605 linesWeek of 2026-04-12: +60,818 linesWeek of 2026-04-12: -8,829 linesWeek of 2026-04-19: +17,585 linesWeek of 2026-04-19: -2,389 linesWeek of 2026-04-26: +3,537 linesWeek of 2026-04-26: -857 linesWeek of 2026-05-03: +3,018 linesWeek of 2026-05-03: -3,363 linesWeek of 2026-05-10: +1,157 linesWeek of 2026-05-10: -3,030 linesWeek of 2026-05-17: +0 linesWeek of 2026-05-17: -0 linesWeek of 2026-05-24: +1,170 linesWeek of 2026-05-24: -261 linesWeek of 2026-05-31: +0 linesWeek of 2026-05-31: -0 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +167,289 linesWeek of 2026-06-14: -99,378 linesWeek of 2026-06-21: +6,997 linesWeek of 2026-06-21: -884 linesWeek of 2026-06-28: +308 linesWeek of 2026-06-28: -51 linesWeek of 2026-07-05: +98,450 linesWeek of 2026-07-05: -8,041 linesWeek of 2026-07-12: +33,521 linesWeek of 2026-07-12: -4,527 linesWeek of 2026-07-19: +68,515 linesWeek of 2026-07-19: -5,330 linesWeek of 2026-07-26: +181,995 linesWeek of 2026-07-26: -46,265 linesWeek of 2026-08-02: +36,538 linesWeek of 2026-08-02: -30,673 linesWeek of 2026-08-09: +70,798 linesWeek of 2026-08-09: -27,345 linesWeek of 2026-08-16: +80,728 linesWeek of 2026-08-16: -8,488 linesWeek of 2026-08-23: +479,817 linesWeek of 2026-08-23: -90,257 linesWeek of 2026-08-30: +42,222 linesWeek of 2026-08-30: -6,501 linesWeek of 2026-09-06: +75,998 linesWeek of 2026-09-06: -11,395 linesWeek of 2026-09-13: +88,882 linesWeek of 2026-09-13: -9,995 linesWeek of 2026-09-20: +57,473 linesWeek of 2026-09-20: -8,512 linesMar 15, 2026Sep 20, 2026
+1.9M lines added, -510.7K removed over the last year.

Commits per week

last 52 weeks
3380Week of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 61 commitsWeek of 2026-03-22: 74 commitsWeek of 2026-03-29: 338 commitsWeek of 2026-04-05: 190 commitsWeek of 2026-04-12: 183 commitsWeek of 2026-04-19: 113 commitsWeek of 2026-04-26: 20 commitsWeek of 2026-05-03: 12 commitsWeek of 2026-05-10: 9 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 5 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 20 commitsWeek of 2026-06-21: 49 commitsWeek of 2026-06-28: 4 commitsWeek of 2026-07-05: 8 commitsWeek of 2026-07-12: 9 commitsWeek of 2026-07-19: 97 commitsWeek of 2026-07-26: 154 commitsWeek of 2026-08-02: 84 commitsWeek of 2026-08-09: 190 commitsWeek of 2026-08-16: 79 commitsWeek of 2026-08-23: 199 commitsWeek of 2026-08-30: 157 commitsWeek of 2026-09-06: 177 commitsWeek of 2026-09-13: 147 commitsWeek of 2026-09-20: 121 commitsSep 28, 2025Sep 20, 2026
2.5K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 13 commitsSun 1:00 — 21 commitsSun 2:00 — 8 commitsSun 3:00 — 8 commitsSun 4:00 — 3 commitsSun 5:00 — 3 commitsSun 6:00 — 1 commitsSun 7:00 — 1 commitsSun 8:00 — 0 commitsSun 9:00 — 12 commitsSun 10:00 — 16 commitsSun 11:00 — 24 commitsSun 12:00 — 19 commitsSun 13:00 — 24 commitsSun 14:00 — 37 commitsSun 15:00 — 28 commitsSun 16:00 — 29 commitsSun 17:00 — 27 commitsSun 18:00 — 16 commitsSun 19:00 — 19 commitsSun 20:00 — 21 commitsSun 21:00 — 28 commitsSun 22:00 — 35 commitsSun 23:00 — 44 commitsMon 0:00 — 22 commitsMon 1:00 — 2 commitsMon 2:00 — 2 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 2 commitsMon 6:00 — 1 commitsMon 7:00 — 3 commitsMon 8:00 — 4 commitsMon 9:00 — 14 commitsMon 10:00 — 20 commitsMon 11:00 — 24 commitsMon 12:00 — 14 commitsMon 13:00 — 11 commitsMon 14:00 — 22 commitsMon 15:00 — 11 commitsMon 16:00 — 11 commitsMon 17:00 — 29 commitsMon 18:00 — 20 commitsMon 19:00 — 20 commitsMon 20:00 — 31 commitsMon 21:00 — 27 commitsMon 22:00 — 28 commitsMon 23:00 — 29 commitsTue 0:00 — 9 commitsTue 1:00 — 2 commitsTue 2:00 — 0 commitsTue 3:00 — 1 commitsTue 4:00 — 0 commitsTue 5:00 — 5 commitsTue 6:00 — 3 commitsTue 7:00 — 0 commitsTue 8:00 — 2 commitsTue 9:00 — 5 commitsTue 10:00 — 9 commitsTue 11:00 — 10 commitsTue 12:00 — 12 commitsTue 13:00 — 12 commitsTue 14:00 — 18 commitsTue 15:00 — 23 commitsTue 16:00 — 22 commitsTue 17:00 — 19 commitsTue 18:00 — 10 commitsTue 19:00 — 18 commitsTue 20:00 — 38 commitsTue 21:00 — 42 commitsTue 22:00 — 56 commitsTue 23:00 — 37 commitsWed 0:00 — 16 commitsWed 1:00 — 3 commitsWed 2:00 — 2 commitsWed 3:00 — 3 commitsWed 4:00 — 9 commitsWed 5:00 — 6 commitsWed 6:00 — 5 commitsWed 7:00 — 4 commitsWed 8:00 — 7 commitsWed 9:00 — 19 commitsWed 10:00 — 14 commitsWed 11:00 — 7 commitsWed 12:00 — 15 commitsWed 13:00 — 16 commitsWed 14:00 — 25 commitsWed 15:00 — 14 commitsWed 16:00 — 18 commitsWed 17:00 — 15 commitsWed 18:00 — 19 commitsWed 19:00 — 37 commitsWed 20:00 — 17 commitsWed 21:00 — 21 commitsWed 22:00 — 16 commitsWed 23:00 — 14 commitsThu 0:00 — 16 commitsThu 1:00 — 1 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 1 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 2 commitsThu 8:00 — 4 commitsThu 9:00 — 7 commitsThu 10:00 — 6 commitsThu 11:00 — 9 commitsThu 12:00 — 12 commitsThu 13:00 — 16 commitsThu 14:00 — 25 commitsThu 15:00 — 27 commitsThu 16:00 — 18 commitsThu 17:00 — 30 commitsThu 18:00 — 15 commitsThu 19:00 — 11 commitsThu 20:00 — 11 commitsThu 21:00 — 7 commitsThu 22:00 — 13 commitsThu 23:00 — 21 commitsFri 0:00 — 8 commitsFri 1:00 — 6 commitsFri 2:00 — 10 commitsFri 3:00 — 14 commitsFri 4:00 — 0 commitsFri 5:00 — 7 commitsFri 6:00 — 5 commitsFri 7:00 — 2 commitsFri 8:00 — 0 commitsFri 9:00 — 6 commitsFri 10:00 — 6 commitsFri 11:00 — 15 commitsFri 12:00 — 29 commitsFri 13:00 — 52 commitsFri 14:00 — 29 commitsFri 15:00 — 15 commitsFri 16:00 — 16 commitsFri 17:00 — 23 commitsFri 18:00 — 13 commitsFri 19:00 — 36 commitsFri 20:00 — 13 commitsFri 21:00 — 17 commitsFri 22:00 — 25 commitsFri 23:00 — 28 commitsSat 0:00 — 26 commitsSat 1:00 — 10 commitsSat 2:00 — 5 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 1 commitsSat 6:00 — 2 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 3 commitsSat 10:00 — 6 commitsSat 11:00 — 35 commitsSat 12:00 — 37 commitsSat 13:00 — 39 commitsSat 14:00 — 17 commitsSat 15:00 — 30 commitsSat 16:00 — 32 commitsSat 17:00 — 26 commitsSat 18:00 — 24 commitsSat 19:00 — 26 commitsSat 20:00 — 16 commitsSat 21:00 — 18 commitsSat 22:00 — 40 commitsSat 23:00 — 28 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Jul 10, 2026daily#23+2
Jun 26, 2026daily#6+24
Mar 29, 2026daily#17+201
  • public-apis/public-apis

    A collective list of free APIs

    486.1K stars · Python

  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • awesome-selfhosted/awesome-selfhosted

    A list of Free Software network services and web applications which can be hosted on your own servers

    323.8K stars

  • anomalyco/opencode

    The open source coding agent.

    211.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript