A feature-rich, secure OTP (One-Time Password) generator app built with Flutter. OpenOTP allows you to store your OTP keys securely and generate TOTP and HOTP codes with a clean, customizable interface.
- Sync OTP keys between LAN devices with encryption
- Export OTP keys to a file with optional encryption
- Securely store OTP keys using Flutter Secure Storage
- Optional AES encryption of OTP keys with a password
- Support for both TOTP (time-based) and HOTP (counter-based) codes
- Customize OTP settings (digits, period, algorithm, counter)
- Multiple view options:
- Grid view
- List view
- Focus view (Authy-style)
- Edit mode for rearranging and deleting entries
- Scan QR codes from camera (Android, iOS, macOS)
- Import QR codes from image files (all platforms)
- Standard otpauth URI format support
- Multiple theme options (Light, Dark, Dark Forest, and more)
- Custom theme editor to create your own themes
- Adjustable page transition animations
- Provider icon support for popular services
- Biometric authentication (fingerprint, face ID)
- Password/PIN code protection
- Encrypted storage of sensitive data
- Optional second layer of encryption using your password
- LAN synchronization between devices
- QR code pairing for easy connection
- Optional port configuration
- Selective sync (OTP data only or all settings)
- Export/Import functionality
- Optional encryption with password protection
- File-based or direct text import/export
- Flutter SDK (version 3.7.2 or higher)
- Dart SDK (version 3.0.0 or higher)
-
Clone the repository
-
Install dependencies:
flutter pub get
-
Run the app:
flutter run --release
Prebuilt binaries are available for all major platforms. Visit the Releases page to download:
- Windows: Installer (
.exe
) - Linux: AppImage (
.AppImage
) - Android: APK (
.apk
) - iOS: Ad-hoc IPA (
.ipa
— sideload required)
- Tap the floating action button on the home screen
- Choose to scan a QR code or manually enter details
- For manual entry, provide the account name, secret key, and optional settings
- Save the entry
- For TOTP entries, codes refresh automatically based on time
- For HOTP entries, tap the dice button to generate a new code
- Tap the copy icon to copy it to clipboard
- Enter edit mode to rearrange or delete entries
- Switch between grid, list, and focus views in settings
- Open LAN Sync on both devices
- Set one device as server and one as client
- Connect using IP address or scan the QR code
- Select what data to sync
- Confirm the sync operation
- Export your data to an encrypted file
- Import from file or directly paste exported data
- Choose what to import (OTP entries, settings, or both)
- Set up a password in Settings > Security
- Enable the "Encrypt OTP Keys" option to add a second layer of encryption
- Your OTP data will be encrypted with your password for additional security
- If you change your password, your data will be automatically re-encrypted
- If you remove your password, the second layer of encryption will be removed
OpenOTP uses multiple layers of security to protect your sensitive data:
-
Secure Storage: OTP keys are encrypted and stored in the platform's secure storage:
- Android: AES encryption with Android Keystore
- iOS: Keychain
- Windows/macOS/Linux: Appropriate platform-specific secure storage
-
Password Encryption: Optional second layer of encryption using your app password:
- Adds an additional encryption layer to your OTP data
- Automatically re-encrypts data when password is changed
- Decrypts data if password is removed
- Password hash/salt stored securely in platform's secure storage
-
Biometric Authentication: Supports fingerprint, face ID, and other biometric methods on compatible devices
-
Encrypted Exports: Optional password protection for exported data
Contributions are welcome! Please feel free to submit a pull request, or open an issue.
This project is open source and available under the GNU General Public License v3.0. For more details, see the LICENSE file.
If you find this project useful, consider supporting its development through this link. Your support is greatly appreciated!
I only accept cryptocurrencies donations at the moment.