TREK logo

TREK

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

Alternative to: tripit, wanderlog

TREK screenshotTREK screenshotTREK screenshot

About Versions (81)

v3.2.1

2026-07-05

Plugins go from read-mostly observers to a real extension platform: they can now write to the itinerary, contribute native data, react to core events, add whole planner tabs, and match TREK’s look — all behind the same sandboxed, permission-gated boundary. Plus budget, collections, files, guest and mobile fixes. No breaking changes — every new capability is opt-in and admin-consented; existing plugins keep working.

Plugins: 3.2.0 vs 3.2.1

Please consult the wiki for more information.

Capability3.2.03.2.1
Usable permissions~8~18
Write / mutate methods1 (costs.create)~16 — costs C/U/D, places C/U/D, days C/U/D, itinerary assign/unassign, trips.update, metadata C/U/D
Provider hooks0 (declared but dead)2 live — placeDetailProvider, warningProvider (+ invoke.hook transport)
Event subscriptionsevents:subscribe (name + trip only)
Read subsystemstrips, costs, users+ packing, files
Entity metadatadb:meta (no schema fork)
UI extension pointsslots sidebar/hero, pages+ trip-page type, + place-detail slot
Design & DXminimalUI design kit, window.trek.ui, typed SDK, Cookbook + example
Distributionregistry install+ sideload .zip, registry force-refresh
Plugin dependencyInter plugin dependencies (for potential plugin libraries)
Addon dependencyEnsure specific addon is enabled

Plugin platform

  • Permission-gated planner write APIs (places, days, itinerary, trips), each gated by the acting user’s own *_edit permission (#1429)
  • trip-page plugins (a tab inside every trip) and a place-detail widget slot
  • Provider hooks wired: placeDetailProvider and warningProvider, also at GET /api/place-details/:id and /api/trip-warnings/:id
  • Core event subscriptions (events:subscribe) — react to place:*, day:*, budget:*, file:*, …
  • Entity metadata (db:meta) — per-plugin key/value store on trips/places/days
  • Broader reads: ctx.packing.list / ctx.files.list; costs read + write (get/list/create/update/delete)
  • TREK UI design kit (<!-- trek:ui --> → tokens, glass, dark-mode, accent, appearance flags, window.trek), native scaffold, themed dev preview, auto-height glassy cards
  • Author DX: typed ctx returns, window.trek.ui DOM helpers, Plugin Cookbook + trip-doctor example, clack/prompts CLI
  • Sideload a plugin by uploading a .zip; force-refresh the registry

Plugin security

  • Open redirect prevented in the plugin route proxy
  • hook:* grant enforced — implementing a hook isn’t enough without the consent
  • packing.list respects per-user visibility (#858) — no leaking another member’s private items
  • IPC parent/child sealed, arbitrary API access blocked, full capability surface hardened + tested

Budget & costs

  • FX rate frozen on every cost and settlement write, so a later rate drift can’t re-open a settled position (#1445)
  • New “Outstanding amount” card

Collections, files & wallet

  • Editing a saved place no longer resets its status to “idea”
  • Save picker shows above the mobile place detail
  • Apple Wallet .pkpasses supported, incl. booking uploads and the files tab (#1447, #1448)

Guests

  • Guest names are per-trip again — the same friend can be “Jake” on two trips instead of being auto-renamed to “Jake 2” (#1446)

Planner & mobile

  • Drag & drop disabled on mobile so the places list scrolls
  • Day-plan collapse state persists after closing the page
  • Remove-from-day button is icon-only on mobile (#1432)

Other

  • Keep stored settings when an update fails; Unsplash API key usage fixed
  • Translation fixes (Vietnamese “Disabled”, remaining new keys across 22 locales)
  • Added a Code of Conduct

Full changelog: https://github.com/mauriceboe/TREK/compare/v3.2.0…v3.2.1