aboutsummaryrefslogtreecommitdiff

OTP Wallet for Connect IQ

OTP Wallet is a Garmin Connect IQ watch app for displaying TOTP, HOTP, and Steam Guard codes, and showing saved barcodes and QR codes at a scanner. Entries are added and managed through Garmin Connect app settings. The app supports QR, Data Matrix, PDF417, Aztec, and common linear barcode formats; device size and scanner compatibility can limit what is readable.

The project is released as version 1.0.0. The app has no network permissions or backend. Entry records are encrypted in watch storage. A PIN can protect selected entries, but it is four digits and should not be treated as strong protection against someone with copied watch data. Unlocked entries use a device key stored with the app data. Garmin Connect settings are handled by Garmin; do not assume secrets pasted there are private from Garmin. There is no export or backup feature, so keep a separate secure backup of your source authenticator data.

Features and limitations

  • TOTP and HOTP with SHA-1, SHA-256, or SHA-512, plus Steam Guard codes.
  • Per-entry PIN protection, session locking, and optional encrypted entry names.
  • Manual entry, otpauth:// import, and unencrypted Aegis JSON import through Garmin Connect settings.
  • Barcode and QR code display; codes are generated on the watch.
  • No watch camera, encrypted Aegis import, or export/backup from the app.
  • Phone settings require a Connect IQ Store installation; sideloaded builds are for development and testing.

See the user guide for setup and use, security notes for storage details and limits, and testing results for current verification and known limitations. Report vulnerabilities privately as described in SECURITY.md.

Get the source

Browse the public repository or clone it over HTTPS:

git clone https://git.cirakg.xyz/otpGarmin.git
cd otpGarmin

Build and test

Requirements: Docker with Buildx and GNU Make. The Garmin Connect IQ SDK is downloaded separately after you accept Garmin's license and sign in.

make image       # Build the development container
make sdk         # Accept Garmin terms and download SDK/device files
make key         # Create a local developer key for packaging
make build       # Compile a debug build (default device: fr70)
make test        # Run tool tests and Monkey C unit tests
make ci          # Run the full build, test, packaging, and documentation checks
make package     # Build the signed Store package

Build for another device with make build DEVICE=<device-id>. make package produces a signed .iq package and per-device .prg files under build/. To use phone settings, upload the package through Garmin's developer workflow and install the Store beta on a watch. See the developer guide for the full workflow. The first make image and make sdk require network access; routine build and test targets use the prepared local container and SDK.

Project documentation

Contributing

See CONTRIBUTING.md for contribution guidelines.

License

Copyright (C) 2026 cirakg. This project is licensed under GPL-3.0-only, without warranty. Generated barcode tables retain the upstream licenses listed in THIRD_PARTY_NOTICES.md. Garmin's SDK and device downloads are separate and are not included.