A focused, offline CrossFit and functional-fitness timer for Android.
WOD Timer is a local Android timer for CrossFit and functional-fitness workouts. It supports For Time, AMRAP, Every-X-Minutes, and work/rest intervals, with reusable presets.
| Quick start and presets | Active workout |
![]() |
![]() |
- For Time with an optional time cap, AMRAP, Every X Minutes, and work/rest intervals
- Reusable presets with backup and restore
- Sound and vibration cues, with an optional final-seconds warning
- Pause, resume, reset, and background timing
- Automatic immersive landscape timer with a larger clock
- Automatic light and dark themes
- Fully offline operation with no accounts, ads, analytics, or network permission
Open the project in Android Studio, let Gradle sync, and run the app configuration on an Android 8.0/API 26 or newer device or emulator. The Gradle daemon runs on JDK 25 (see gradle/gradle-daemon-jvm.properties); Gradle downloads it automatically if it is not installed.
To verify the project from a terminal:
./gradlew testDebugUnitTest lintDebug assembleDebugTiming logic uses Android's monotonic clock and should be tested with explicit timestamps rather than real-time waits. When changing the Room database, increment its version, add a migration, and commit the updated schema from app/schemas.
Pushing a tag such as v1.2.3 (or v1.2.3-rc.1 for a pre-release) runs the release workflow, which tests, signs, and publishes the APK to GitHub Releases. The version code is derived from the tag as major * 1000000 + minor * 1000 + patch. The workflow needs the ANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS, and ANDROID_KEY_PASSWORD repository secrets.
To sign release builds locally, copy keystore.properties.example to keystore.properties and fill in your keystore details. Without it, assembleRelease still builds an unsigned APK.
- Kotlin and Jetpack Compose with Material 3
- Room/SQLite local preset persistence
- Coroutines and StateFlow
- Foreground service for active workouts
- Custom PCM workout cues through Android
AudioTrack
The app does not request internet access. Presets remain on the device and no usage data is collected.
Download the signed APK from GitHub Releases. Android may ask you to allow installation from your browser or file manager.
WOD Timer is available under the MIT License.

