Added
- Self-hosted users with an active Pro purchase in the Dawarich mobile app now get the supporter badge. The app reports the purchase to your instance automatically; Dawarich Cloud ignores it.
POST /api/v1/visitsaccepts an optionaladdress(street, house number, postcode, city, country). A newly created place stores it, and visit responses include the place's formattedaddress, so apps can keep a visit's name and address separately.- A visit created without an address (for example from the map's visit form) gets its place address and city looked up in the background when reverse geocoding is enabled; the name you gave is kept.
- Visit cards in the map's visit list show the place address under the visit name.
- Insights show route maps on the year cards. Pro and self-hosted instances also get a year calendar coloured by country, a country timeline and a race against the previous year's distance; Cloud Lite shows a plain activity calendar and a preview of the race.
- Search trips by name, description, places and notes; sort them and filter by year, month and country.
- A Family tab on the map (
F) holds the family layer, the member list with each member's last known address, and a link to the family page.
Changed
- Achievements no longer credit any country or region for time spent in territories claimed by more than one state (Natural Earth disputed areas), and achievement cards leave those areas out; statistics, the scratch map and country attribution are unchanged. Regions lying almost entirely in such territories are no longer part of their country's set. Existing progress is recalculated in the background without notifications, and achievements already earned are kept. The upgrade loads the disputed-area boundaries and recalculates achievements once in the background; on large instances this can take a while.
- Stats and Insights are now one page at /insights; /stats and /stats/:year redirect there.
- Visitors opening
/go to the sign-in page; the landing page is removed. Sign-in and sign-up pages are redesigned. Uptime checks that probe/now get a redirect; point them at/api/v1/health. - The map Layers tab shows layers as tiles, with options for enabled layers below them. Anomalies show only while Points are on, and the Create button is now Tools.
- Buttons are raised and form fields recessed across the app.
Fixed
- Stop the onboarding and other closed modals from flashing on page load in Firefox.
- Changing the theme with a missing or unknown value now returns an error instead of crashing or saving an invalid theme.
- Merge duplicate legacy points before coordinate backfill so upgrades complete without unique constraint errors (#3200). On large instances still carrying legacy coordinates this step can take several minutes; let it finish.
- Keep MapLibre toast notifications within narrow viewports and allow map controls beneath messages to remain clickable.
- Bundled country boundaries now match their ISO 3166-2 subdivisions: achievement cards, the scratch map and country attribution follow, and affected existing points are reassigned in the background.
- Count briefly visited countries consistently in Insights, statistics, the stats API and digests even when no city meets the minimum stay threshold. (#3290)
- Refresh import statuses after the live stream subscribes or reconnects, recovering updates missed before connection (#3174).
- Emoji in place, area, visit and family member names now render correctly on the map instead of a placeholder glyph (#2365).
- Update both mobile and desktop family-sharing indicators after changing location-sharing settings.
- Keep signed storage capabilities and private filenames out of request path logs.
- Prevent legacy or restored export URLs from deleting unrelated files; retain unproven legacy files after export removal or migration.
- Refuse location-sharing consent when family access expires while waiting for the request lock.
- Keep saved ZIP member imports processing when a later archive member fails validation.
- Keep notification badges, read states and deleted items current in other open tabs.
- Use safe defaults for missing user settings and refuse unsupported settings writes without replacing malformed data.
- Shared tracks hide their map and route coordinates when the owner disables route sharing, while enabled statistics remain visible.
- Only administrators can request test email, and queued test messages are discarded after the recipient loses administrator access.
- Calendar activity and status counts refresh after demo visit edits and deletion, including restored visits removed by null-island cleanup.
- Achievement sharing returns only to same-host HTTP(S) or safe relative pages and falls back for non-HTTP return URLs.
- Concurrent Cloud family invitations can no longer reserve the same final available seat; self-hosted families remain unlimited.
- Public-share unlock phrases are filtered from request parameters and query-string logs.
- Keep tied transportation modes, visit and country rankings, location-search coordinates, and Immich GPS matches deterministic.
- Clear pending two-factor challenges after successful authentication, preventing a stale challenge from switching accounts.
- Reserve transportation reclassification while its worker is queued, preventing duplicate runs from repeated requests and allowing retry after enqueue failure.
- Import progress no longer moves backwards when an older Google Takeout continuation finishes late or publishes a stale status.
- Public monthly statistics and yearly digest links show an unavailable-share message after their owner is deleted.
- Area creation and editing reject unsupported response formats before saving changes or scheduling visit relabeling.
- Account deletion confirmation can be requested again immediately if token generation or email enqueueing fails.
- Partnero signup failure diagnostics and Immich enrichment errors exclude provider-supplied credentials and customer details.
- Propagate failed monthly statistics calculations so background jobs can retry, without repeating an unread failure notification on every retry of statistics or data recalculation; digest jobs report a failed month with a single digest failure notice.
- Achievement backfills now restore historical visit dates, including previously earned regions and countries (#3728).
- Timeline calendar activity and status counts refresh after confirming or declining visits in bulk.
- Shared photo thumbnails lose their old authorization immediately when the trip dates or shared resource change.
- Protect the acting and last active administrator from deletion, and serialize administrator deletion and role changes to retain administration access.
- Prometheus metrics from web and Sidekiq no longer produce duplicate series when label order differs (#3769).
- KMZ imports no longer repeatedly re-import their own archive and fill the import queue and storage (#3766).
๐ This release is supported by Steven B., James Manolios, chenrik, aldumil, derpderpington, Chippie, dint, jhalpern, Lex Fradski, Schlufo, cyberswan.at, craftyklaus, Andre, hogenf, naraxius, Embrace, martin4861, Alex, evetters, GregF, Jon Coffee, Lukas, Robbie G, Kilian, Hans G, Chris, tabaha, Andre, Michael C, Chris, Jonah B., Dante, daallex, Tanner A., Milien M., Mathias, Travis S., Matthew F., Johnathan D., bleibdirtroy, no1etal, dixet, Bailey J., Alex D., Benjamin M., Daniel A., Florian, BeeHappy, ChemistryDachshund, OrangeWindies, Michelangelo V., Edward, Erazem Z., Denis Abt, Tony G., Lomky, Osamu Y., Linus T., Christian C., Sebastian, Jan K., Nathan T., Max G., Karol B., Konstantin, Johannes H., t3hero, g3lin, Tim, Philipp M., Brand K., Pablo F. M., Jon H., fkB, Mikael, Dรกniel A., Hai_Tsung, ShooTex, GreenTentacle, PinkahPandah, David, Ken, Denna G., Andre, Hendl91, Jon H., MrRed, Arkadiusz Z., Jake, Bator T., Alex J. H., eps-dev, twiggu, Dragan V., Jerome G., Sheya B., Gustav B., higgs01, Frank F., F. J. Kruz, Jon D., Alexander J. H., Daniel D., Ricardo T., Christof Z., Narrator, JohnSmith21, smartbert, A.M., Matthew Z., Dror T., Jonathan K., Kyle C., Mario B., Albin H., Phillip S., Bernd, Tom, Nick O., greeting7416, Dick, Brian R., Markus, TheSlimShady, Andrew M., Mason B., Chance, GoogilyBoogily, Dragon, Oliver, HexitNiels, Michael G., Pablo A., Leo L., Daniel D., DSKun, Jonathan K., Erik K., Tiebolt v. d. L., Steven, Mathias, Sam B., Manuel F., K8BCO, Samuel D., duckduck, David, heydabop, Riccardo N., Tim. S., Jonas, Kenji I. Pascal M., Raymond W., Julien, Roman, Mario B., Thomas G., Gabriel, Ivan A., Aram B., Dan551 and Andreas R. on Patreon and KoFi ๐
What's Changed
- fix: prevent recursive KMZ imports by @Freika in #3798
- fix: normalize label sets in merged metrics by @pddg in #3792
- fix(achievements): record region unlock date from the actual visit, not check time by @alter in #3729
- Protect administrator deletion and role changes by @Freika in #3808
- Invalidate shared photo authorization after window edits by @Freika in #3810
- Refresh timeline calendar after bulk visit status changes by @Freika in #3799
- Propagate failed monthly statistics calculations for retry by @Freika in #3809
- Sanitize Partnero and Immich failure diagnostics by @Freika in #3800
- Allow retrying failed account deletion confirmation requests by @Freika in #3801
- Negotiate area response format before saving by @Freika in #3805
- Fix public shares after owner deletion by @Freika in #3802
- Keep import continuation progress from moving backwards by @Freika in #3806
- Reserve transportation reclassification before enqueue by @Freika in #3807
- Clear pending OTP challenges after authentication by @Freika in #3803
- Make tied analytics and GPS matches deterministic by @Freika in #3804
- fix: filter public share unlock phrases from request logs by @Freika in #3814
- fix: serialize Cloud family invitation capacity checks by @Freika in #3815
- fix: reject unsafe achievement sharing return URLs by @Freika in #3816
- fix: refresh calendar counts after demo visit changes by @Freika in #3817
- fix: require an administrator for test email delivery by @Freika in #3819
- fix: honor the disabled route setting for shared tracks by @Freika in #3818
- fix: keep accepted ZIP members processing after partial validation failure by @Freika in #3821
- fix: recheck family access at the locked consent decision by @Freika in #3822
- fix: retain legacy exports without verified deletion ownership by @Freika in #3823
- fix: redact storage capabilities from request path logs by @Freika in #3824
- fix: update both mobile and desktop family sharing indicators by @Freika in #3825
- fix: keep MapLibre toasts within the viewport without blocking controls by @Freika in #3826
- fix: refresh notification copies after committed mutations by @Freika in #3827
- fix: handle NULL user settings without overwriting malformed containers by @Freika in #3828
- fix: render emoji in map labels via DOM markers by @Freika in #3832
- fix: resync import rows after the imports stream subscribes by @Freika in #3833
- fix: count countries visited briefly without a qualifying city by @Freika in #3836
- fix: update bundled country boundaries by @Freika in #3839
- Raise pressable controls and recess fields by @Freika in #3838
- fix: merge duplicate legacy points before lonlat backfill by @Freika in #3840
- fix(ui): stop hidden modals flashing on page load in Firefox by @Freika in #3849
- feat(trips): search, sort and filter the trips list by @Freika in #3850
- feat(insights): merge Stats into Insights and add new visuals by @Freika in #3851
- test(tracks): freeze time in TimeChunker point specs by @Freika in #3853
- fix(achievements): count disputed territories toward no country by @Freika in #3852
- fix: reject missing or invalid theme param in SettingsController#theme by @Freika in #3841
- Store an optional address with manually created visits by @Freika in #3854
- Show supporter badge for self-hosted Pro buyers by @Freika in #3855
- Rework auth pages, guest navbar and the map layers panel by @Freika in #3837
- Keep the supporter badge while another install is subscribed by @Freika in #3857
- 1.16.0 by @Freika in #3813
New Contributors
Full Changelog: 1.15.3...1.16.0