Repository navigation
Releases
Waykeep 1.1.1 — first signed build
First developer-signed build of Waykeep.
Same 1.1.0 feature set as the previous tag, re-cut with a production signing key so Android can actually install it. No app code changed; the only differences are versionCode 6892 and versionName v1.1.1.
Download: com.waykeep.app_waykeep-v1.1.1_6892-reproducible-release.apk (12.2 MB, Android 8.0+)
Verify before installing (recommended):
SHA-256 (APK) d8f7f8fc2339c8f0316046aafcdfb717c5255c0b3421321be75d32a4c6181a97
Certificate SHA-256 10a76228001d51448bec8ab43036bf491cba176f6f6e924a18a108607388fb3c
With Android build-tools installed:
apksigner verify --print-certs com.waykeep.app_waykeep-v1.1.1_6892-reproducible-release.apk
sha256sum com.waykeep.app_waykeep-v1.1.1_6892-reproducible-release.apk
Install: open the APK on the phone and allow installing from your file manager or browser. Android may warn about an app from an unknown source, and Play Protect may ask you to confirm. This build is signed by one developer certificate, not distributed through a store.
If Android shows the new unverified-developer flow, enabling Developer options is required and, in regions where enforcement is already live, the install can require a waiting period. Installing over ADB (or another tool that talks to the phone directly) is exempt.
Upgrading: the 1.1.0 reproducible artifact was unsigned and could not be installed, so there is no installed base to migrate. The testing build uses a different package (com.waykeep.app.debug) and can stay installed alongside this one, but does not share data with it.
Signature changes: every future update must be signed with the same certificate. This artifact, and any later release, cannot be installed over a build signed by a different key.
Waykeep 1.1.0 — Route-led UI
Waykeep 1.1.0 — Route-led UI
- Route-led Home and Track Detail: the latest real route is the hero, fitted whole in the frame
- Weekly goal stays visible as a compact strip with its distance and percentage
- Route-first feed with real route shapes; the latest run is not repeated
- Quiet three-metric Stats strip, with the full instrument grid behind More stats
- Inter + Barlow Condensed display type, tabular data in JetBrains Mono
- Percentile pace/speed chart with clipped-outlier markers
- Recording screen hides empty Gain/Loss cells
Artifacts
com.waykeep.app_waykeep-v1.1.0_6891-reproducible-release-unsigned.apk— the reproducible F-Droid artifact. It is unsigned and Android will reject it; SHA-256cd92bb25a0e5664e5c8e0fdea8e079c2d9b5d944e458cfbfc01ac58bfa7b6b26.com.waykeep.app_waykeep-v1.1.0_6891-debug-signed.apk— signed with the Android debug key so it installs for testing. Not a production build: do not distribute it, and a future release signed with a different key cannot update it.
A production-signed APK requires the release keystore, which is still missing.
Tag: waykeep-v1.1.0 (the upstream repository already has a historical v1.1.0 tag).
Waykeep v1.0.0-beta.5
Debug-signed installable APK (irreproducible flavor, package com.waykeep.app.debug).
Fifth beta — recovery, live-recording trust, and voice polish. Highlights since v1.0.0-beta.4:
Recording recovery and diagnostics
- GPS journal sampling keeps every rejected and pre-first-accepted fix, and reconstructs accepted fixes omitted by sampling, so an interrupted recording can still be recovered without unbounded journal growth.
- Recovered track copies now keep their altitude gain/loss provenance instead of relabeling it
UNKNOWN.
Live recording status
- The recording screen shows recent GPS accuracy (±N m).
- A warning appears once when battery drops to 15% or lower while recording and not charging. Recording is never stopped or interrupted.
Opt-in GPS elevation fallback
- When no barometer value exists, an enabled fallback estimates gain/loss from GPS altitude. Barometer data always wins when present.
- Fixes with missing or worse than 20 m vertical accuracy are ignored; a five-fix median and 3 m deadband reduce noise.
- GPS-derived gain/loss is labeled
GPS estimatein recorded statistics. - Database v43 adds provenance columns. Existing tracks are marked
UNKNOWN; no source is guessed.
Voice announcements
- Each spoken statistic keeps its include switch and gains a schedule: use global, off, or one time/distance interval.
- Simultaneously due statistics are combined into one announcement.
- Lap pace uses a separate recent-distance window (default 1.0 selected unit, minimum 0.1).
Fixes
- A connected but silent barometer no longer suppresses the enabled GPS fallback.
- Preference callbacks queued after
TrackRecordingServiceshutdown no longer crash. - Recovery preserves the altitude source instead of losing it.
Verification
- 96 unit tests, 0 failures.
- Device-verified on a POCO 25028PC03I (Android 15): the v42→v43 migration preserved all 8 tracks and 1,629 trackpoints, database integrity is
ok, and the app launches without a fatal crash. - The full instrumented suite no longer crashes; remaining failures are test-isolation/fixture issues when run without package clearing.
Known limitations
- GPS-derived elevation is approximate and opt-in; it is not a replacement for a barometer.
- Debug-signed: Play Store and F-Droid builds need a release keystore.
Waykeep v1.0.0-beta.4
Debug-signed installable APK (irreproducible flavor, package com.waykeep.app.debug).
Fourth beta — fixes found while actually using beta.3. Highlights since v1.0.0-beta.3:
Finishing a recording no longer closes the app
- Pressing Finish on the stop screen dropped straight to the launcher when the recording screen was the task root, which happens whenever the recording is reopened from the notification after the task is gone.
TaskStackBuilder.addParentStack()did nothing because no activity declaresparentActivityName, so the notification built a task containing only the recording screen; finishing it emptied the task.- The notification now builds
[TrackListActivity, TrackRecordingActivity]explicitly, and Finish falls back to opening the track list if it would otherwise leave an empty task. The track was already saved in both cases — this was never a crash.
Standing still stays at 0 m
- The provisional network start is stored as the first point so the track begins where you did. The hop from it to the first GPS fix is now only counted when it is longer than the network fix's own accuracy; a 20 m hop against a ±100 m network fix is noise, so the segment breaks instead.
- Measured on the test device before this change: 21.95 m and 25.76 m within ten seconds of standing still.
Crash after saving is no longer invisible
- Uncaught exceptions are written to
files/last-crash.txt. The recording journal only records a process exit while a session is open, so anything that failed after saving left no trace at all.
Verification
- 65 unit tests, 0 failures (3 new cases for the network-start hop rule).
- Device-verified on a POCO 25028PC03I (Android 15): the notification now produces a two-activity task rooted at the track list and Finish returns to it; a 50 s stationary recording shows 0.00 m with a 3.54 m GPS fix.
Known limitations
- The network-start hop rule is unit-tested only: indoors every GPS fix is filtered as stationary, so it gets its first real exercise on a run where the chip reports movement.
- Debug-signed: Play Store / F-Droid builds need a release keystore.
Waykeep v1.0.0-beta.3
Debug-signed installable APK (irreproducible flavor, package com.waykeep.app.debug).
Third beta — GPS acquisition and distance fixes. Highlights since v1.0.0-beta.2:
See what the GPS is doing
- New journal events:
gnss_status(satellites visible / used in fix, max SNR, throttled to changes),gnss_first_fix(engine-reported time-to-first-fix) andgnss_assistance(whether the ROM accepted each A-GPS command). - The status strip and notification now say "Searching for satellites (used/visible)" instead of a generic "Waiting for GPS signal".
Start where you started
- A fresh network location is stored as the provisional first point while GPS is still acquiring, so the first few hundred metres are no longer missing from the track. The first GPS fix connects to it within 1 km; beyond that the segment breaks rather than drawing a long straight line.
- While only that coarse fix exists, the UI says "Approximate location (±N m)".
Standing still is standing still
- A receiver keeps reporting positions while stationary. The chip's own speed uncertainty is now used to detect that (measured here: 0.49 m/s with ±3.18 m/s), those positions are no longer stored, and the distance stays at 0 m. Real walking is unaffected.
Diagnosis behind it
- On 2026-10-31 the app registered with the GPS provider 88 ms after start and received no location callback for 201 s; the accuracy filter rejected nothing. Both A-GPS commands returned
accepted=trueon the test device and the fix still took 201 s (Codeberg #2410 / PR #2411), so the network-provider start is the practical fix.
Verification
- 62 unit tests, 0 failures.
- Device-verified on a POCO 25028PC03I (Android 15): sitting still indoors → 0.00 m and "Approximate location (±100 m)"; satellites logged as 1–4 visible, 0 used in fix, 22–27 dB SNR; the provisional start connects to the first GPS fix.
Known limitations
- The standing-still filter needs the chip's speed accuracy; on devices that do not report it, drift still counts.
- Debug-signed: Play Store / F-Droid builds need a release keystore.
Waykeep v1.0.0-beta.2
Debug-signed installable APK (irreproducible flavor, package com.waykeep.app.debug).
Second beta — adds local diagnostics and track recovery. Highlights since v1.0.0-beta.1:
Diagnostics (on-device only)
- Every recording now keeps a private event journal: raw GPS fixes and the accuracy decision before filtering, merged trackpoints and storage decisions, database write results, recording lifecycle, markers, device state (battery, power saver, idle, screen, network transport, location permission/provider), crashes, and the previous process-exit reason on Android 11+.
- Bounded retention: 30 days / 20 MiB total, 4 MiB per session; the active session is never pruned. Nothing is uploaded.
Share diagnostics
- New overflow action shares only the latest session as a ZIP (
manifest.json+session.jsonl) through the Android Sharesheet. - Both the manifest and share text warn that exact GPS coordinates and possibly fitness data are included. Old share ZIPs are purged.
Recovered track copy
- If Android kills the recorder, the track list offers Recover copy. It builds a separate
Recovered — <date>track from the journal, keeping valid fixes that the accuracy filter had rejected and merging available sensor data. - The original track and its rows are never modified, and retries cannot create duplicates.
Verification
- 27 JVM tests cover writer ordering/isolation/durability, retention, archive contents, payload privacy, recovery parsing/idempotence, torn lines, and prompt gating.
- Device-verified on a POCO 25028PC03I (Android 15): journal events, share archive, previous-exit event, recovery prompt, separate copy, and no duplicate re-offer.
Known limitations
- Recovery only uses fixes Android delivered and the app durably logged; it cannot reconstruct missing locations.
- Instrumented tests still cannot compile because of pre-existing stale
AggregatedStatisticsTestconstructors. - Debug-signed: Play Store / F-Droid builds need a release keystore.
Waykeep v1.0.0-beta.1
Debug-signed installable APK (irreproducible flavor, package com.waykeep.app.debug).
First beta — feature-complete enough for daily use. Highlights since v1.0.0-alpha.2:
Recording
- Survives swipe-from-recents and OEM task killers (foreground service + background location + battery-exemption prompt).
- Breaks the recorded segment after a GPS outage instead of drawing a straight line across the gap.
- Selectable average heart-rate field.
- Live compass: tap toggles north-up / heading; optional Rotate map with compass setting (#2274).
Stats & feed
- Aggregated statistics: switch day / week / month / year, with elevation gain (#1872, #1873).
- Personal bests and the home-screen stats widget (week distance, sessions, moving time, month total).
- Activity list no longer clips distances over 100 km (#2270); record button hidden while searching (#2268).
Customisation
- Custom activity types: add, rename, delete and choose an icon (#1879, #2284).
- Suggested loops: pick the BRouter profile (trekking / Asia-Pacific bike / shortest).
Export & share
- Export-all-to-one-file restored, with a GPX-safest warning (#2402).
- Export failure dialog now shows the actual error message (#2362).
- Share an image, a GPX/KML file, or Analyze with AI (text payload).
Branding
- Branded README screenshots and the real app-icon logo.
Known limitations
- Health Connect heart-rate import is not implemented yet.
- Suggested loops require a network connection (public BRouter server); offline routing is planned for v2.
- Debug-signed: Play Store / F-Droid builds need a release keystore.
Waykeep v1.0.0-alpha.2
Debug-signed installable APK (irreproducible flavor).
Highlights since v1.0.0-alpha.1:
- Analyze-a-run now sends a compact text payload (no file upload) to ChatGPT/Claude/Gemini.
- Security/anr hardening: SQL identifier parsing, XXE protection, backup disabled, scoped FileProvider, async VACUUM, teardown null-safety.
- Export DB reads moved off main thread.
Note: this is a debug-signed pre-release; Play Store/release builds need a keystore.
Waykeep v1.0.0-alpha.1
First public alpha of Waykeep v1 — a privacy-first, offline GPS tracker forked from OpenTracks, now with its own identity, in-app maps, and overhauled charts.
Highlights
- In-app offline map (no separate map app needed): Esri canvas tiles, route polyline, start/end pins, photo markers, follow mode, offline tile cache + offline toggle
- Waykeep identity: new name, Sealed-Path logo, cyan-on-black theme, Inter + JetBrains Mono, night glassmorphic home background
- Charts rebuilt: one metric at a time (elevation / speed-or-pace / HR / cadence / power), Time|Distance toggle, tap-to-inspect with auto-fade, empty state
- Share images: 1080px stat cards (feed / story / square) with map backdrop, gallery download
- Feed + stats: Material 3 feed with route thumbnails, personal bests, monthly recap, heart-rate zones
- GPLv3 (upstream Apache-2.0 parts preserved — see RELICENSING.md)
Full details in CHANGELOG.md.
Install
- Download the APK below onto your Android phone (Android 8.0+).
- Open it and allow Install unknown apps when prompted, then Install.
- Waykeep installs as a separate app next to OpenTracks — nothing is overwritten. Move existing tracks over via GPX/KML export → import.
Notes
- Alpha quality: debug-signed test build, expect rough edges. Please file issues on GitHub.
- Built from commit
4f905823c.