github dedicatedcode/reitti v3.0.0

7 hours ago

reitti v3.0.0 - Smarter ingestion, battery-friendly tracking, faster maps 🎄

After nearly 4 weeks (our longest gap yet), v3.0.0 is ready. In the meantime, reitti crossed 1,000 stars. Currently sitting at 1,117. I am incredibly thankful for the support and feedback from this community; consider this release my Christmas gift to you. This release focuses on reliability, efficient data handling, and a smoother UI/UX.

Please review the breaking changes before upgrading.

Highlights

  • More reliable processing: A rewritten ingestion pipeline processes data in single, time-bounded batches rather than many queue messages. This reduces missed visits, makes behavior more consistent, and simplifies support/debugging around Visits and Paths.
  • Battery-friendly tracking: Reitti now interpolates GPS points between sparse samples and will also ignore overly dense points for calculations. You can use energy-saving modes (e.g., Significant Change in OwnTracks) while preserving accurate visits and trips.
  • Faster, clearer maps: Multi-year displays got a performance pass, and large numbers of photos are clustered for more responsive map interactions.
  • Practical quality-of-life improvements: Adjustable path colors per user, live log viewing and on-the-fly log level changes for admins, better mobile gestures (date picker), clearer timeline background, and more.

Breaking changes

  1. New tile-cache service (OpenStreetMap tile caching)
  • To be a good citizen with open data and speed up your maps, reitti now caches OpenStreetMap tiles by default using a small nginx proxy.
  • Does this affect you?
    • Using a custom tileserver? No action required.
    • First-time install? Already configured in the default setup.
    • Existing Docker install? Add the following service to your docker-compose.yml and make reitti depend on it.
tile-cache:
  image: nginx:alpine
  environment:
    NGINX_CACHE_SIZE: 1g
  command: |
    sh -c "
    mkdir -p /var/cache/nginx/tiles
    cat > /etc/nginx/nginx.conf << 'EOF'
    events {
      worker_connections 1024;
    }
    http {
      proxy_cache_path /var/cache/nginx/tiles levels=1:2 keys_zone=tiles:10m max_size=1g inactive=30d use_temp_path=off;
      
      server {
        listen 80;
        location / {
          proxy_pass https://tile.openstreetmap.org/;
          proxy_set_header Host tile.openstreetmap.org;
          proxy_set_header User-Agent "Reitti/1.0";
          proxy_cache tiles;
          proxy_cache_valid 200 30d;
          proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        }
      }
    }
    EOF
    nginx -g 'daemon off;'"
  restart: unless-stopped
  healthcheck:
    test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1/0/0/0.png"]
    interval: 30s
    timeout: 10s
    retries: 3

In the reitti service, add under depends_on:

tile-cache:
  condition: service_healthy
  • Opt out: Set the TILES_CACHE environment variable to an empty value to disable the cache and keep previous behavior.
  1. Changed data handling (interpolation)
  • Reitti now interpolates GPS points for all incoming data based on time and distance thresholds (previously only for Google Timeline imports).
  • This may change how Visits and Trips are computed (e.g., fewer gaps, more stable stay detection).
  • A new VisitSensitivity configuration is automatically created on the day of the update. Please review and adjust it to your needs after upgrading.

Recommendation: Make a backup before upgrading. This has been running for several days on my machines, but caution is always wise.

What’s new

Ingestion and data handling

  • Single-pipeline ingestion: Timeframe-based processing replaces multi-queue message processing for improved reliability and maintainability.
  • GPS interpolation for sparse or dense streams (feature request #489): Interpolates points when samples are close in time and distance; ignores overly frequent points for calculations. Enables accurate results with energy-saving tracking modes.

Maps and media

  • Multi-year map display optimized (#535): Significantly improved performance when visualizing long histories.
  • Photo clustering: Large numbers of photos are now clustered on the map for better performance and usability.

Customization and admin tools

  • Change path color per user (#501/#516): Customize your path color in Settings > User Management > Your Profile. Presets included; custom color supported.

    image
  • Logging section for admins (#550): Adjust log level at runtime and view live logs in the UI (no CLI required).

    image
  • Redis DB selection (#503/#504): Use the REDIS_DATABASE environment variable to point reitti at a specific Redis database index.

UI/UX improvements

  • General rendering performance improvements and cleaner look across mobile and desktop.

  • Better swipe handling for date picker (bugfix #522/#524).

  • Lighter background for the timeline container (#481/#517).

  • Geocoding actions now show spinners and have improved padding (#491/#555).

  • Fallback avatar alignment corrected (#543/#553).

    image

Tools

  • Local GPX Test Data Tool (#531/#530): Open GPX files, add/remove points, and draw paths with stops using your mouse. Runs 100% locally. Find it at docs/tools/index.html. If there’s interest, I can deploy it publicly.

    image

Internationalization

Other changes and fixes

  • Missed visits improvements and fixes (#523/#545, #551/#552).
  • Wait-and-batch processing for incoming points (#489/#511).
  • Combined additions and fixes (#513).
  • Adjust export to ignore certain points (#514).
  • Make labels translatable (#500/#515).
  • Timeline showing trips a day ahead fixed (#506/#518).
  • New screenshots for docs (#530/#521).
  • Stay detection queue stats added (#526/#527).
  • Test processing pipeline (#534).
  • Migration for new VisitSensitivity settings (#536/#537).
  • Rename SQL migration to correct naming (#536/#539).
  • Remove redundant bounds extension for latest location (#540/#541).
  • Remove redundant USER directive from Dockerfile (#523/#546).
  • Ensure consistent tests and improve reliability (#554).
  • Fixed e2e test locale string (#498).
  • Update runtime to Java 25 for performance and future-proofing (#559/#560).
  • Smaller cleanups and refinements (#561).

New contributors

Full changelog: v2.5.0...v3.0.0

— Daniel Graf (dgraf-gh) 🎄

Don't miss a new reitti release

NewReleases is sending notifications on new releases.