A cross-platform apnea and breath-holding training app built with Python and Kivy.
- O2 Tables - Fixed hold time with decreasing rest periods to improve oxygen efficiency
- CO2 Tables - Increasing hold time with fixed rest periods to build CO2 tolerance
- Free Training - Practice breath holds at your own pace with a simple timer
- Customizable Settings - Adjust hold times, rest periods, and number of rounds
- Visual Progress - Animated progress circle with phase-based color feedback
# Install development dependencies
uv sync --group dev
# Install pre-commit hooks
uv run pre-commit installDevelopment mode stores the database in the project directory instead of the system data directory:
uv run --env-file .env.development apnoOr set the environment variable manually:
APNO_DEV=1 uv run apnouv run ruff check .uv run ruff format .The single source of truth for the app version is apno/__init__.py:
__version__ = "0.2.0"The version script updates all files that reference it (apno/__init__.py,
pyproject.toml, buildozer.spec):
# Get current version
python scripts/version.py get
# Set a specific version
python scripts/version.py set 0.3.0
# Bump patch/minor/major
python scripts/version.py bump patch
python scripts/version.py bump minor
python scripts/version.py bump majorAfter bumping, run uv lock to sync the lockfile.