Faktor is a Mac app that keeps an eye out for new 2FA codes and gives you a great autocomplete experience in Google Chrome.
- Automatic OTP Detection - Monitors incoming SMS messages and extracts verification codes
- Browser Autofill - Seamlessly fills OTP codes in Chrome, Arc, Brave, and Edge via browser extension
- 100+ Services Supported - Built-in parsers for Google, Apple, Amazon, Microsoft, and many more
- Privacy Focused - All data stays on your Mac, no cloud sync required
- Menu Bar App - Minimal footprint, runs quietly in your menu bar
┌─────────────────┐ ┌──────────────────┐
│ Messages.app │───────────────────►│ Faktor.app │
│ (iMessage) │ Reads Messages │ (Menu Bar) │
└─────────────────┘ └────────┬─────────┘
│
│ Native Messaging
▼
┌──────────────────┐
│ Browser Extension│
│ (Chrome/Arc/etc) │
└──────────────────┘
- Faktor reads your Messages database (requires Full Disk Access permission)
- Incoming SMS messages are parsed for OTP codes using regex patterns
- Detected codes are sent to the browser extension via Chrome Native Messaging
- The extension displays an autofill UI on login pages
- macOS 13.0 (Ventura) or later
- Xcode 15+ (for building from source)
- Chrome, Arc, Brave, or Microsoft Edge browser
-
Clone the repository:
git clone https://github.com/user/faktor-app.git cd faktor-app -
Open the Xcode project:
open faktor.xcodeproj
-
Build and run (⌘R)
-
Grant required permissions when prompted:
- Full Disk Access - Required to read the Messages database
- Notifications - For OTP code alerts
The browser extension is required for autofill functionality:
- Open your browser and navigate to
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked" and select the
BrowserExtensionfolder
faktor-app/
├── Faktor/ # Main macOS app
│ ├── FaktorApp.swift # App entry point
│ ├── Models/ # Data models
│ ├── Data/ # Business logic managers
│ │ ├── MessageManager.swift # SMS database queries
│ │ ├── BrowserManager.swift # Browser extension communication
│ │ └── AppStateManager.swift# Permission & state management
│ ├── OTPParser/ # OTP extraction logic
│ │ ├── OTPParser.swift # Main parsing engine
│ │ └── CustomOTPParsers.swift# Service-specific parsers
│ └── UI/ # SwiftUI views
│ ├── Menu/ # Menu bar UI
│ ├── Settings/ # Settings window
│ └── Onboarding/ # Permission setup flow
├── BrowserExtension/ # Chrome extension (Manifest V3)
│ ├── manifest.json
│ ├── service-worker.js # Background worker
│ └── content.js # Content script with autofill UI
├── FaktorNativeHost/ # Native messaging bridge
│ ├── main.swift # CLI tool for browser communication
│ └── README.md # Setup documentation
└── FaktorTests/ # Unit tests
xcodebuild -scheme faktor -configuration Debug buildThe native host is built automatically with the main app. For standalone builds:
cd FaktorNativeHost
./build.shxcodebuild test -scheme faktor- SwiftUI - Native macOS UI
- SQLite.swift - Database queries
- Combine - Reactive data flow
- Chrome Native Messaging - Browser communication
Faktor includes built-in parsers for 100+ services including:
- Google, Apple, Microsoft, Amazon
- GitHub, GitLab, Bitbucket
- Twitter/X, LinkedIn, Discord
- Stripe, PayPal, Square
- And many more...
Custom parsers can be added in OTPParser/CustomOTPParsers.swift.
- Local Only - All data processing happens on your device
- No Cloud Sync - OTP codes are never transmitted externally
- Minimal Permissions - Only requests necessary system permissions
- Open Source - Full transparency into how your data is handled
Go to System Settings → Privacy & Security → Full Disk Access and enable Faktor.
- Ensure Faktor.app is running
- Check that native messaging manifests are installed:
ls ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/
- Restart your browser
- Verify SMS messages are syncing to your Mac via iMessage
- Check Settings → General → Enable message monitoring
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
- SQLite.swift - Database wrapper
- FluidMenuBarExtra - Menu bar component