- Map V1 (Leaflet / Raster tiles map) was removed.
- This release contains data migrations that will recalculate your data. Please let them work, they will make a lot of stuff better.
- Visits will be better
- Tracks will be better
- Timeline will be better
Thank you!
Added
- Dawarich can now be used in German, Spanish or French: pick a language under Settings → General. The choice is saved to your account and applies to emails and notifications too; API responses stay in English.
- If your browser prefers one of those languages, a dismissible banner offers the switch — it never changes your language on its own.
Removed
- Map v1 (Leaflet) has been removed:
/mapnow opens the MapLibre map and/map/v1redirects to/map/v2. The Settings → Maps page went with it, and all maps now require WebGL.
Changed
- Monthly statistics maps and publicly shared month maps are now rendered with MapLibre GL instead of Leaflet.
- Deleting an import or a notification now updates the list in place instead of repainting the page.
- Long-running backfills now resume where they stopped after a restart instead of starting over.
- Visit detection has been rebuilt around stays, movement and honest gaps: a tracking silence that starts and ends at the same place is one continuous visit, a silence that ends somewhere else becomes an explicit "untracked" stretch, and visit times snap to when movement actually stopped. Slow traffic can no longer be carved into fake roadside "visits".
- Visits are only named after a business or POI when the evidence supports it — anything weaker gets a street address instead of a made-up venue name.
- Every detected visit carries a confidence score: medium-confidence visits render subdued, low-confidence ones collapse into a per-day disclosure, confirmed visits always render at full strength. The gating activates once your history has been re-detected.
- The "Visit Max Gap" slider and "Smart density fill" toggle are gone — gap handling needs no configuration. Areas now label the visits detection finds instead of running a separate nightly pass, and reshaping an area relabels its historical visits.
- Machine-detected visits are regenerable: re-detection replaces them wholesale, while anything you confirmed, renamed, re-placed, deleted or noted — and anything imported — survives untouched. Existing visits keep their old detection until re-detected: press the re-detect button in Settings → Visits. Self-hosted instances re-detect all accounts automatically after migrating (set
SKIP_VISITS_FLEET_REDETECT=1before migrating to opt out); Dawarich Cloud is re-detected in a staged rollout. - The timeline marks an interior gap as "untracked" from 45 minutes up (previously 90) once your history has been re-detected.
- Transportation mode detection has been rebuilt: modes are inferred from movement patterns over time windows, segments carry a confidence score, and tracker hints are blended in rather than trusted blindly. Recognized: stationary, walking, running, cycling, driving, train, flying; bus, boat and motorcycle only come from tracker hints or manual edits.
- The transportation threshold sliders and expert mode are gone. Existing tracks keep their old classification until re-detected: press "Re-classify my history" in Map settings → Transportation Mode Detection. Self-hosted admins can redo every account with
TransportationModes::FleetReclassifyJob.perform_lateronce the segment backfill has finished. - The timeline got quieter: a one-line day header with per-mode distance chips, tracks that expand to a mode ribbon with only the legs that matter, and in-place mode editing — click a leg's mode name to change it. The full segment list lives behind "All segments".
- Visits no longer have a review flow: the suggestions banner, "Needs review" cards, filters and bulk Confirm are gone. Every visit row has an Edit button, and editing a suggested visit confirms it.
- Deleting a visit keeps an invisible tombstone so detection never re-suggests it; your location points are untouched. Previously declined visits become tombstones too.
- Days per Country moved from the map's Create tab to the Insights page as a pair of cards, following the year you pick at the top of the page.
- After upgrading, restart the app once migrations have run — until then, deleting a visit looks like it worked without saving. A background backfill converts existing track segments to time-based anchoring; progress is visible under Background jobs settings.
Fixed
- The "someone joined your family" email no longer fails to send.
- Re-detecting your whole visit history no longer fails when Dawarich is set to German or Spanish.
- The "family is full" notice now shows how many seats are taken instead of stopping mid-sentence in German and Spanish.
- Notifications about a failed import, a family invitation and the year-end digest are no longer partly untranslated.
- Trip pages no longer fail with a 500 when Immich or Photoprism is unreachable — the trip loads without photos. (#3308)
OIDC_ISSUERwritten with a#fragment no longer fails sign-in with "Issuer mismatch". (#3289)- Clicking a map panel's own button now closes it. (#3317)
/metricsno longer reports duplicate series when the web and Sidekiq exporters merge; shared series carry aprocesslabel. (#3304)- Uploading points no longer logs
unknown OID 28: failed to recognize type of 'xmax'. (#3309) - The coordinates shown when you click a point on the map now match the points list. (#3264)
- Photo search now covers the whole of the end date. (#3263)
💙 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., Lars N., 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., ArnyminerZ, Gustav B., higgs01, Frank F., F. J. Kruz, Jon D., Alexander J. H., Daniel D., Gonzalo M., 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, Brett J., 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, Ross, Andre K., Jonathan K., Erik K., Tiebolt v. d. L., Steven, Mathias, Poutouprod, Sam B., Martin C., Manuel F., K8BCO, Samuel D., duckduck, David on Patreon and KoFi 💙
What's Changed
- chore: extract UI strings to Rails I18n by @Freika in #3292
- feat: add complete German locale by @Freika in #3294
- feat: add complete Spanish locale by @Freika in #3303
- feat: add French locale by @Freika in #3296
- fix: google play URL by @sylvainmetayer in #3288
- Adopt Rails 8.1 defaults, resumable backfills, and Turbo morphing by @Freika in #3297
- Remove Map v1 (Leaflet), migrate remaining maps to MapLibre by @Freika in #3311
- feat(e2e): seed per-worker demo users for parallel Playwright runs by @Freika in #3313
- Degrade trip photos when the photo host is unreachable by @Freika in #3319
- Ignore a fragment pasted into OIDC_ISSUER by @Freika in #3320
- Keep merged /metrics label sets unique by @Freika in #3322
- Close a map panel by clicking its own button again by @Freika in #3323
- fix: repair the sign-up page markup and its translation seams by @Freika in #3326
- Let a photo search end date cover its whole day by @Freika in #3321
- Show the stored coordinates when a point is clicked by @Freika in #3325
- Stop logging an unknown OID for xmax on every point upsert by @Freika in #3324
- Transportation mode detection rewrite + flattened timeline UX by @Freika in #3302
- Move Days per Country from the map to Insights by @Freika in #3333
- Visit detection rewrite: bridged stays, movement reconciliation, honest gaps by @Freika in #3329
- chore(deps): bump json from 2.20.0 to 2.21.2 in the bundler group across 1 directory by @dependabot[bot] in #3331
- chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #3332
- 1.12.0 by @Freika in #3312
New Contributors
- @sylvainmetayer made their first contribution in #3288
Full Changelog: 1.11.0...1.12.0