A macOS menu bar app for managing TOTP (Time-based One-Time Password) accounts.
Click an account to copy its current OTP code to the clipboard.
Requires macOS. Since the app is unsigned, macOS will block it on first launch. To open it:
- Right-click the app → Open → click Open in the dialog
If that doesn't work (macOS 15+):
- Run this in Terminal:
xattr -dr com.apple.quarantine "/Applications/Easy OTP.app"
- macOS
- Node.js 22+
npm install
npm run buildOpen dist/Easy OTP-<version>-arm64.dmg to install.
npm installA default build/icon.icns is included — no action needed to get started.
If you want to use your own icon, replace assets/icon.svg and run:
npm run make-iconsThis regenerates build/icon.icns from your SVG (requires macOS and npm install).
npm startCompiles TypeScript and launches the app via Electron. The tray icon will appear in your menu bar.
npm run pack # builds a local .app (no installer, fastest for testing)
npm run build # builds a distributable .dmgOutput goes to dist/.
Accounts are stored encrypted on disk using Electron's safeStorage. You manage them through the app itself.
From the menu bar → Easy OTP Settings... → Add Account. Two options:
- From URL — paste an
otpauth://totp/...URI (e.g. from a QR code scanner) - Manual — enter Issuer, Account, and Secret directly
- Import File — select a
.txtfile with oneotpauth://URL per line
Importing merges with existing accounts. Accounts with the same issuer + account combination are updated in place.
Open Easy OTP Settings... → click Edit on any account to update its fields, or × to delete it. Drag the handle on the left to reorder.
Click any account in the menu bar to copy its current 6-digit TOTP code to the clipboard. A notification will confirm the copy.
| Script | Description |
|---|---|
npm start |
Run in development mode |
npm run pack |
Build a local .app for testing |
npm run build |
Build a distributable .dmg |
npm run make-icons |
(Optional) Regenerate build/icon.icns from assets/icon.svg |

