Releases: Freika/dawarich
1.4.0
Added
- Family page now contains a map with family members markers on it.
- Visits page now have "Confirm all" and "Decline all" buttons to quickly confirm or decline all visit suggestions at once.
Changed
- Updated look and feel
- The point counting was changed to be more efficient on bigger accounts.
- Redesigned raw data archival system for large instances (10M+ points).
Fixed
- [Cloud] Fix Lite plan archival warnings sending all three notifications (11-month, 11.5-month, and 12-month) simultaneously when a user's oldest data already exceeds all thresholds. Now only the most severe warning is sent, and lower thresholds are marked as already notified.
- Misconfigured Prometheus settings will no longer litter logs with error messages, it will make multiple attempts to connect instead and then stop.
- One of previous versions removed a database index making points upload very slow. The index is now added back to fix the issue.
💙 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., Matthias B., Milien M., Mathias, Travis S., Michael J., 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., Simon van B., 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, Rich, Dragan V., Jerome G., Carsten M., Sheya B., ArnyminerZ, Gustav B., higgs01, Frank F., F. J. Kruz, Jon D., Alexander J. H. and MrHighPing on Patreon and KoFi 💙
What's Changed
- Rework point counting and design system for Dawarich by @Freika in #2389
- Rework raw data archiving system by @Freika in #2391
- Various visit creation improvements by @nareddyt in #2284
- 1.4.0 by @Freika in #2392
Full Changelog: 1.3.4...1.4.0
1.3.4
Added
- Family members can now share their location with each other. In the family settings, you can send a location sharing request to any family member. Once they accept it, you will be able to see their location on the map and they will be able to see yours. You can also revoke location sharing at any time. Location sharing is disabled by default for all existing families, so you need to enable it in the family settings if you want to use this feature.
Changed
- Redesigned onboarding modal with two paths: "I have data" (inline file import) and "Start tracking" (app download + QR code). New users with existing location data can now start importing within 2 clicks of signing up.
- Onboarding completion is now persisted server-side (
settings.onboarding_completed) instead of relying solely on localStorage, preventing the modal from reappearing after browser data clears. - Route opacity data migration now runs as a background job instead of inline during migration, improving deployment reliability for large instances.
Fixed
- Fix admin and supporter tooltip overflowing the page on narrow screens. #1449
- Fix date navigation arrow tooltips overlapping with the navbar on map pages. #2229 #2100
- Fix infinite loading spinner when a trip has no points in its date range. #2293
- Fix Insights monthly digest panels disappearing when switching months. #2305
- Fix suggested visit confirm/decline not removing the visit from the list. #2307
- Fix Stats page reloading when clicking "countries, cities" link. #2270
- Fix map base layer selection not being restored after page reload (Maps v1). #2093
- Fix duplicate country names in stats caused by geocoder returning different spellings. #2044
- Fix total distance display overlapping layer picker when distance is in miles. #2017
- Fix default route opacity displaying as 6000% for new users. #1891
- Fix shared month stats map missing hexagons from the last day of the month. #1934
- Fix Nominatim reverse geocoder producing all places named "Suggested place" instead of actual place names. #2182
- Fix IDL-crossing route segmenter returning inconsistent coordinate types.
unwrapCoordinatesnow always returns a uniform array-of-arrays structure. #2038 - Fix a migration taking too long. #2375
- Fix family sharing not including the requesting user's own location. #2153
- The "Destroy" button on the trip page is now orange. #2348
💙 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., Matthias B., Milien M., Mathias, Travis S., Michael J., 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., Simon van B., 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., Jon Coffee, Andre, Hendl91, Jon H., MrRed, Arkadiusz Z., Jake, Bator T., Alex J. H., eps-dev, twiggu, Rich, Dragan V., Jerome G., Carsten M., Sheya B., ArnyminerZ, Gustav B., higgs01 and MrHighPing on Patreon and KoFi 💙
What's Changed
- Bump database_consistency from 2.0.6 to 3.0.0 by @dependabot[bot] in #2332
- Bump omniauth-google-oauth2 from 1.2.1 to 1.2.2 by @dependabot[bot] in #2334
- mobile layout optimizations by @rtuszik in #2370
- Fix LocationIQ support by @diegoal3mx in #2363
- feat(api): add file import endpoints (POST/GET /api/v1/imports) by @frankhommers in #2356
- Fixed IDL crossing render issue by @shanescarlett in #2295
- Implement family location history viewing along with some fixes by @Freika in #2376
- 1.3.4 by @Freika in #2378
New Contributors
- @diegoal3mx made their first contribution in #2363
- @frankhommers made their first contribution in #2356
- @shanescarlett made their first contribution in #2295
Full Changelog: 1.3.3...1.3.4
1.3.3
Added
- Better user management with pagination, search, and filtering in the admin panel. Admins can now easily find and manage users based on email, registration date, and activity status.
Fixed
- Points table now converts speed from m/s to km/h (or mph) using the user's distance unit preference. Previously raw m/s values were displayed with a "km/h" label. #2337
- Digest list API (
GET /api/v1/digests) now returns distance as a structured object withmeters,converted, andunitfields, matching the detail endpoint. Previously it returned raw meters, causing clients to display incorrect values. Breaking change: thedistancefield changed from an integer to an object. #2336 - Dead documentation links in v0.26.0 changelog entry now point to the correct URLs. #2344
- Filter out Immich and Photoprism api keys from logs to prevent accidental exposure. #2368
- Fix foreign key violation when deleting users with place_visits referencing visits.
- Fix reverse geocoding job failing on points with nil timestamp or lonlat.
- Fix unsupported archive format generating Sentry noise instead of a user-friendly notification.
- Fix deadlock in reverse geocoding places upsert under concurrent Sidekiq workers.
- Reduce Redis disk I/O by relaxing RDB snapshot frequency. Previously the default
save 60 10000rule caused a snapshot every ~60 seconds due to Sidekiq polling, generating tens of terabytes of disk writes over weeks. New defaults: snapshots every 15 minutes (10+ changes) or 5 minutes (100+ changes). - Reduce default Sidekiq concurrency from 10 to 5 threads. Most self-hosted instances don't need 10 workers and the extra threads increase Redis polling traffic.
- Migration bug for version skippers. #2362
💙 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., Matthias B., Milien M., Mathias, Travis S., Michael J., Matthew F., Johnathan D., bleibdirtroy, no1etal, dixet, Bailey J., Alex D., Benjamin M., Daniel A., Florian, BeeHappy, ChemistryDachshund, OrangeWindies, Roman G., Michelangelo V., Edward, Erazem Z., Denis Abt, Tony G., Andrew D., Lomky, Osamu Y., Simon van B., 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., Jon Coffee, Andre, Hendl91, Jon H., MrRed, Arkadiusz Z., Jake, Bator T., Alex J. H., eps-dev, twiggu, Rich, Dragan V., Jerome G., Carsten M., Sheya B., ArnyminerZ and MrHighPing on Patreon and KoFi 💙
What's Changed
- Update user management by @Freika in #2373
- Introduce number of db optimizations by @Freika in #2367
- 1.3.3 by @Freika in #2364
Full Changelog: 1.3.2...1.3.3
1.3.2
Important: Self-hosters are not limited in any way. All features remain fully available regardless of plan. The new Lite plan and related limitations apply only to Dawarich Cloud users. If you're self-hosting, you can ignore the Lite plan details below. Self-hosted instances will continue to have access to all features without any restrictions.
Added
- Lite plan for Dawarich Cloud. Lite includes core tracking, map visualization (routes, points), stats, and the read API. Data view is limited to the last 12 months — older data is archived but can always be exported. Pro-only features: Heatmap, Fog of War, Scratch Map, Globe View, Immich/Photoprism integrations, public stats sharing, and write API (update/delete). Lite users can still create points via the API. Self-hosted instances are unaffected — all features remain fully available regardless of plan.
- Timed layer previews for Lite users on the map. Toggling a Pro-only layer (Heatmap, Fog of War, Scratch Map) shows it for 20 seconds with a countdown, then auto-hides with an upgrade prompt.
- Per-plan API rate limiting via
rack-attack. Lite: 200 requests/hour, Pro: 1,000 requests/hour. Self-hosted instances are exempt. Rate-limited responses return 429 withRetry-Afterheader. - Archival warning notifications for Lite users approaching the 12-month data window: in-app notification at 11 months, email at 11.5 months, archived confirmation at 12 months.
GET /api/v1/planendpoint returning the user's current plan and feature availability.X-Total-Points-In-RangeandX-Scoped-Pointsresponse headers on the points API, allowing clients to detect when data is being windowed.- Branded OAuth buttons for Google and GitHub on the login page.
Changed
- Numeric-only strings passed to timestamp API parameters (e.g.
start_at,end_at) are now treated as Unix timestamps directly. Previously they were passed throughTime.zone.parse, which could return unexpected results. If you were relying on the old behavior for numeric strings, update your API calls accordingly. - The user serializer now includes
planin thesubscriptionobject.
💙 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., Matthias B., Milien M., Mathias, Travis S., Michael J., Matthew F., Johnathan D., bleibdirtroy, no1etal, dixet, Bailey J., Alex D., Benjamin M., Daniel A., Florian, BeeHappy, ChemistryDachshund, OrangeWindies, Roman G., Michelangelo V., Edward, Erazem Z., Denis Abt, Tony G., Andrew D., Lomky, Osamu Y., Simon van B., 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., Jon Coffee, Andre, Hendl91, Jon H., MrRed, Arkadiusz Z., Jake, Bator T., Alex J. H., eps-dev, twiggu, Rich, Dragan V., Jerome G., Carsten M., Sheya B. and ArnyminerZ on Patreon and KoFi 💙
What's Changed
- 1: Add lite plan by @Freika in #2325
- 2: Feature/lite api gating by @Freika in #2326
- 3: feat: gate map layers for Lite plan with timed preview by @Freika in #2327
- 4: feat: add data retention archival filter and archived data rendering by @Freika in #2328
- 5: feat: add Lite archival warning jobs by @Freika in #2329
- Lite plan for Cloud by @Freika in #2330
- 1.3.2 by @Freika in #2350
- 1.3.2 by @Freika in #2358
Full Changelog: 1.3.1...1.3.2
1.3.2-rc.2
Full Changelog: 1.3.2-rc.1...1.3.2-rc.2
1.3.2-rc.1
What's Changed
- 1: Add lite plan by @Freika in #2325
- 2: Feature/lite api gating by @Freika in #2326
- 3: feat: gate map layers for Lite plan with timed preview by @Freika in #2327
- 4: feat: add data retention archival filter and archived data rendering by @Freika in #2328
- 5: feat: add Lite archival warning jobs by @Freika in #2329
- Lite plan for Cloud by @Freika in #2330
Full Changelog: 1.3.1...1.3.2-rc.1
1.3.1
Changed
- User deletion now being done in the background to prevent request timeouts for users with large amount of data.
Fixed
- Point speed in Map V2 is now correctly calculated from m/s to km/h or mph based on user preference. #2308
- Family members are now being loaded correctly on Map V2 when family layer is enabled. #2250
- Photos popups on Map V2 now show the photo timestamp in user's timezone. #2310
- Fix the issue preventing the fresh app from starting. #2304
💙 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., Matthias B., Milien M., Mathias, Travis S., Michael J., Matthew F., Johnathan D., bleibdirtroy, no1etal, dixet, Bailey J., Alex D., Benjamin M., Daniel A., Florian, BeeHappy, ChemistryDachshund, OrangeWindies, Roman G., Michelangelo V., Edward, Erazem Z., Denis Abt, Tony G., Andrew D., Lomky, Osamu Y., Simon van B., 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., Jon Coffee, Andre, Hendl91, Jon H., MrRed, Carsten M. and ArnyminerZ on Patreon and KoFi 💙
What's Changed
- Use exec in docker entrypoints to ensure bundler receives stop signals by @Almighty-Alpaca in #934
- fix(docker): app and sidekiq containers ignore signals by @ZeroKnight in #2010
- Bump omniauth-rails_csrf_protection from 1.0.2 to 2.0.1 by @dependabot[bot] in #2126
- Bump bootsnap from 1.18.6 to 1.20.1 by @dependabot[bot] in #2127
- Bump dotenv-rails from 3.1.8 to 3.2.0 by @dependabot[bot] in #2128
- Bump bundler-audit from 0.9.2 to 0.9.3 by @dependabot[bot] in #2130
- Bump @hotwired/turbo from 7.3.0 to 8.0.21 in the npm_and_yarn group across 1 directory by @dependabot[bot] in #2180
- Move user deletions to background job by @Freika in #2140
- Fix family members not loading on Map V2 when family layer enabled by @Freika in #2312
- 1.3.1 by @Freika in #2311
New Contributors
- @Almighty-Alpaca made their first contribution in #934
- @ZeroKnight made their first contribution in #2010
Full Changelog: 1.3.0...1.3.1
1.3.0
The Storage & Timeline Interaction Release
This release adds a dedicated motion_data column for transportation-relevant fields alongside the existing raw_data. Users can now set their timezone for accurate date/time display across the app. The Timeline feed in Map v2 gains richer map interaction: hovering a journey highlights its track with an animated border, clicking zooms to fit and selects it, and expanding a day shows visit markers even when the Visits layer is off. User data export/import is enhanced with a new v2 format using JSONL files and monthly splitting for large datasets, while remaining backward-compatible with the old format.
Added
- Per-user timezone setting. Users can now select their timezone from Settings > General, and all dates/times across the app (including background jobs and API responses) will respect it. Defaults to the server's
TIME_ZONEenvironment variable for existing users. motion_dataJSONB column on thepointstable for storing transportation-relevant fields separately fromraw_data.- Background job (
DataMigrations::BackfillMotionDataJob) to backfillmotion_datafromraw_datafor existing points. - New Timeline feed in Map v2 Tools panel for browsing daily location history. Distances and speeds respect the user's distance unit preference (km/mi).
- Clicking a track point (when "Show Points" is enabled) now displays point info (timestamp, battery, altitude, speed) in the track info panel instead of triggering a position update. Dragging a point still updates its position and triggers track recalculation.
- Timeline-map interaction: hovering a journey entry in the Timeline feed now highlights the matching track on the map with the animated border and flow effect. Clicking a journey entry zooms the map to fit the track and keeps it selected. Expanding a day in the Timeline now temporarily shows visit markers for that day, even if the Visits layer is disabled.
- AES-256-GCM encryption for raw data archives (format version 2). Set
ARCHIVE_ENCRYPTION_KEYto use a custom key; otherwise derives fromSECRET_KEY_BASE. Existing unencrypted archives (format version 1) are read transparently. - v2 export/import format with JSONL files and monthly splitting for large entities (points, visits, stats, tracks, digests). The new format streams data to avoid memory issues with large datasets, while remaining backward-compatible with v1 archives (
data.json). - User data export now includes Tags, Taggings, Tracks (with embedded TrackSegments), Digests, and Raw Data Archives — previously missing from export/import, meaning users who exported and re-imported would lose these entities.
- Tracks are exported with their
original_pathserialized as WKT andtrack_segmentsembedded as a nested array, preserving transportation mode detection data across export/import cycles. - Digests get a fresh
sharing_uuidon import for security — old share links from the original user won't work for the importing user. - Raw Data Archives are exported with their attached gzip files, enabling full data restoration.
- Failed imports now will have an error message shown to the user.
- Pagination now looks nicer and more informative, indicating current page. #2279
- Imports and exports now can be sorted by name, file size, number of points, and creation date. #2279
- Lots of missing Swagger specs for the API endpoints have been added, improving API documentation and enabling better client generation. swagger.yaml is updated.
Changed
- Transportation-relevant fields (motion, activity, action) are now stored in a dedicated
motion_datacolumn alongsideraw_data, enabling efficient transportation mode detection. - All import sources now write both
raw_data(full original payload) andmotion_data(transportation-relevant fields). - The
STORE_GEODATAsetting now correctly controls whether geodata is written during reverse geocoding. - Dropped unused
idx_points_user_citydatabase index (304 MB) and replaced the fullreverse_geocoded_atindex (1,149 MB) with a smaller partial index covering only un-geocoded rows. - Selecting a track on Map v2 now always dims other tracks, regardless of whether the track has transportation mode segments.
- Default map layers for new users changed from Routes + Heatmap to Tracks + Heatmap. Existing users' settings are unaffected.
- Renamed the bottom-panel "Timeline" feature to "Replay" to avoid naming collision with the new Timeline feed sidebar.
- Default value for
RAILS_ENVindocker-compose.ymlis nowproductioninstead ofdevelopment
Fixed
- Stats queries (daily distance, time of day) now correctly handle timezone conversion without double-converting from UTC.
- Timezone validation in stats queries now properly resolves Rails timezone names to IANA identifiers.
- Clicking on [Map] on Stats page now correctly respects the user's preferred map version (v1 or v2) instead of always linking to Map v1. #2281
💙 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., Matthias B., Milien M., Mathias, Travis S., Michael J., Matthew F., Johnathan D., bleibdirtroy, no1etal, dixet, Bailey J., Alex D., Benjamin M., Daniel A., Florian, BeeHappy, ChemistryDachshund, OrangeWindies, Roman G., Michelangelo V., Edward, Erazem Z., Denis Abt, Tony G., Andrew D., Lomky, Osamu Y., Simon van B., 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., Jon Coffee, Andre, Hendl91, Jon H., MrRed and ArnyminerZ on Patreon and KoFi 💙
What's Changed
- Introduce timezone setting for users by @Freika in #2261
- Update archiving logic to separate motion data from raw_data and redu… by @Freika in #2263
- Feature/timeline by @Freika in #2268
- Rework user data import-export and replace some js with turbo/stimulus by @Freika in #2289
- 1.3.0 by @Freika in #2264
- feat: add country flag SVG icons (landscape and square variants) by @Freika in #2269
- Fix rubocop and biome linting issues by @Freika in #2298
- 1.3.0: green linters by @Freika in #2299
- 1.3.0: Add permissions to github workflows by @Freika in #2300
- Update swagger tests by @Freika in #2302
- 1.3.0: swagger docs & pagination by @Freika in #2303
Full Changelog: 1.2.0...1.3.0
1.3.0-rc.4
The Storage & Timeline Interaction Release
This release adds a dedicated motion_data column for transportation-relevant fields alongside the existing raw_data. Users can now set their timezone for accurate date/time display across the app. The Timeline feed in Map v2 gains richer map interaction: hovering a journey highlights its track with an animated border, clicking zooms to fit and selects it, and expanding a day shows visit markers even when the Visits layer is off. User data export/import is enhanced with a new v2 format using JSONL files and monthly splitting for large datasets, while remaining backward-compatible with the old format.
Added
- Per-user timezone setting. Users can now select their timezone from Settings > General, and all dates/times across the app (including background jobs and API responses) will respect it. Defaults to the server's
TIME_ZONEenvironment variable for existing users. motion_dataJSONB column on thepointstable for storing transportation-relevant fields separately fromraw_data.- Background job (
DataMigrations::BackfillMotionDataJob) to backfillmotion_datafromraw_datafor existing points. - New Timeline feed in Map v2 Tools panel for browsing daily location history. Distances and speeds respect the user's distance unit preference (km/mi).
- Clicking a track point (when "Show Points" is enabled) now displays point info (timestamp, battery, altitude, speed) in the track info panel instead of triggering a position update. Dragging a point still updates its position and triggers track recalculation.
- Timeline-map interaction: hovering a journey entry in the Timeline feed now highlights the matching track on the map with the animated border and flow effect. Clicking a journey entry zooms the map to fit the track and keeps it selected. Expanding a day in the Timeline now temporarily shows visit markers for that day, even if the Visits layer is disabled.
- AES-256-GCM encryption for raw data archives (format version 2). Set
ARCHIVE_ENCRYPTION_KEYto use a custom key; otherwise derives fromSECRET_KEY_BASE. Existing unencrypted archives (format version 1) are read transparently. - v2 export/import format with JSONL files and monthly splitting for large entities (points, visits, stats, tracks, digests). The new format streams data to avoid memory issues with large datasets, while remaining backward-compatible with v1 archives (
data.json). - User data export now includes Tags, Taggings, Tracks (with embedded TrackSegments), Digests, and Raw Data Archives — previously missing from export/import, meaning users who exported and re-imported would lose these entities.
- Tracks are exported with their
original_pathserialized as WKT andtrack_segmentsembedded as a nested array, preserving transportation mode detection data across export/import cycles. - Digests get a fresh
sharing_uuidon import for security — old share links from the original user won't work for the importing user. - Raw Data Archives are exported with their attached gzip files, enabling full data restoration.
- Failed imports now will have an error message shown to the user.
Changed
- Transportation-relevant fields (motion, activity, action) are now stored in a dedicated
motion_datacolumn alongsideraw_data, enabling efficient transportation mode detection. - All import sources now write both
raw_data(full original payload) andmotion_data(transportation-relevant fields). - The
STORE_GEODATAsetting now correctly controls whether geodata is written during reverse geocoding. - Dropped unused
idx_points_user_citydatabase index (304 MB) and replaced the fullreverse_geocoded_atindex (1,149 MB) with a smaller partial index covering only un-geocoded rows. - Selecting a track on Map v2 now always dims other tracks, regardless of whether the track has transportation mode segments.
- Default map layers for new users changed from Routes + Heatmap to Tracks + Heatmap. Existing users' settings are unaffected.
- Renamed the bottom-panel "Timeline" feature to "Replay" to avoid naming collision with the new Timeline feed sidebar.
- Default value for
RAILS_ENVindocker-compose.ymlis nowproductioninstead ofdevelopment
Fixed
- Stats queries (daily distance, time of day) now correctly handle timezone conversion without double-converting from UTC.
- Timezone validation in stats queries now properly resolves Rails timezone names to IANA identifiers.
- Clicking on [Map] on Stats page now correctly respects the user's preferred map version (v1 or v2) instead of always linking to Map v1. #2281
Full Changelog: 1.3.0-rc.3...1.3.0-rc.4