⚠️ Important: ⚠️
This release contains a data migration that recalculates user tracks and data. It will cause bigger resource consumption than usual, but it'll get back to normal once background jobs are done. Just let it work.
Tracks generation and different device detection was greatly improved.
Before:
After:
Added
- The onboarding dialog now leads with Start tracking instead of importing, so a new account can get a phone sending points right away. Importing from Google Timeline and the other sources is still one click away in the same dialog.
- Google Takeout (phone takeout, Semantic Location History) and Polarsteps imports can now also extract visits, named places, tracks and the source app's transportation-mode classification, alongside raw GPS points. Places named by Google Takeout (Home, Work, …) keep their original names. New imports extract automatically; for older ones use Extract additional data in the Imports list. Untick Trust the source app's classification to have Dawarich re-detect modes using your settings. Visits found by Dawarich's own detection are kept alongside the imported ones. Remove extracted data undoes an extraction and leaves your GPS points untouched.
Changed
- Ordering a printed poster from the Poster Studio is now available to everyone instead of sitting behind a feature flag. To opt out, switch the
poster_orderingflag off at/admin/flipperor leavePRINT_ORDER_URLblank. Note that the upgrade turns the flag on once, even on an instance that had already switched it off — switch it off again afterwards and it stays off. - GPS noise filtering no longer uses the "Accuracy Threshold" setting, and the slider is gone. A reported accuracy radius is a confidence estimate, not proof a position is wrong: Google Timeline routinely reports 1-4km for points sitting exactly on the road, and dropping those replaced real route geometry with straight lines. Only radii too large to be a position at all are discarded; wrong positions are caught by the speed checks instead. Any saved value now does nothing, and
gps_accuracy_thresholdis ignored by the settings API rather than rejected. - Points within 5km of (0, 0) are treated as broken coordinates everywhere — import, cleanup and noise filtering previously disagreed on what counted as near-zero.
- Existing points are re-checked against the new noise rules after the upgrade, and tracks, stats and digests are rebuilt from the result. Points hidden by the former accuracy rule come back, and displaced fixes the new checks catch are dropped. The work is spread across accounts, and every per-account pass — including the track rebuild it triggers — runs on the lowest-priority queue, so live tracking and imports keep going ahead of it; accounts with GPS filtering off are skipped. You get a notification when your own re-check is done, and self-hosted instances can also check progress under Background jobs settings.
Fixed
- The Family plan now works on Dawarich Cloud. Family pages, invitations, members and location sharing were self-hosted only, so subscribers hit errors on every family route. Access now follows the subscription: plan holders can create a family, and everyone they invite gets full family access without a subscription of their own. Users without the plan see the upgrade page instead of an error. If the owner stops paying, members fall back to their own plans once the paid period ends — the family itself is kept, so resubscribing restores it, and pending invitations can no longer be accepted. Self-hosted instances are unchanged.
- Family members no longer keep Pro access indefinitely after the owner's subscription lapses; they revert to their own plan once the owner's paid period ends. Cancelling still leaves members with access until that period is over.
- Self-hosted mode is now recognised from common
SELF_HOSTEDvalues (quoted"true",TRUE, whitespace-padded,1,yes,on), not only the exact stringtrue, so a non-canonical value no longer flips an instance into cloud mode and blocks LAN integration URLs (such as Immich) as SSRF. (#2522) - Outgoing email no longer fails against slower SMTP servers: connection open/read timeouts now match net-smtp's own 30s and 60s instead of a 5-second cap that failed digest reports with
Net::OpenTimeout. Tune withSMTP_OPEN_TIMEOUT/SMTP_READ_TIMEOUT(#3096) - FIT files that carry developer data fields (such as those from Wahoo devices) now import their location records instead of failing to parse. (#2945)
- Google Timeline imports now keep path points in order when several share the same minute-resolution timestamp: tied points are spaced one second apart, while genuine repeats at the same coordinate still collapse into one. Caveat: the synthetic spacing shifts the deduplication key, so delete the affected date range before re-importing the same file. (#3115)
- Visit detection no longer turns long slow walks into one large suggested visit centered somewhere the user never stopped (#2970).
- Photon place names no longer show generic "Yes" categories in visits (#3050)
- Imports that finish with zero saved points now notify you instead of completing silently. GPX and KML files are called out when they lack per-point timestamps. (#3062)
- Traccar KML exports now import LineString points using the time range in each track name instead of completing with zero points (#3120)
- "Cancel my account" now works on self-hosted instances. It never sent a password, so the request failed silently with a 401; deletion now asks for confirmation in a dialog and reports failures. Accounts registered through OIDC, which never had a password, can confirm with their email address, on the web and via the API. (#3107)
- Tracks no longer connect two different devices. Google's Records.json contains every device on the account, and imports made before 1.10.0 stamped them all as one, so a phone left at home was stitched to the one that travelled. Existing imports are repaired automatically by re-reading the uploaded file.
- Restoring a data archive now recomputes GPS noise flags. The archive carries none, so restored points previously arrived unfiltered and tracks were rebuilt from noise the instance had already learned to ignore.
- The Map v2 custom basemap field now accepts MapLibre style URLs whose path has no
.jsonsuffix, such ashttps://tiles.openfreemap.org/styles/liberty. A tile URL missing a{z}/{x}/{y}placeholder, or ending in a tile file extension, is still rejected. (#3256)
💙 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., Andrew D., 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., on Patreon and KoFi 💙
What's Changed
- feat: lead web onboarding with the start-tracking path by @Freika in #3084
- Recognise non-canonical SELF_HOSTED values by @Freika in #3210
- Widen SMTP timeouts to match net-smtp defaults by @Freika in #3213
- Import FIT files that carry developer data fields by @Freika in #3221
- Preserve Google Timeline path order for tied timestamps by @Freika in #3218
- Cap fallback DBSCAN cluster radius at the stay point drift factor by @Freika in #3179
- Sanitize generic Photon place names by @Freika in #3182
- Notify when a file import saves zero points by @Freika in #3224
- Import Traccar KML LineStrings by @Freika in #3192
- Ship poster print ordering on by default by @Freika in #3270
- Fix account deletion workflow on self-hosted instances by @0LGuenth in #3107
- Let the browser follow the cannot-delete redirect by @Freika in #3272
- Separate Google Records devices so tracks stop connecting them by @Freika in #3271
- Accept MapLibre style URLs without a .json suffix by @Freika in #3274
- fix(family): revoke inherited access when the owner subscription lapses by @Freika in #3276
- Show the 30x40 print at its current price by @Freika in #3277
- refactor: introduce Entitlements policy object for plan gating by @Freika in #3278
- Enhanced import flow with per-import extraction and detail view by @Freika in #2661
- Gate the family feature on the Family plan instead of self-hosting by @Freika in #3281
- fix: keep the replay photo stack clear of the map button cluster by @Freika in #3285
- chore: keep dependabot off ubuntu major/minor bumps by @Freika in #3284
- test: expect suffixless basemap URLs to validate by @Freika in #3286
- Recalculate GPS noise flags and derived data after the 1.10.4 filter change by @Freika in #3287
- 1.11.0 by @Freika in #3273
Full Changelog: 1.10.3...1.11.0