Readly is a native macOS menu bar utility. Press a global hotkey, drag a rectangle over anything on screen, and the text inside is recognized and copied to your clipboard — no windows, no saved files, no cloud.
- Press ⇧⌘2 (rebindable)
- The screen dims and the cursor becomes a crosshair — drag over anything: an image, a video frame, a dialog, a PDF scan, non-selectable text
- Text is recognized on-device and copied to the clipboard; a brief HUD confirms it
Everything happens on this Mac: ScreenCaptureKit for capture, Apple's Vision framework for OCR. Readly makes no network requests and keeps no history — nothing is ever uploaded anywhere.
- macOS 14+ on Apple Silicon
- Screen Recording access (see Permissions)
No release has been cut yet (see scripts/release.sh), so these don't have
anything to fetch until the first tag ships — build from source below in the
meantime.
With Homebrew:
brew tap mberrishdev/readly https://github.com/mberrishdev/Readly
brew trust --tap mberrishdev/readly
brew install --cask readlyOr grab Readly.dmg from the latest release.
Build from source:
git clone https://github.com/mberrishdev/Readly.git
cd Readly
open Readly.xcodeproj # ⌘ROr headless:
xcodebuild -project Readly.xcodeproj -scheme Readly -configuration Debug buildRun the tests:
xcodebuild test -project Readly.xcodeproj -scheme Readly -destination 'platform=macOS'| Action | Gesture |
|---|---|
| Capture text | Press ⇧⌘2, drag a selection |
| Cancel a selection | Press the hotkey again, or Esc |
| Everything else | Menu bar icon → Settings |
The hotkey is rebindable in Settings → Shortcut.
Readly needs Screen Recording access to capture the area you select. A first-launch onboarding window walks through granting it, rather than a cold system prompt firing off your first hotkey press.
macOS may show two dialogs — approve both:
- The classic Screen Recording toggle
- A newer one confirming Readly captures your selection directly, instead of through the system's window picker (Readly's own selection overlay replaces that picker)
Readly checks a static appcast.xml once a day via Sparkle
and verifies every update's EdDSA signature before installing it — no
backend involved. Toggle automatic checks and downloads, or check manually,
in Settings → Updates.
Readly is a pipeline, not an app with screens:
Hotkey → Selection overlay → Screen capture → OCR (Vision) → Clipboard + HUD
One coordinator (CaptureCoordinator) executes the effects of a small, pure,
unit-tested state machine (CaptureFlowMachine); everything else is a dumb
service it calls in order.
App/— composition root, menu bar, onboardingCoordinator/— the state machine and the coordinator driving itOverlay/— the selection window and the Cocoa/display/pixel coordinate mathServices/— hotkey, capture (ScreenCaptureKit), OCR (Vision), output (clipboard + HUD), permissionsSettings/— the settings window and its preferences storeUpdates/—SparkleUpdaterService, wrapping Sparkle so nothing else imports itReadlyTests/— coordinate math and flow/re-entrancy rules, pinned with Swift Testing
- Language auto-detection
- Capture history
- Table detection → paste as CSV
- Translate after capture