Skip to content

Releases: moerdowo/Readpaw

Readpaw 0.4.0

Choose a tag to compare

@moerdowo moerdowo released this 19 Jul 10:56

Two new features on top of 0.3.0.

LAN server mode

Click the Wi-Fi icon in the library header to start sharing the library on your local network. Other devices on the same Wi-Fi can open the URL shown (e.g. http://192.168.1.5:8080) in any browser and read comics / manga / PDF from the phone, tablet, or another Mac. Ebooks stay in-app.

  • Zero-config, LAN only, no password.
  • Reader has prev/next buttons and arrow-key navigation.
  • Click the icon again to stop sharing.

Auto-update via Sparkle

Sparkle 2 is now embedded. New releases arrive automatically:

  • Daily background check against https://raw.githubusercontent.com/moerdowo/Readpaw/main/appcast.xml.
  • Menu: Readpaw ▸ Check for Updates… for a manual check.
  • Updates are EdDSA-signed; the public key is baked into the app.

This is the last release you'll need to install by hand — from 0.4.0 onwards Sparkle handles the upgrade.

Install

Same as before — the DMG is ad-hoc signed but not Apple-notarised:

xattr -dr com.apple.quarantine ~/Downloads/Readpaw-0.4.0.dmg

Drag to Applications, then once:

xattr -dr com.apple.quarantine /Applications/Readpaw.app

System requirements

  • macOS 15.0 (Sequoia) or later
  • Apple Silicon (arm64)

Readpaw 0.3.0

Choose a tag to compare

@moerdowo moerdowo released this 14 May 14:19

A big feature release on top of 0.2.1 — translation reliability, a five-part feature sweep, and macOS platform integration.

Translate mode

  • Live Text fallback. Apple's VNRecognizeTextRequest can't read the stylised fonts used in most manga (verified zero detections on Japanese and Chinese pages across every revision and language hint). Readpaw now falls back to VisionKit's Live Text engine, which reads those pages reliably.
  • Side translation panel. Because Live Text only returns a flat transcript with no per-line coordinates, those pages show their translation in a new side panel — every line numbered in reading order, each with its translation, plus copy / copy-all.
  • Rotated OCR pass for vertical CJK text, and a Clear Cache button in translate settings.
  • Per-book languages — a Japanese manga and a Chinese manhua each remember their own source/target pair.
  • Copy original or translation from any bubble tooltip or panel card.

Library

  • Reading-progress badges on covers (a "% read" pill, a green check when finished, a bottom-edge progress bar).
  • A Continue Reading shelf at the top of the library.
  • Drag-and-drop a file onto the window to open it; File ▸ Open File… and File ▸ Open Recent too.

Reader

  • Bookmarks — per-page, ⌘D to toggle, with a bookmarks-list popover.
  • Two-page spread mode (right-to-left aware, persists per book).
  • Page grid — a thumbnail navigator popover.
  • Trackpad swipe between pages.

Ebooks

  • Typeface, line-spacing, and Light / Sepia / Dark / Black themes.
  • Table of contents popover.
  • In-book full-text search (⌘F) with highlighted snippets.

macOS integration

  • Open files from Finder ("Open With Readpaw") and the Dock.
  • Dock-icon menu lists recent books.
  • Export / Import Library Backup (File menu) — the portable stand-in for cloud sync; drop the JSON in iCloud Drive yourself to sync across Macs.

Install

The DMG is ad-hoc signed but not Apple-notarised. Before opening:

xattr -dr com.apple.quarantine ~/Downloads/Readpaw-0.3.0.dmg

Open the DMG, drag Readpaw to Applications, then once:

xattr -dr com.apple.quarantine /Applications/Readpaw.app

Full guidance: README.

System requirements

  • macOS 15.0 (Sequoia) or later
  • Apple Silicon (arm64)

Readpaw 0.2.1

Choose a tag to compare

@moerdowo moerdowo released this 14 May 03:26

Patch release on top of 0.2.0 with several translate-mode fixes plus a few reader UX tweaks.

Fixes

Translate mode

  • Tooltip no longer auto-appears the moment translate mode is turned on (or a new page renders). SwiftUI's .onHover was firing immediately for whichever bubble the cursor happened to be resting over; hover handling is now gated for ~350 ms after each page's OCR so you have to actually move the cursor onto a bubble for the first tooltip.
  • Tooltip no longer gets cut off at the page edges. Switched to a fixed tooltip width with edge-aware clamping so the whole rectangle stays inside the visible page, and long translations now wrap onto 2–3 lines instead of one long row.
  • One translation per speech bubble, not one per line. Apple Vision returns one observation per text line; nearby lines now get grouped into clusters and translated as a single sentence so the result has context.
  • Two side-by-side text columns inside the same bubble now translate independently — the horizontal-merge threshold was tightened so column gaps no longer fuse two distinct sentences.
  • Image and overlay stay aligned during window resize. ZoomScrollView now re-applies fit-page on every NSScrollView frame change (via frameDidChangeNotification), not just on SwiftUI updateNSView events — which weren't firing for a parent-geometry resize.

Reader

  • Comics and manga now always open at Fit Page regardless of whatever zoom you last left them at. Pinch zoom and the toolbar zoom menu still work during the session — they just don't follow the book into its next open.

Install

DMG is ad-hoc signed but not Apple-notarised. Before opening:

xattr -dr com.apple.quarantine ~/Downloads/Readpaw-0.2.1.dmg

Open the DMG, drag Readpaw to Applications, then once:

xattr -dr com.apple.quarantine /Applications/Readpaw.app

Full guidance: README.

System requirements

  • macOS 15.0 (Sequoia) or later
  • Apple Silicon (arm64)

Readpaw 0.1.2

Choose a tag to compare

@moerdowo moerdowo released this 13 May 10:42

Window sizing

On a clean install the main window now opens at 980 × 860 with a hard floor of 760 × 780, so the onboarding screen's 3D orb, italic tagline and "Choose your library" pill all fit on the first launch without needing to resize the window. Subsequent launches still use whatever frame macOS remembered for the window.

Nothing else changed compared to 0.1.1, including the SIGTRAP fix on packaged-app launch.

Install

Same flow as before — DMG is ad-hoc signed but not Apple-notarised, so clear quarantine before opening:

xattr -dr com.apple.quarantine ~/Downloads/Readpaw-0.1.2.dmg

Double-click the DMG, drag Readpaw to Applications, then clear quarantine on the installed app once:

xattr -dr com.apple.quarantine /Applications/Readpaw.app

Launch normally from Spotlight / Dock.

Full Gatekeeper / install guidance lives in the README.

System requirements

  • macOS 15.0 (Sequoia) or later
  • Apple Silicon (arm64)

Readpaw 0.1.1

Choose a tag to compare

@moerdowo moerdowo released this 13 May 10:32

Hotfix for 0.1.0.

What was broken in 0.1.0

A packaged Readpaw.app from the DMG would launch and immediately SIGTRAP (EXC_BREAKPOINT) before any window appeared. Two compounding causes:

  • The SwiftPM-synthesized Bundle.module initializer calls fatalError when its resource bundle isn't on disk where it expects. Depending on quarantine state, this could trap the process on first reference.
  • NSApplication.shared.setActivationPolicy(.regular) was being called from inside App.init, which races with SwiftUI's own application-startup wiring when launched as a .app bundle.

Fix

  • USDZView no longer touches Bundle.module. It looks for the bundled USDZ via Bundle.main directly (Contents/Resources/Color_orb.usdz), with a fallback to the SPM bundle path, and gracefully returns nil if nothing's found — so the onboarding screen will render without the 3D model instead of crashing the app.
  • build-app.sh now also copies resources flat into the .app's Contents/Resources/, so Bundle.main finds everything without the SPM bundle.
  • setActivationPolicy(.regular) is now only called when launched as a plain executable (e.g. swift run) — guarded by Bundle.main.bundleIdentifier == nil. A .app launch uses the activation policy NSApplicationMain already set from Info.plist.

Verified by reproducing the user-install flow: dragging the .app out of the DMG, applying com.apple.quarantine recursively to every file inside, then open-ing the app. It now launches cleanly.

Install

Same flow as 0.1.0:

xattr -dr com.apple.quarantine ~/Downloads/Readpaw-0.1.1.dmg

Then double-click the DMG, drag Readpaw to Applications, and:

xattr -dr com.apple.quarantine /Applications/Readpaw.app

…before launching from Spotlight / Dock. The DMG is ad-hoc signed but not Apple-notarised, so the xattr step is required to convince Gatekeeper to let it run.

Full install / Gatekeeper guidance is on the v0.1.0 release page and in the README.

System requirements

  • macOS 15.0 (Sequoia) or later
  • Apple Silicon (arm64)

Readpaw 0.1.0

Choose a tag to compare

@moerdowo moerdowo released this 13 May 10:07

First public release.

Install

  1. Download Readpaw-0.1.0.dmg below.

  2. Before double-clicking it, run this in Terminal:

    xattr -dr com.apple.quarantine ~/Downloads/Readpaw-0.1.0.dmg
  3. Now double-click the DMG and drag Readpaw onto Applications.

    If you skip step 2, macOS Sequoia will block the DMG with "Apple could not verify 'Readpaw-0.1.0.dmg' is free of malware…" and won't offer an Open Anyway button in the dialog — you'd have to walk through System Settings → Privacy & Security instead (see below).

  4. After the app is in /Applications, also clear the quarantine flag from the app once:

    xattr -dr com.apple.quarantine /Applications/Readpaw.app
  5. Launch Readpaw normally from Spotlight / Dock.

Why? — ad-hoc signed, not Apple-notarised

The DMG is signed locally but not run through Apple's notary service (that requires a paid Apple Developer ID). macOS attaches a com.apple.quarantine extended attribute to anything downloaded from a browser, and Sequoia's Gatekeeper refuses to open quarantined items that aren't notarised. The xattr -dr com.apple.quarantine … command removes that attribute and the OS stops blocking.

Alternative — System Settings flow

If you'd rather not touch Terminal:

  1. Double-click the DMG. macOS will refuse and show the "Apple could not verify…" dialog. Click "Done", don't move it to the Bin.
  2. Open System Settings → Privacy & Security.
  3. Scroll to the security section near the bottom. You'll see a line about Readpaw-0.1.0.dmg being blocked. Click Open Anyway next to it.
  4. macOS will prompt for your password / Touch ID, then mount the DMG.
  5. Drag Readpaw onto Applications, then repeat the same Privacy & Security flow the first time you try to launch the app.

Alternative — build from source

If you'd rather skip all of this, clone the repo and build locally. Local builds aren't quarantined:

git clone https://github.com/moerdowo/Readpaw.git
cd Readpaw
./scripts/build-app.sh
open build/Readpaw.app

Highlights of 0.1.0

  • Native macOS reader for EPUB, MOBI / AZW / AZW3, PDF, CBR, CBZ, plus 7z / ZIP / RAR image archives, FB2, TXT, HTML
  • Library with cover thumbnails, search, sort, and resizable cards
  • Reader window opens at the page's aspect ratio; per-book zoom / direction / text-size persistence
  • Image reader (NSScrollView) with pinch-to-zoom remembered per book
  • Vertical / webtoon mode with smooth real-visibility page tracking
  • Ebook reader (WKWebView) with full text-color override, comfortable reading margins, and a dark/light toggle that wins over publisher styles
  • Right-to-left support: slider, fill direction, and endpoint labels all flip together
  • Unreadable files are silently skipped during library scan (no broken cards)
  • Onboarding with an interactive rotating USDZ 3D model (CC BY Tamminen)

System requirements

  • macOS 15.0 (Sequoia) or later
  • Apple Silicon (arm64)