Easy OTP

Two-factor codes in your Mac's menu bar. Click an account and its current code is copied to the clipboard.

Download for macOSInstall instructions
Latest releaseThe Easy OTP menu listing accounts with their service icons, with GitHub highlighted

Download and install

Requires macOS.

Download Easy OTP.dmgLatest release
  1. Open the downloaded .dmg and drag Easy OTP into Applications.
  2. The app isn't signed, so macOS may block it. Try these approaches:
    • Right-click method: In Applications, right-click Easy OTP, choose Open, then click Open in the dialog.
    • Terminal method (macOS 15+): Run this and open the app again:
      xattr -dr com.apple.quarantine "/Applications/Easy OTP.app"
    • Settings method: Check System Settings → Privacy & Security → App Management for any blocked app notification and allow it.
  3. Click the Easy OTP icon in the menu bar and choose Easy OTP Settings... to add your first account.

Build from source

Requires macOS and Node.js 22 or later.

git clone https://github.com/iambriansreed/easy-otp.git && cd easy-otp && npm install && npm run make-icons && npm run build

The installer is written to easy-otp/dist/Easy OTP-<version>-arm64.dmg. The development guide covers the other scripts.

Using Easy OTP

Adding accounts

Click the Easy OTP icon in the menu bar and choose Easy OTP Settings.... The Add Account section has three tabs:

  • From URL: paste an otpauth://totp/ URL, like the one encoded in a setup QR code.
  • Manual: enter the issuer, account name, and secret, and optionally choose a favicon or an emoji.
  • Import File: click or drop a .txt file with one otpauth:// URL per line. Easy OTP reports how many accounts were added, updated, and skipped.

Accounts are matched by issuer and account name, so adding one you already have updates it instead of creating a copy. Imports keep any icon you already chose.

Copying a code

Click an account in the menu. Its code is copied to the clipboard, and the menu shows the issuer and code in large type until you click somewhere else. For the next minute, the top of the menu shows which account you copied last.

The copy confirmation showing GitHub, the word Copied, and a six-digit code

With the menu open, Up Arrow and Down Arrow move the highlight, Return or Space copies, and Esc closes it. Command-Q quits, or use the Quit Easy OTP item at the bottom of the menu.

Icons

If you add an account without an emoji, Easy OTP guesses the service's website from the issuer name and fetches its icon. Any account still missing an icon is filled in the next time the app starts, or right away with Find Missing Icons, which appears in Settings whenever an account has no icon.

To fix a wrong or missing icon, click Edit on the account. With Favicon selected, type the service's website and the icon is looked up as you type. Choose Emoji to open the macOS emoji picker instead.

An account open for editing, with its issuer, account name, secret, and favicon website fields

In the menu, icons stay grey until you point at an account, then show in full color.

Organizing

Drag the handle on the left of an account to change its position in the menu. The eye button hides an account from the menu; it stays in Settings marked Hidden. Edit changes an account's details and × deletes it.

Privacy

Accounts are saved to one file on your Mac, encrypted with Electron's safeStorage. The only network requests Easy OTP makes are icon lookups, which send a website name to DuckDuckGo's icon service, and to Google's only when DuckDuckGo has no icon for it. Secrets are never sent anywhere.

Supported codes

Easy OTP generates standard TOTP codes: 6 digits, a new code every 30 seconds, using SHA-1. Accounts set up for 8 digits, a different interval, another algorithm, or counter-based (HOTP) codes won't work.

The Easy OTP Settings window listing accounts with icons, one marked Hidden, above the Add Account form