Repository navigation
Releases
v5.1.4
5.1.4
This release keeps Vacay's public holidays working past January 2027, when the old holiday API ends, and fixes AirTrail sending its stored API key to a newly entered address. Update before February; the apps for iPhone, iPad, Apple Watch and Android are still in a closed test, and you can join: 👉 Sign up at liketrek.com/app-test.
Added
- Bakeries and groceries on the map and along a hike (#3026). The map's place search and a tour's stops along the route also find bakeries and supermarkets, for restocking on a multi-day hike.
- Settings say what they reach. On a phone and in the app the sections stand under "Your account", which follows you to every device, and "This device".
- An install guide for TrueNAS SCALE in the wiki (#3060), from the TrueNAS Community catalog, including updates.
Fixed
Security
- AirTrail kept its API key for a new address. Saving the settings with another host and the key field left as it was kept the stored key, and the next sync sent it to that host. A new host now needs its own key; a path change on the same host keeps it. Thanks to Jacob-Lasky for the report (GHSA-mwf5-5px8-c9h5).
Vacay and Atlas
- Public holidays in Vacay would have stopped working in February (#3057). The holiday provider ends its v3 API on 31 January 2027; Vacay now uses Nager.Holidays v4. Holiday names now show in English, because v4 no longer returns local names.
- Ireland showed four provinces in the Atlas (#2922). It now shows Ireland's 26 counties, from Tailte Éireann's statutory boundaries; places marked before keep their marks.
- The Atlas put Nice and Menton in Italy (#3048, #3049). A coastal point that no country polygon contains went to the country with the smallest bounding box; it now goes to the nearest border.
Planner and bookings
- A transport or booking form lost what was typed (#3069). Every re-read of the trip, which a WebSocket reconnect behind a proxy brings every few seconds, filled the open form in again; it now resets only when another entry is opened.
- A flight without airports lost its day and times on saving (#3070). Like a train without stations, it now takes them from the form's rows.
- Places could not be reordered by drag and drop in Firefox (#3041). Firefox took the first mouse move of a drag as its end; the day list also no longer replays its fade-in after a drop.
- Blank days while swiping quickly through a trip on iOS (#3067). The pager now also draws the days around the one a swipe is heading for.
- A recorded Dawarich route was barely visible on past trips. It is now drawn in full colour, wider and with longer dashes, on both map engines.
Sign-in
- An SSO account was locked out after the provider changed its subject (#3065). The admin user dialog now has "Remove SSO link", and the next SSO sign-in links the account again.
Assistant
- The assistant failed on Azure AI Foundry reasoning models (#3043). These deployments refuse tools at their default reasoning effort; the assistant now asks once more without reasoning.
- The assistant on Claude Sonnet 5.5 said it came back without an answer. Once it has asked for the answer, it now asks for it as plain text.
Plugins
- Plugins could not reach the network on Node 25 and newer (#3045, #3046). Plugin processes now get network access on the Node versions that know the flag.
- A plugin's page on a phone ran under the status bar and past the screen. It now fills exactly the visible area and scrolls on its own.
Phone layout
- A sheet let the page behind show through while it opened. The dim now fades in beside the sheet instead of around it.
Privacy
- A deleted chat message kept its text in the database and in every backup. The delete now clears the text, and the update clears what earlier deletes left behind.
Speed
- The first load fetched 187 icon files (#3055). The icons the first screen needs now ship as one file.
- Static files were compressed again on every request (#3053). The hashed assets are now written as Brotli copies at build time and served from those.
- Looking up the country of a place did needless work (#3054). Lists of many places, the Atlas and journeys load faster.
Internal
Work on the native iOS and Android apps, which are in a closed test and do not ship with this release.
- Native app: a way back from an error page in place of the server's. A proxy's block page or a refused client certificate left the app on a page without TREK and no way to change the server; any such page now shows the bar with a hint and "Change server", on iOS and Android.
- Native app: a black strip under the notch on iOS 27.0. That release lays the web view out below the status bar, and the strip above showed black; it now carries the page colour.
- Native app: the sign-in prompt on iOS said "App". The system prompt before SSO and passkey sign-in named the app by its bundle name, the Xcode target; it now says TREK.
- Native app: the done key closed nothing. The checkmark on the keyboard of a field outside a form did nothing; it now closes the keyboard unless the field acted on it, as a list that adds the next item does.
- Native app: no bounce on the dashboard, journeys and notifications. Screens with pull-to-refresh switched the iOS bounce off entirely; the pull now holds only the move down from the very top, and the page bounces everywhere else.
- Native app: the TREK Cloud deviations agreement before an in-app purchase. The claim screen shows the agreement the server holds with its own checkbox and buys nothing until it is ticked; the redeem carries the version that was shown.
- Native app: SSO on Android ended on "server not reachable". Android may end the app while the sign-in runs in the browser; the return then reached a new app that had lost the sign-in, and its first page load failed. The return is now kept and redeemed, and a page that fails on the network is loaded once more before the app gives up.
- Native app: a client certificate can be added before connecting. The address screen offered the import only after the proxy asked for a certificate during the handshake; it now also has "Add certificate file" below Connect.
- Native app: the top bar under a camera in the screen's corner. The iOS app passes the safe area it measures to the page as a floor under the one WebKit reports, and the bars on a phone keep clear of side insets too.
- Native app: one TREK Cloud subscription per store account. Choosing another plan with a subscription already running changed it in the App Store and then failed with "We could not set up your TREK"; the app now checks first and says the account already has TREK Cloud, with a way to open it and to manage the subscription.
- Native app: the first screens on a living landscape. Welcome, plans, address, an own server and the states between are light screens on an animated aerial landscape; choosing a plan flies the camera from an island over the coast and the farmland to the mountains, and the address writes itself on a glass card. iPad and unfolded phones get the landscape beside the content, and Arabic and Hebrew mirror the layout.
- Native app: "server not reachable" names the cause. The web view's own error (an HTTP status, a network error code, a client certificate the proxy asked for) shows small under the message, so a report carries it.
- Native app: the travel day's Live Activity from three hours before its first stop. It started with the first sync of the day and held the lock screen from the morning on even when the first stop was in the evening; it now appears three hours before the day's first timed stop.
- Native app: a failed SSO round trip still hands back on the retry. When the SSO callback failed (an expired or overwritten state), the login page dropped the way back to the app's handoff page, so the retry signed in to the web app inside the app's browser sheet; it now keeps that way back.
- Native app: a widget tap that starts the app opens what it points at. A tap on a widget or Live Activity with the app closed lost its path and opened the start page (the packing widget landed on the trip instead of its lists); the launch link is now followed once per launch.
- Native app: the app needs TREK 5.1.4 on the server. 5.1.4 serves the UI that follows a widget or Live Activity tap starting the app, so the app now refuses an older server with a hint to update, and checks a server it remembers once more.
v5.1.3
5.1.3
This release fixes the SSO sign-in of the TREK apps, which kept many testers of the closed app test from signing in at all. If you run TREK with SSO and test the app, please update your server; the app itself needs no update for it. The next app build will ask for TREK 5.1.3 on the server, so it is worth updating now.
The apps for iPhone, iPad, Apple Watch and Android are still in a closed test, and you can join. 👉 Sign up at liketrek.com/app-test and connect the app to a TREK server on the newest version, such as this one, or to the demo; please don't test with TREK Cloud.
Fixed
Sign-in
- Signing in to the app with SSO or a passkey still ended in the web app for many. A browser that had run TREK before 5.1.1 keeps that version in its service worker, and the worker answered the app's handoff page from its cache with a version that has no such page, so the sign-in ended on the dashboard in the browser instead of in the app. The app now starts its sign-in on a page the server always answers itself; it takes the old worker off the browser, and until the user is back in the app no worker is registered and no new version reloads the page. The browser's TREK keeps working offline as before. The handoff page also goes straight on to the sign-in provider now, instead of showing TREK's own login first.
- Password managers offered nothing for the two-factor code. The code step now keeps the account in the form and marks the field as a one-time code, and its placeholder is translated.
Planner
- Tapping a day in the day rail did not always change the plan below. On a trip of up to five days the day turned active in the rail while the card underneath stayed on the old one; the pager now follows every tap.
- Quick swipes through the days stopped after two and sprang back until the animation was over. Every day now has its page, so a run of swipes goes on as far as the trip does.
Bookings
- A hotel booking showed no check-in or check-out on its card when only the stay had them, while the edit dialog did. Both cards now show the stay's times.
- Editing only a booking's notes took a booking whose time has no date off its day, so it vanished from the planner (#3025). Such an edit now keeps its day, through the API and the MCP tools too.
Assistant
- The assistant sometimes gave the same answer twice. Asked about the next trip, it answered, offered the trip's own chat in the same step, and then wrote the answer again below that card. An answer that hands the conversation on to a trip's or a journey's chat now ends there.
Internal
Work on the native iOS and Android apps, which are in a closed test and do not ship with this release.
- Native app: a sign-in proxy that lets /api through. With Authelia or authentik in front of the page and a bypass for the API, the address check saw no proxy and the app handed the proxy's sign-in to the browser, so it stayed black on every launch; a redirect away from the server while its first page loads is now kept as the proxy's sign-in and shown in the app.
- Native app: the app needs TREK 5.1.3 on the server. The fixes that keep its sign-in in the app live on the server, so the app now refuses an older one with a hint to update. A server it remembers is checked once after the update and loads again if it is new enough.
- Native app: a way out of a proxy's sign-in page. Behind Pangolin or authentik nothing on the proxy's page led back to the address screen. A bar now offers to change the server and says that passkeys and security keys cannot work there in the app, and on iOS the page gets room for the keyboard.
- Native app: maps in the iOS app drew no tiles. The server's CSP did not allow the app's own tile store for images; it does now.
- Native app: the Live Activity said all done with flights still ahead. A flight with a stopover is a stop per leg, and a flight counts as under way until it lands.
- Native app: the notification prompt never came on iOS. It now waits for the app's features and counts as asked only once answered.
- Native app: the password field hid under the keyboard on an iPhone. A page as tall as the screen, such as the login, now gets room as tall as the keyboard and scrolls the field above it.
- Native app: the iOS build moves to Xcode 27.1, so the app fills the inner display of an iPhone Duo instead of running letterboxed.
- Native app: swipe actions fit the cards. The actions under a swiped row are rounded tiles with a gap, icon only, and an expense no longer swipes to a second pair of the buttons it already shows.
- Native app: files open in a viewer. A PDF, image or document opens in Quick Look on iOS and in the app that views its type on Android, instead of the share sheet.
- Dependencies. The npm minor and patch group, @capacitor/cli 8.6 (which drops the old uuid 7), vite-plugin-pwa 2, @nestjs/schedule 12, vitest 5 in the plugin SDK and the GitHub Actions updates. mapbox-gl stays at 3.31 for now.
v5.1.2
5.1.2
Test the TREK apps
The TREK apps for iPhone, iPad, Apple Watch and Android are in a closed test, and you can join. They run on your own TREK server and add what a browser cannot: home and lock screen widgets, an Apple Watch app, encrypted push notifications, offline maps, sharing from any app into a trip, Wallet passes, and layouts made for iPad, tablets and foldables.
👉 Sign up at liketrek.com/app-test: pick Apple or Android, tick the devices you can test on, and leave the email of your Apple ID or Google account. Connect the app to a TREK server on the newest version, such as this one, or to the demo; please don't test with TREK Cloud.
Fixed
Photos
- Synology Photos: journey photos took the capture date and place of the next photo. On libraries where Synology's item and thumbnail ids match, the metadata came from the neighbouring item; TREK now takes only the item the thumbnail belongs to. Photos attached before this release are asked again once after the update and get their own date and place back. (Closes #3019)
Trips and packing
-
The packing list's weight field dropped digits on a slow connection and saved the wrong weight. It saved on every keystroke, so a slow reply put the old value back under the cursor; it now keeps what is typed and saves once, on blur or Enter. (#3015, Closes #3005)
-
Opening a trip on a slow connection looked like the app had stopped. The phone held a still picture of the dashboard for up to 0.8 s and then showed an empty background; it now holds the dashboard for 0.35 s at most, and a trip that takes longer shows its loading screen right after.
-
Swiping between days on a phone took long to settle. The detent now ticks as soon as the swipe is decided, and a second swipe made while the first still snaps carries on to the next day.
-
On a phone, tapping a booking opened its editor straight away. A transport showed its details first, a stay, a table or a ticket did not; every booking now opens the same detail sheet with a pencil to edit, as on the desktop. Its Wallet and Map buttons read short.
Dashboard
- The dashboard jumped while it loaded, and the currency widget flickered through other pairs. The hero, the atlas cards and the collections widget now hold their size while they load, and the currency widget shows only the saved pair with its own rates, so "1 JPY = 1.0000 EUR" can no longer appear. (#3015, Closes #3009)
- The home screen app on an iPhone or iPad started on a black screen for seconds with many map tiles stored. iOS reads every stored tile before the app can start; the offline tiles there now keep to 2,048 and a fuller cache is trimmed once a day. (#3015, Closes #3008)
Assistant
- The assistant on Claude Sonnet 5.5 still came back without an answer at times. Asked for its answer, the model sometimes offered its follow-ups once more instead of writing; that step may now only be answered with text. (#3018, Closes #3016)
Sign-in
- The language picker on the login page sat under the status bar on a phone with a notch. It now stands below it.
Internal
Work on the native iOS and Android apps, which are in a closed test and do not ship with this release.
- Native app: client certificates (mTLS). A server behind a proxy that lets in only devices with a client certificate (Cloudflare, nginx, Caddy, Traefik, HAProxy) is recognised on the address screen, which offers to add a .p12 or .pfx file; the certificate is shown only to that server and can be replaced or removed in the settings.
- Native app: closing the plan pane on a tablet left the map half black. Mapbox GL measured its box only on window resizes; every GL map now follows its own box. (Closes #3023)
- Native app: a sign-in proxy in front of TREK. A server behind Cloudflare Access, Pangolin, authentik, Authelia, OAuth2 Proxy or Basic Auth was called "not TREK"; the app now names the proxy and signs in to it inside the app, or says how to let the app through. (#3017)
- Native app: SSO and passkeys. A sign-in that the provider finished in another tab now always returns to the app, the handoff button shows its label, a passkey sign-in asks for the passkey straight away, and on some Android phones the sign-in tab opens again. (Closes #3014)
- Native app: Android's back gesture on the first screens steps back as the screen's own back button does.
- Native app: feels native. No text selection on a long press, taps without hover tints or focus rings, fitting keyboards, haptics, system confirmations, swipe rows and long-press menus, placeholders while loading, iOS app icon quick actions, no double-tap zoom on the first screens, and a keyboard that closes on the claim screen.
- Native app: buying TREK Cloud ends signed in. The claim screen asks for the password of the new TREK and opens it signed in once it is ready.
- A centrally administered install can declare the routes it serves without a session. The managed attachment point exports them (empty in this repository), and the boot gate allows exactly those.
Sponsor
TREK runs on dataforest cloud. dataforest builds cloud servers made in Germany: enterprise hardware and a premium network in Frankfurt, up to 20 TB of traffic included, block storage, one-click apps and billing by the hour. They sponsor the servers behind TREK's public services, and they are a great home for your own TREK too. Get started with dataforest cloud.
v5.1.1
5.1.1
Test the TREK apps
The TREK apps for iPhone, iPad, Apple Watch and Android are in a closed test, and you can join. They run on your own TREK server and add what a browser cannot: home and lock screen widgets, an Apple Watch app, encrypted push notifications, offline maps, sharing from any app into a trip, Wallet passes, and layouts made for iPad, tablets and foldables.
👉 Sign up at liketrek.com/app-test: pick Apple or Android, tick the devices you can test on, and leave the email of your Apple ID or Google account. Access goes out once the builds pass Apple's and Google's review. Connect the app to a TREK server on the newest version, such as this one, or to the demo; please don't test with TREK Cloud.
Fixed
Assistant
- The assistant on Claude Sonnet 5.5 came back without an answer. The model at times ended a turn on its follow-up suggestions alone; it is now asked for the answer, and the suggestions show under it. (#2930, Closes #2789)
- A chat failed with HTTP 400 after leaving the page. Leaving while the assistant was still running its tools left the chat in a state Anthropic and the OpenAI Responses API refused; the calls that never ran are now answered when the chat is sent again, and affected chats work on their next message. (#2930)
- The trip assistant failed Tours tools with an argument error. A tool from a group it had not loaded yet got its arguments as text; such a call now runs and loads the group, and a failing call tells the assistant to send its arguments again. (#2973, Closes #2967)
Maps and places
- Far from Europe, TREK could not reach its own services. Node gave each address only 250 ms to connect, less than a round trip from Australia, so place search fell back to OpenStreetMap and sharing place details stayed unavailable; the attempt now has 2 s, and the log names the reason behind "fetch failed". (#2943, Closes #2944)
- Sharing place details stayed unavailable until someone searched. An installation now asks for its TREK services key a few minutes after startup, and the daily check fetches a missing key. (#2945)
- Sharing place details left out what users typed before. When an admin agrees, the details typed since 5.1.0 are shared too, a few at a time and never replacing newer values; the consent prompt says so. (#2945)
- A place added on another copy of the world map stayed there. It was saved with a longitude like 274.9, without a name, and routes to it ran across the whole map; every point is now on the real world, and a migration moves the ones already saved. (#2977, Closes #2976)
- Places and flights showed on different copies of the world map. A trip across the date line is now drawn on one copy, with pins, routes and flights joined, and the map opens across the Pacific. (#2977, Closes #2975)
- Selecting a place fanned a whole city across the map. The selection now only opens small clusters or stops sharing one coordinate. (#2995, Closes #2990)
- The selected place was hard to find on the map. Its pin now has a white border inside a pulsing blue ring, and the map keeps it above the place card, also on portrait tablets. (#2995, Closes #2991)
- The places selection bar was cut off with a long list. "Select all" and "Delete selected" now stay at the foot of the panel however long the list is. (#2940)
- A map whose vector style could not load stayed empty under its markers. It now falls back to raster tiles.
Trips, bookings and tours
- Flights across time zones were out of order. Bookings with a known time zone are now ordered by when they actually leave, in every view of the day. (#2932, Closes #2929)
- Date first in day headings: a long title hid the date, and renaming replaced it. The title now gives way, and the rename pencil and input go with the title line under the date. (#2932, Closes #2920, Closes #2921)
- The day after a side trip started at the wrong hotel. A day now wakes up in the stay checked into last and ends at the one that runs on, and a taxi from the hotel no longer adds a road from the hotel to itself. (#2978)
- The Tour booking type read like the Tours tab. It is now Guided tour, and the empty Tours tab says that booked tours go under Bookings. (#2978)
- A transit booking on a day with a flight could not be moved. A timed booking now stays where it is dropped, and bookings that would then be out of order move next to it. (#2986, Closes #2983)
- Importing a GPX or KML file with a track lost its waypoints. The import preview now offers to add the points as places too, on by default. (#2970, Closes #2969)
- A flight imported through KItinerary lost its seat. Flight and ticket seats are both read now, and each leg of a connecting flight keeps its own seat. (#3000)
- The trip PDF could not be saved from the iOS Home Screen app. The preview there now offers "Open in Safari", which opens the trip with the export ready. (#2962)
- The packing list named only the first person bringing an item. The tooltip, the phone row and the item sheet now name everyone. (#2980)
- Dates always showed in one fixed format. There is now a date format setting per user with an admin default, and every numeric date and date picker follows it. (#2972, Closes #2971)
Costs
- An expense in the display currency did not count as typed. It went through the trip currency and back and could settle a few cents off; such rows now count exactly as typed. (#2974, Closes #2965)
- Budget categories written through the MCP split by case. A category in any case or a common name like Hotel or Flight is now stored as its fixed Costs key, and the tools name the real keys. (#2979)
Journey
- A newest-first journey link opened at the oldest day on a phone. It now opens on the latest day, and a running journey on today. (#2980)
- A planned place on the journey map offered no way to write it up. Its card now has New entry, which starts from the suggestion the trip left for it or a new entry at its time and spot.
- Swiping through a journey's entries jolted. The cards now keep their place and the middle one grows the moment the swipe lands. (Closes #3004)
- The journey map's zoom buttons sat under the bottom bar on a phone. Touch screens zoom with a pinch, so the buttons now show only with a mouse or trackpad. (Closes #3001)
- The map of a shared journey stopped short in mobile Safari. It now runs to the edge of the screen. (Closes #3002)
- A shared journey had no day picker on desktop. It now has the journal's, with every day one click away. (Closes #2998)
- The journey location search listed places only by their local names. It now suggests places as you type, with where each one is. (Closes #3003)
- The feed's entries showed half between the header pills. They now go under them cleanly.
- The journey editor offered External photos without a photo provider. It now offers them only when one is on. (#2957)
- The MCP described journal visibility wrongly. The tools now say that only a draft stays off the share link. (#2979)
Collections
- Long labels hid the place name. The name keeps its room, the row shows as many labels as fit with a +N for the rest, and the label strip over the map folds into a list. (#2987, Closes #2981)
- Switching lists slid a whole new page in on a phone. The list now changes in place.
On the phone
- The mobile web app felt like a website. Pages slide like a navigation stack, days, road trip stages and Vacay months swipe, sheets drag from anywhere, an edge swipe goes back and lists refresh by pulling. Maps keep working offline for Mapbox users too, through a stored fallback map. (#2996)
- A tooltip opened on a tap and stayed. Touch screens no longer open tooltips; a mouse or trackpad still does.
- A switch that was on was hard to see in the dark scheme. Its knob now takes the track's ink.
- Pictures in the chat could not be opened large. A tap now opens them full screen.
- Arabic did not read in its direction. Arrows turn round, Latin names keep their ends and figures stay whole.
- The demo's welcome was a desktop dialog on a phone. It is now a sheet from the bottom with a full-width start button.
Installation and server
- Docker and Helm: the container took minutes to start on a large volume. It now checks only each volume root and what sits directly in it, warns when chown is refused, and the chart gains
podSecurityContextandsecurityContext. (#2932, Closes #2918) - The Docker image shipped Debian packages with known security holes. It now takes the base image's pending security fixes, zlib among them.
- Deleting a trip left its files in storage. Files a delete or a replace leaves unused now go a day later, once nothing else names them; a nightly check shows older leftovers in Admin > Storage, and deleting them stays off until an admin switches it on. (#2934, Closes #2924)
- Rotating the encryption key or resetting the admin failed with SQLITE_READONLY. Both scripts now stop before doing anything and print the
docker exec -u nodecommand to run instead. (#2941, Closes #2933) - Web Push could not be turned on with Chrome on Android. Google's newer push host
jmt17.google.comis now accepted. (#2942, Closes #2939) - Notification settings listed events an install could not send. Rows for switched-off addons, photo providers and plugins no longer show, and their saved choices are kept. (#2957)
- A page opened while the server restarted kept the default configuration. It now asks again until the server answers. (#2957)
- New installs started with Journey and Collections off. They now start on, next to the other addons; existing installs keep theirs. (#2977)
- The README's sponsor section did not link dataforest cloud everywhere it named it. (#2930)
Internal
Groundwork for the native iOS and Android apps, whic...
v5.1.0
5.1.0
Highlights
TREK now runs its own map services, on servers sponsored by dataforest cloud. Place search, address search and routing come from TREK's own servers instead of public services that limit, slow down or drop requests. Every installation is connected on its own, without any setup. A big thank you to dataforest, who make all of this possible for every TREK installation: cloud servers made in Germany, in Frankfurt, billed by the hour.
- Routes that match the road. Every day, road trip and assistant route is calculated by TREK's own planet-wide Valhalla with elevation data. It knows road classes, turns, tolls, ferries and climbs, so routes and driving times come far closer to what you will actually drive.
- The right place first. Search now finds the place you mean far more often, and answers three times faster.
- Place details in milliseconds, from TREK's own copy of OpenStreetMap instead of the public Overpass servers.
- Place details from the whole community. With the admin's consent, an installation shares the details its users add, and every TREK gets better places.
- Hebrew, TREK's 28th language, with right-to-left layout.
By the numbers
| 5.0 | 5.1 | |
|---|---|---|
| Right place first in search suggestions | 48 % | 70 % |
| Right place first in a full search | 53 % | 74 % |
| Countries first in suggestions | 44 % | 99 % |
| Cities first in suggestions | 65 % | 88 % |
| The same place twice in one list | 0.43 per list | never |
| Full search, 95th percentile | 640 ms | 203 ms |
| Details of an OpenStreetMap place | several seconds, often unavailable | milliseconds |
| Stops per road trip day | 10 | no limit |
| Distance per road trip day | 1,500 km | no limit |
Search figures measured on 5,000 searches from Wikidata: cities, countries, landmarks, museums, airports, stations, nature and venues, with and without a trip around them.
Your TREK services
| Service | 5.0 | 5.1 |
|---|---|---|
| Place search | TREK API | TREK API and OpenStreetMap in one ranked list |
| Address search | Public Nominatim, one request per second | TREK's Photon, in every TREK language |
| Routing | Public OSRM | TREK's Valhalla, planet-wide with elevation, OSRM as silent fallback |
| Place details | Public Overpass | TREK's own OpenStreetMap copy, Overpass only as fallback |
| Community place details | none | Shared between installations, with admin consent |
Note
Sharing place details is off until an admin turns it on. TREK asks the admin once in Admin > Settings; users are never asked and nothing about them is sent. Only the place detail itself leaves: the field, the value and the place it belongs to. No user, trip, note, file or search goes with it, and the Transmission log in Admin shows every value that was sent.
Tip
Please consider sharing. Every phone number, website, opening hours or picture you share makes TREK's own place data better for everyone and TREK less dependent on Google. We are grateful for each one.
Important
Nothing to configure: every installation gets its key for the TREK services in the background. To keep using your own services, set NOMINATIM_URL or choose FOSSGIS or your own Valhalla in Admin > Settings; TREK_SERVICES=off stops the key, TREK's Photon and TREK's Valhalla; to also keep place search from asking the TREK index, set TREK_PLACES_ENABLED=false as well.
Note
Search for a place once after updating. 5.1.0 registers with the TREK services under its own release. If place search, address search or routing do not answer right after the update, search for any place once: that registers the installation, and everything works from then on.
Added
TREK services
- Address search through TREK's own geocoder. Searching for a street, a town or an address goes to TREK's Photon server, built from OpenStreetMap with every language TREK speaks, instead of the public Nominatim with its one request per second. If it cannot answer, TREK falls back to Nominatim without you noticing. An instance with its own
NOMINATIM_URLkeeps using it. (#2882) - Every route now runs on TREK's own Valhalla. Days in the planner, road trips and the routes the assistant and MCP plan are calculated by a planet-wide Valhalla with elevation data that TREK runs for every installation, reached through your TREK server. One engine per day, so a leg shows the same driving time in the day plan and the road trip; avoiding tolls, highways and ferries works everywhere; the old limits of 10 stops and 1,500 km per road trip day are gone. If TREK's router cannot answer, OSRM calculates the day as before, without a message. Admin > Settings can still choose FOSSGIS or an own Valhalla; with FOSSGIS everything stays as it was. (#2882)
- Every installation gets its own key for the TREK services, without any setup. It is requested in the background on the first search, renewed on its own, and tied to the TREK release it runs, and it keeps the services fair for everyone. Admin > API Keys shows how much of today's allowance each service has used and when it resets. Searches and places are never logged; only the number of requests is counted. Older TREK versions keep working without a key. To opt out, set
TREK_SERVICES=off; hosted setups can pass a fixed key withTREK_SERVICES_KEY. New variables:TREK_SERVICES,TREK_SERVICES_KEY,TREK_SERVICES_HOSTS,TREK_PHOTON_URL,TREK_VALHALLA_URL. (#2882, #2893)
Place details from the TREK community
- An admin can share place details with every TREK. Nothing is sent until the admin agrees to one question in Admin > Settings; users are not asked and nothing about them is sent. The installation then passes on what its users type about places: website, phone, e-mail, opening hours, description and pictures, each field switched on or off on its own. Only the value, its field and the place it belongs to go out, never a user, a trip, a note, a file, a search or anything a provider filled in, and every change is sent the moment it is saved. Pictures are re-encoded before they leave, so no camera data or location goes with them. A value for an empty field reaches every installation right away; a correction of an existing value, every description and every picture are checked by a person first. The new Place search and routing card in Admin > Settings shows what was sent and what became of it, and everything can be withdrawn. (#2913)
- Saved places learn what others shared. When you edit a place that has newer details than the ones it was saved with, a New place details pill in the dialog lists them field by field; empty fields are ticked, filled ones are yours to decide. Pictures the community shared show first under Pick a picture, and a shared description is credited to the TREK Community. (#2913)
Languages
- Hebrew, with right-to-left layout like Arabic. TREK now speaks 28 languages. (#2856)
Helm chart
extraVolumesandextraVolumeMountsfor the TREK container. (#2857)- Gateway API support: an
HTTPRouteas an alternative to the Ingress. (#2836)
MCP
create_transit_journeytakes a price, andcreate_budget_itemcan link the expense to a booking withreservation_id. (#2802)
Fixed
Place search and details
- Place search often put the wrong place first. The TREK API, TREK's Photon and OpenStreetMap now answer as one list: a city, an island, a landmark or an airport by its code comes first wherever it lies, a café or a shop comes from around the open day, and a place two sources know shows once. Addresses, a point picked on the map and the details of an OpenStreetMap place come from TREK's Photon. (#2912)
- Typing a search showed OpenStreetMap places only after it was sent. Search-as-you-type now asks TREK's Photon beside the TREK API. (#2890, Refs #2877)
- The details of an OpenStreetMap place took several seconds, or showed Nothing found when the public Overpass servers were down. They now come from TREK's own copy of OpenStreetMap first. (#2913)
- Use this text sat at the bottom of the place details, away from the description it copies. It now sits right under the description. (#2913)
Routing
- A day with many stops was routed piece by piece with a pause between the pieces, and one route that ran out of time, such as a long bike route, rested the router for every user for ten minutes. A day now goes to TREK's Valhalla with up to twenty stops at a time, and a slow route falls back to OSRM for that day only. (#2912)
- Public transit searched only the configured provider. When it finds no connection, TREK now asks the other one, Transitous or Google, before giving up. (#2860)
Admin
- The TREK API card listed the services without saying what each one does. It now names the place search, the address search and the routing, what each carries and where its data comes from, with each daily limit as its own badge. (#2912)
- Place search settings were spread over the API Keys card. TREK API, transit provider, search provider and the search log now share their own Place search and routing card; API Keys holds the Google, Unsplash and Amap keys only, and Allowed file types moved to the left column. (#2913)
Studio
- A long journey's book stopped at about 300 pages. A book held at most 150 spreads, and the auto layout cut the rest of the trip without a word, its last page and back cover with it; adding, copying or applying a designed page to a full book was refused. A book now has as many pages as its journey needs. (#2866)
Assistant and MCP
- Ollama entered without
/v1failed on ...
v5.0.1
5.0.1
Fixed
Assistant
- The assistant keeps working after changes were applied. On ChatGPT, the OpenAI reasoning models and Claude, a thread in which the assistant had kept a trip note or read an attached file failed with HTTP 400 once changes were applied, and every later message in it too. Those calls are now answered when the thread is sent again, and threads that already broke work again on their next message. (#2846, Closes #2845)
- Tool calls work with Gemini. After the first tool call of a turn, Gemini refused the next step, which showed as a
genericerror. Its thought signature now goes back with each call, and an own server on Gemini's endpoint gets the tool schemas Gemini accepts. (#2852, Closes #2848) - The assistant on Claude Sonnet 5.5 no longer gives up after a tool call. Models that think by default lost their thinking between steps and ended with "came back without an answer"; the assistant now hands it back to them unchanged. (#2791, Closes #2789)
- OpenAI reasoning models such as gpt-5.6-sol and gpt-6.1-sol no longer fail with HTTP 400 on an API key. They now go through the Responses API, which they need for the assistant's tools. (#2791, Closes #2792)
- An own server that speaks the OpenAI API connects. LM Studio, vLLM, a LiteLLM proxy, Groq and other servers that are not Ollama were asked for Ollama's paths only, so Connect said the server was not responding and the booking import failed with a 404. Connect now finds the model list and says whether a key was refused or the address sent no list, and the booking import goes through
/chat/completionsat the address you entered. (#2809, Closes #2806, Closes #2808) - The model of a ChatGPT plan shared with everyone can be changed. In Admin > Addons its model picker did nothing and stayed on the recommended model; picking a model now saves it. (#2787, Closes #2783)
- Pasting the ChatGPT sign-in address no longer says it took too long. An address read from the clipboard and pasted at the same time, or one left over from an earlier attempt, used up the sign-in in progress; it is now sent once and only for the current sign-in. (#2787)
- Connecting OpenRouter finishes the sign-in. When OpenRouter added its code to the return address after a second
?, TREK did not recognise the return and dropped the code without a word. Both shapes are read now. (#2798) - Brazilian Portuguese users get their answers in Portuguese. TREK's code for Brazilian Portuguese is
br, whichIntlreads as Breton, so the assistant answered in Breton and its cards wrote dates that way too. (#2801, Closes #2800, thanks @allanvobraun) - Day notes written by the assistant or an MCP client put the text in the body. The tools described a day note's body as a time label of at most 250 characters; it is now described as the Markdown body under the title, with the 2000 characters the planner allows. (#2846, Closes #2840)
- On the phone, the assistant opened from the dashboard, Vacay, Atlas, Collections, the settings or a journal is no longer see-through. It had no background there and the page showed through it; it now fills the screen as it does inside a trip. (#2785, Closes #2786)
Maps and routes
- A trip with its whole route shown no longer routes every leg again on every open. A month long trip took 30 to 45 seconds before its route was drawn, each time. Routed roads are now kept on the device, so the route opens drawn and only new or changed legs are routed. (#2797, #2846, Closes #2794)
- Transit routes from Google are credited to Google. With Google as the transit provider, the result list still named Transitous and saved routes recorded it as their source. The list now names the backend that answered, and routes from the planner and from
create_transit_journeyrecord it. (#2854, Closes #2850) - Place clusters on the MapLibre and Mapbox maps look like the ones on the Leaflet map. The count bubbles were drawn into the map canvas in the map style's font and had no hover; they now have the app's font, the same sizes and the same hover. (#2861)
Tours and imports
- Tracks imported in 4.x can become tours. A GPX track from before Tours stayed a plain place, never showed under Tours, and importing the same file there was refused as already in the trip. The import now takes that track over as the tour, keeping its name and line, and the preview says so. The assistant proposes such a track as well instead of skipping it. (#2815, #2846, refs #2810)
- A hike named after a place of the trip is no longer refused as already there. The GPX and KML import compared names with every place, so a watch track called "Hokitika Gorge" was skipped because the gorge itself was planned. A track now only counts as a duplicate of a track. (#2818, Closes #2810)
- Imported hotels show on the map. A booking site's romanized address, such as Agoda's for a stay in Japan, found nothing and the stay was saved without a pin. The review now also searches by name, shows under the address whether and where the stay is on the map, and says so when it is saved without a pin. (#2795)
- Little Cayman and about 1,280 other airports are back in the flight picker. OurAirports marks some airports with daily flights as having no scheduled service, and the build dropped them all. The flag now only filters small airfields, and every airport the list already had stays as it was. (#2824, Closes #2820)
Integrations
- wanderer: trail search works for an account with exactly one ActivityPub actor. wanderer answers such an account with the actor as an object rather than a list, which TREK did not understand. Both shapes are read now. (#2803, Closes #2799)
- wanderer: a token whose account lists no trail author now says exactly that instead of "The answer did not come from wanderer", and the reason an answer was not understood is written to the log. (#2793)
- A document store connection can be changed or removed. Once a trip was connected to Synology Drive, Nextcloud or another store, its address and login stayed as they were. The binding's settings and the folder picker now open the connection to edit it, and it can be removed. (#2846, Closes #2842)
- Plugins can be installed on TREK 5. Most registry plugins still declare a TREK range below 5.0.0, and the only way past it let every plugin through at once. An admin can now install or switch on a single such plugin after a warning, and is asked again when that plugin updates or TREK moves to a new major. Admin > Plugins also got one Filter button, calmer rows, and the containment notes behind a shield in the header. (#2805)
Everywhere else
- Packing list: after the first item the cursor stays in the list. Typing the first item into the
...row of a new list and pressing Enter saved it, but you had to click into "Add item" to go on; Enter now opens and focuses the add field. (#2834, Closes #2825) - Journal photo picker: the calendar is no longer cut off. In Date Range it hung inside the picker's dialog, so the last week of a six week month and, for the end date, the last weekday and the next month arrow could not be reached. It now opens over the page and stays on screen. (#2862, Closes #2858)
- Studio: the page that gathers journal entries without photos or words is headed "Along the way" in every language. It read "Stations", which looked like train stations. (#2816)
- Help center: the close button no longer sits on top of the content. It floated over the first card and the scrollbar in the top corner; it now has a row of its own. (#2863)
Docker
docker stopshuts TREK down instead of killing it. With the shippeddocker-compose.ymlevery stop ended in SIGKILL (exit 137), because the container lacked the capability to pass the stop signal on. If you copied the compose file before, addKILLto itscap_add. (#2791, Closes #2790)- The quickstart in the README names the container, so
docker logs trekfinds the admin login, and setsCOOKIE_SECURE=false, so the login holds over plain HTTP until TREK sits behind HTTPS.
v5.0.0
5.0.0
I could tell you that this is the biggest release TREK has ever had. That TREK now has a Tours addon for every kind of day outdoors, a design studio for your photo books and an assistant that plans with you, and that more than 100 of your feature requests made it in. But really, I just want to say thank you for your amazing support.
Yours, Maurice
Read Changed before you update: TREK copies your database before it touches it and needs the free space for that copy.
Added (Highlights)
Tours
Tours is a new addon for planning trips you make under your own power, or on skis or a horse, with each tour saved as part of the trip: hikes, bike tours, runs, rides, paddle tours, city walks and ski or winter tours. It is on for every install until an admin turns it off, and it works on desktop, on the phone and offline. (#2586, #2662, #2684, #2687, #2691, #2693)
Planning
- Draw a route on a topo map, drag its waypoints or reorder them in the sidebar, and undo every change. Each tour type comes with maps of its own, and OpenHikingMap is there for hikes.
- Each tour shows its elevation profile, distance, climb and a walking time worked out from the hiking rule. Breaks and extra time can be added, and the planned duration adjusted by hand.
- Hikes get a difficulty grade from T1 to T6, and the planner shows known SAC grades, surfaces and kinds of way along the route. Open the 3D terrain view and start a flyover coloured by grade.
- A hike can avoid steps or ferries, prefer footpaths and choose shorter over faster. Other ways compares alternatives for one section, and a round hike of a length you ask for can be suggested from a stop.
- Via ferratas appear on the map in 2D and 3D, can be added as fixed legs, and warn you when a route crosses one.
- A tour can run over several days in stages, each on a day of its own. Any tour can be reversed or led back to its start, and Save as new tour makes an independent copy.
- The search along a tour finds places near the line and puts the best known ones first with a star, ranked by how often their Wikipedia articles are read.
- On a day, a hike shows sunrise, sunset, the weather and any warnings. Give a tour a start time and TREK works out when it ends.
Every kind of tour
- Bike tours are planned for a profile (touring, road, gravel or mountain bike) on CyclOSM, with surfaces, kinds of way and, on a mountain bike, trail grades. They can also find e-bike charging points along the route.
- Runs are planned at your own pace and shown in your distance unit, and a trail run keeps to forest tracks and natural paths. Rides on horseback are put together from signposted horse routes, and a ride recorded as a GPX file can be kept exactly as it was ridden.
- Paddle tours for kayak, canoe and SUP are routed on the water, or drawn freely across a lake, with OpenSeaMap seamarks on top. They mark portages and locks, estimate time on the water, carrying and waiting, and show the wind at the start.
- For the regions an admin adds, a paddle tour shows weirs, locks, put-ins and boating rules from OpenStreetMap, with a checklist that asks you to decide on each obstacle and asks again when the data changes.
- City walks plan sights on foot, with a length of stay and an importance for each stop, checked against opening hours for the day. A walk can be filled from a theme (culture, parks, food or a bit of everything) or from a Google Maps walking link.
- On the day, you check off a city walk stop by stop, offline too, and see how much walking time is left. Between two walks on the same day, the day plan offers public transit.
- Ski and winter tours cover alpine skiing, snowboarding, cross-country, ski touring, snowshoeing and winter hiking, routed over runs, lifts and trails on a piste map. When a ski leg cannot be routed, the planner names the one change that would make it work.
On the trip
- The trip shows tour totals by type above the tour list, which can be filtered by source, routing limit and type. Each person can hide single tours from the trip map.
- A tour keeps the track it was actually done with and compares it with the plan, in its values and on the map. The Atlas adds up the tours you have done, by period and by type.
- A tour can point at the trip's packing list. Changes saved by someone else arrive live, and TREK asks before overwriting what you are editing.
- Whole tours can be kept in collections and taken from there, or from another trip, into any trip.
Importing and sharing
- GPX, KML and KMZ files import as tours with a preview first, and a GPX file can be dropped straight onto the map or a day. An imported track can be turned into an editable tour, and you can still go back to the recorded track.
- Every tour remembers where it came from: planned in TREK, a GPX file, or a wanderer trail. Once an admin allows it, each user can connect their own wanderer instance under Integrations and reimport trails that changed.
- A saved tour can be downloaded as a GPX file or shared through your device's share sheet. One Add tour menu plans, imports or takes over a tour.
Admin, MCP and the assistant
- Admins control Tours under Admin, Addons, with switches for wanderer trails and the piste router and a panel for the regions whose paddle water data is loaded.
- MCP can list a trip's tours, read a tour's whole saved plan, and prepare, save and undo changes to a city walk.
- The assistant plans and saves every tour type, including multi-day hikes in stages and round hikes of a length you choose. It edits saved tours, reads route files dropped on the chat, checks off city walk stops and works with wanderer trails. (#2698)
TREK Studio
TREK Studio, the photo book designer in Journey, grew from a layout tool into a full design studio in 5.0.0. Typefaces, themes, stickers, templates, photo effects and the Travel tab are all new or rebuilt, and the assistant can now design a whole book with you.
Type and text
- A book can now use 34 typefaces instead of 7, all self-hosted and licensed for print, from condensed poster faces and retro display faces to elegant serifs, twelve scripts and a mono. Weights run from 100 to 900 wherever a family ships them.
- A new font picker groups the families as sans, serif, elegant, condensed, retro, script and mono, draws each in its own face and offers only the weights a family really has. Faces load only when used, and those of an opened book are kept for offline use.
- Text can be set in capitals, lower case or small caps, be outlined, take a hard shadow or a marker band, bend along an arc or round a circle, be filled with a gradient, a pattern or a gallery photo, or shrink to fit its frame. Every effect prints as vector.
- A Text styles shelf holds 24 ready lockups: titles, badges and stamps, chapter marks, quotes, captions and place names. Each is drawn with the book's own title and placed as one group.
Themes, colour and decoration
- Seventeen book themes set the palette, the font pairing and the sticker motifs for the whole book at once: Poster pop, Cut-out, Postcard, Riviera, Linen classic, Minimal serif, Grid and badge, Scrapbook, Tropical, Nordic, Alpine, Stamp collage, Riso print, Magazine, Retro travel, Midnight and Field notes.
- Shapes, pages and letters can be painted with linear and radial gradients, colours with their own alpha, and fourteen patterns: checker, gingham, stripes, pinstripe, dots, polka, zigzag, waves, grid, scales, sunburst, confetti, linen and paper grain.
- A sticker library has 160 hand-drawn illustrations in twelve themes, from landmarks, food and mountains to the sea, paper ephemera and doodles. Search them, place them by click or drag, recolour them to the book's palette, mirror, turn and fade them.
- A second shelf adds fifty shapes: arches, paper cut-outs, postage stamps, a postmark, rosettes, tags, ticket stubs, ribbons, speech bubbles, arrows, hearts, stars, photo frames and ornaments such as a laurel. Rectangles, circles, arches and photos can take a cut edge: zigzag, scallop, perforated, wavy, torn or deckle.
- A new line element takes 2 to 32 points dragged on the page. It can be straight or curved, solid, dashed, dotted, wavy, zigzag or hand-drawn, with an arrow, a dot or a bar at either end and an ornament in the middle.
Templates and layouts
- Auto layout lays the wh...
v4.3.4 - Security release
Hey there,
just a quick release to build TREK with the NodeJS version patched. There's no new functionalities yet but we're working hard on TREK v5 :)
We strongly recommend updating TREK to this version ASAP.
For more details: https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
v5.0.0-pre.1
⚠ PRE-RELEASE: USE AT YOUR OWN RISK ⚠
This is a pre-release build of TREK. It may contain bugs, incomplete features, or breaking changes. It is not recommended for production use.
- Do not use this on a live instance without a full backup
- Database migrations may not be reversible
- APIs and configuration options are subject to change without notice
If you encounter issues, please report them at https://github.com/liketrek/TREK/issues.
Stable releases are available on the main release page.
⚠ Pre-release image, not recommended for production use.
latestand4stay on 4.3.3.
| Tag | Description |
|---|---|
5.0.0-pre.1 |
Pinned to this exact pre-release build |
5-pre |
Latest pre-release on the v5 line |
latest-pre |
Latest pre-release across all versions |
docker pull mauriceboe/trek:5.0.0-pre.1First pre-release on the way to 5.0.0, and the largest release since TREK started: 877 commits and close to 6,900 changed files since 4.3.3. The full list of what changed lives in the release PR, #2499. A few of the bigger pieces: a help center on every screen, four new languages, the redesigned desktop trip page, settings and admin, the Tours addon, Web Push notifications, receipt scanning, a much more complete offline mode, and a long list of fixes around data safety, sign-in, reminders and the planner.
The big one: MikroORM
The server reads and writes its database through MikroORM entities, repositories and transactions, and an existing install is picked up from its current schema version on the first start, with nothing to do by hand. (#2416)
This touches nearly every part of TREK that stores something, which is why we need this pre-release tested on real data more than any before it. What happens on the first start:
- TREK writes a copy of your database next to it before it changes anything, named
pre-migrate-legacy-244-<time>.dbfor a 4.3.3 install. Make suredata/has free space of roughly the size oftravel.db; if the copy cannot be written, TREK refuses to start and migrates nothing. - The migration then runs in one transaction. If it fails, nothing is recorded and the next start tries again.
- Installs older than 4.3.3, back to 3.x, take the same path.
How to test it
The most helpful thing you can do is run this pre-release against a copy of your real production data. Test data rarely has the history a database collects over months of use, and that history is exactly what the migration has to get right. How you test is of course up to you, but this is what we recommend:
- Leave your live instance on 4.3.3.
- Stop it for a moment, copy the
dataanduploadsfolders, and start it again. - Start a second container with
mauriceboe/trek:5.0.0-pre.1on the copies, on another port. If you setENCRYPTION_KEY, use the same value. - The copy runs the same scheduled jobs as your live instance, so it can send trip reminders and notifications a second time. Turn off email and Web Push in the copy's admin settings if that would bother your users.
- SSO on the copy needs its own redirect URL at your identity provider, or sign in with a password.
We do not recommend upgrading your live instance with this pre-release. If you do it anyway, take a full backup of data and uploads first. There is no supported way back: 4.3.3 starts on a database that 5.0.0 has migrated without any warning, but it runs on a schema it only partly understands. The only clean way back is to stop TREK, delete travel.db-wal and travel.db-shm, put the pre-migrate-legacy-244-*.db copy (or your own backup) in place of travel.db, and start 4.3.3 again. Everything created under 5.0.0 is lost then.
Before you start it
- Encryption key: an
ENCRYPTION_KEYthat differs fromdata/.encryption_keynow stops the start with a message, instead of silently replacing the stored key. Set the variable back to the stored value, remove it, or run the rotation script first. - Helm: with
generateEncryptionKey: trueunderhelm template, Argo CD or Flux, the chart renders a new key on every run, and TREK now refuses to start on it. UseexistingSecretthere. Readiness now uses/api/health/ready, and a startup probe was added. - Plugins: a plugin whose manifest only allows TREK 4.x is switched off on the first start. We have asked plugin authors to update their ranges;
TREK_PLUGINS_IGNORE_TREK_RANGE=trueturns the refusal into a warning. Plugin SQL now has a 2 second time limit per query. - Configuration: no environment variable was removed or renamed.
Feedback
This is where we need you most. Feedback on all changes helps, on stability and on whether every feature is still there. But the ORM part is the one we are most worried about, and the one that benefits most from being run on databases we do not have. When you report, please tell us:
- which version you upgraded from, and whether the first start went through (the lines starting with
[DB]in the log) - what broke, with steps to reproduce
Parts worth clicking through once on your copy:
- creating a backup and restoring it
- costs: splits, payers who left the trip, settle-up, expenses saved offline
- bookings with a price or linked costs, the booking import, moving bookings within a day, stays
- changing trip dates and copying a trip
- journeys with photos and share links
- signing in: email with mixed case, SSO, passkeys, logging out other devices
- plugins, MCP, and the smaller addons: packing, to-do, Collab, Vacay, Atlas, Collections, Immich and Synology
Bug reports at https://github.com/liketrek/TREK/issues, with 5.0.0-pre.1 in the title.
Full Changelog: v4.3.3...v5.0.0-pre.1
v4.3.3
4.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_NETWORKandALLOW_LINK_LOCAL_IPSwork as before, except that the AWS and Alibaba metadata addresses now stay blocked for URLs a user types even withALLOW_INTERNAL_NETWORKon, 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 filesystem and no tmpfs on
/tmp. Deleting a trip failed there withSQLITE_IOERR_GETTEMPPATH, because SQLite moves a large statement journal into a temp file. It now keeps its temporary data in memory, on the main database, the plugin databases and a backup checked before a restore. (#2529, Closes #2518) - After an update, a device no longer gets stuck on "A new version is available" with "Failed to fetch dynamically imported module", whatever the reload or the cleared browser cache. The server answered a request for a build file the update had removed with the app page, so the import failed, and a service worker that met it during install kept the page as the file, carrying the broken entry into every later release that kept that file's name. A missing build file now gets a plain 404. The app repairs a broken cached stylesheet, font or icon on its own, and a reload after a dead chunk drops the broken offline copy first and asks for the page under a fresh URL that no cache has kept, so it reaches the build the server runs. Offline, the app keeps its copy. The recovery starts with the first launch that runs 4.3.3; until then, a reverse proxy or CDN that keeps
index.htmlorsw.jsregardless of their headers can still hand out the old copy until its cache is cleared. An install living under a directory whose name starts with a dot no longer answers every deep link with a 404. (#2529, Closes #2524) - An expense entered in the display currency reads exactly as it was typed as long as the rate has not moved since it was entered. On a euro trip read in dollars, a bill of $12,345.67 showed as $12,346.05 in the Costs list the moment it was saved, and $250.00 as $250.01, while its dialog showed the amount entered; the totals and settle up drifted with it, and paying back what settle up offered left the trip open with the debt flipped the other way. The Costs screen and the settlement now convert with the same quote the entry rate was frozen from, on the desktop, the phone and the shared trip page, and paying the amount settle up offers leaves both balances at zero. When the rate really moved since the expense was entered, the row shows the value the totals count, with the amount entered and the booked trip amount underneath, and the split summary in the expense dialog puts what each share counts as next to the share entered, such as $400.88 → $390.53 each. Nothing stored changes, so expenses entered before the update read correctly as well. When the trip currency differs from the display currency, both CSV exports get an
Amount (<trip currency>)column betweenCurrencyandAmount (<display currency>), so the display amount moves one column to the right. (#2529, Closes #2525) - A price read from an imported booking keeps the currency it was quoted in, at the rate of the day it is saved, on the desktop, the phone,
create_budget_entryon the REST API and through plugins. The review showed $801.76, but saving sent the amount alone, so the linked cost was stored as 801.76 in the trip currency. Costs imported that way before this release keep the amount and currency they were saved with. (#2529) - An expense saved without a currency, such as a booking's linked cost, opens in the trip currency. It opened in the display currency, so its amount stood under the wrong currency and saving it stored it in that currency; expenses already saved that way keep what was stored. A booking's window also labels such a linked cost in the trip currency, so a 120 EUR deposit no longer reads as $120.00, and a payment recorded before payments carried their own currency reads in the display currency on the Costs list, as the balances always counted it. (#2529)
- The shared trip page values each expense at the rate it was booked at, as the Costs tab does, instead of at today's rate, and prints whole cents. On the desktop, the Costs totals follow the exchange rates once they arrive, where they kept counting foreign amounts 1:1 until the next change. (#2529)
get_trip_summary, the budget overview prompt and the per-person budget summary added up expenses in different currencies as they were stored and labelled the sum with the trip currency. They now count each expense in the trip currency at the rate it was booked at;get_trip_summaryaddsby_categoryand the per-person summary names itscurrency. (#2529)- An expense or payment in another currency is no longer counted 1:1 in the trip currency when there is no exchange rate for it. When the server could not fetch rates itself while the browser could, such an expense was saved without a rate and settled at its face value, so a VND bill on an AUD trip turned into balances in the millions. Such an expense or payment is now left out of the balances, settle up and the final budget until a rate is known. When you save an expense or a payment, the browser passes on the rate it already has, and when someone who may edit costs opens Costs while such rows exist, every expense and payment in another currency without a frozen rate gets one, the server's own rate where it has one and the browser's otherwise. In the same setup, a trip read in another currency than its own showed its balances and settle up in trip currency figures under the display currency's sign; the browser's rate now converts them. Changing an expense's currency while no rate is available no longer keeps the old currency's rate; an expense that already kept one keeps it until its currency is changed again.
get_settlement_summarylists the expenses and payments it left out and names the currency of its figures,get_trip_summarylists the expenses it could not count, and the newfreeze_budget_rates, which needs permission to edit the budget, pins the server's rate of the day on every expense and payment in another currency that has none yet. (#2529) - Place pins open their place again after the map was dragged. Since dragging places onto days arrived, one drag of the map made every later pin click count as the end of that drag, so pins did nothing until something else on the map was clicked. This affected the default map in the trip planner and on the collections map when used with a mouse; the GL maps never were. A pin click still closes an open menu or map popup. (#2529, Closes #2504)
- Moving a place to another country moves it on the Atlas too. The country and region Atlas had worked out for a place stayed cached after its location was corrected, so Atlas, the dashboard and the journey stats kept counting the country the place had left. The cached country now follows every change of a place's coordinates or address, from the editor, MCP, plugins or an import. Places that were already wrong are checked once, on the first start after the update, against the country borders TREK ships with: a place those borders put in another country is corrected then, and one they cannot place is looked up again on the next Atlas load when its coordinates and its address both disagree with the cached country. (#2529, Closes #2527)
- Photos uploaded to a Journey keep their GPS location and their capture time. The location was never read, so no uploaded photo showed on the journey map, and the capture time ignored the photo's own time offset and was read in the server's time zone, so a photo taken at 15:52 in France was stored hours off on a server in another zone; a photo that records no offset is still read in the server's time zone. Impossible dates in a photo are dropped instead of being rolled over into real ones, and a GPS block of zeros counts as no location instead of a pin at 0,0. Photos uploaded before this release keep their stored time and location for now. (#2529, Closes #2512)
- The public share page says a link has expired only when it really has. Any failed load, a server restart, a proxy error, a rate limit, a timeout or a viewer briefly offline, showed "Link expired or invalid" and sent people back to the owner for a new link. Such a failure now shows "This trip could not be loaded" with a button to try again, and a sign in page from an auth proxy in front of TREK, returned in place of the trip, no longer crashes the page. (#2529, Closes #2505)
- The TREK logo at the top of notification and password reset emails shows in Gmail and Outlook. It was an SVG inlined as a data URI, which neither displays, so they showed a broken image; it is now a small PNG embedded in the mail as an inline image. (#2529, Closes #2507)
- On the phone, a plan timeline day that starts with a flight and also has the hotel's place as one of its stops no longer opens with a hotel row and a drive above the flight. The route draws no drive from the hotel on such a morning; the drive shown there was the hop from the hotel stop to the next place, which then showed a seco...



