A macOS menu bar app for uploading PDFs to your reMarkable tablet and downloading
documents/notebooks back as PDF, including single-page exports, via the
reMarkable cloud. Handwritten annotations you made on top of an uploaded PDF are
included in the exported PDF. (Swift package / target name: tinyreMarkable; the
shipped app is named Tiny reMarkable.)
-
AppKit
NSStatusItem+ nativeNSMenumenu bar app. macOS 13+ (Apple Silicon & Intel). -
Talks to the reMarkable cloud through
ddvk/rmapi. The binary isn't bundled — on the first cloud action the app downloads the matching release for your Mac's architecture from ddvk/rmapi's GitHub releases and caches it in~/Library/Application Support/tinyreMarkable/bin/. This means rmapi updates are picked up automatically, without a new app release. -
Auth: on launch it reuses the
devicetokenfrom the official reMarkable Mac app (~/Library/Containers/com.remarkable.desktop/.../com.remarkable.desktop.plist), writing it to~/Library/Application Support/rmapi/rmapi.conf. If the desktop app isn't installed, the menu shows Sign in to reMarkable…, which opens my.remarkable.com and pairs with an 8-character one-time code. -
Download:
rmapi getfetches the archive, then the export depends on what the document is:- a plain uploaded PDF (no handwriting) is exported as-is — lossless and fast;
- an uploaded PDF you wrote on has its ink rendered locally (
rmc: rm v6 → SVG, then SVG → PDF via headlessWKWebView) and composited onto each source page, sized and positioned to match what you saw on the tablet (portrait and landscape); - a pure handwritten notebook is rendered the same way, page by page.
Page rendering runs in parallel, and single-page exports only render the page you ask for.
Grab the latest .dmg from Releases,
open it, and drag Tiny reMarkable to Applications.
The app is only ad-hoc signed (no paid Apple Developer ID), so Gatekeeper will warn on first launch. Right-click the app → Open, then confirm (or System Settings → Privacy & Security → Open Anyway). If macOS instead claims the app is "damaged and can't be opened", clear the download-quarantine flag once:
xattr -dr com.apple.quarantine "/Applications/Tiny reMarkable.app"
then open it normally.
swift run
Look for the reMarkable logo in the menu bar and click it.
- Upload PDF to …, pick a PDF; it's uploaded to that folder.
- Per document: Save as PDF (all pages), or export the first / last / second-to-last page, or Other ▸ to pick any single page.
- While an operation is running, a busy bar shows in the menu bar and the menu offers Cancel.
Package.swift
Sources/tinyreMarkable/
main.swift NSApp bootstrap
AppDelegate.swift status item, NSMenu, busy indicator, all actions
RMClient.swift rmapi process wrapper, auth + OTC pairing, error mapping
RMArchive.swift parses the unzipped rmapi archive (pages, embedded PDF, orientation)
NotebookRenderer.swift rmc venv setup + .rm → SVG → PDF pipeline (parallel); annotation compositing
PDFSlicer.swift PDFKit page extraction
Models.swift RMItem
(rmapi is downloaded at runtime, so there's no bundled Resources/.)
- Works on both Apple Silicon and Intel: the right rmapi build is fetched per-arch
at runtime, so no
lipo/universal binary is needed. (The app itself is built arm64 bypackage.sh; build for Intel separately if you need an Intel.app.) - First cloud action needs an internet connection to download rmapi (one-time, cached).
- No code signing/notarization, so users must right-click → Open on first launch.
- Handwriting rendering (annotated PDFs and pure notebooks) needs Python 3.10+
(the
rmcvenv is auto-installed once, on the first export that contains ink).
packaging/package.sh [version] builds the release binary, assembles
Tiny reMarkable.app (with the generated AppIcon.icns), and produces a styled
DMG installer under the SwiftPM release bin path. packaging/make_icon.swift
regenerates the icon (reMarkable logo on #f9f6f1).