A Calibre plugin for synchronizing e-books with reMarkable tablets (Paper Pro Move and other models) via the reMarkable desktop app.
- Send books from Calibre library to reMarkable tablet
- Export selected books as reMarkable-tuned PDFs to any folder (no device required)
- Automatic EPUB to PDF conversion with configurable font, size, line height, and margins
- Device-specific page sizes (reMarkable 2, Paper Pro, Paper Pro Move)
- Full-bleed cover pages (no margins, optimized for e-ink display)
- Select destination folder on reMarkable
- Sync reading positions back to Calibre (progress, page, last read)
- Document naming: "Series-Number Title - Author" for easy organization
Platform support: Developed and tested on macOS. The plugin uses Calibre's cross-platform APIs and has code paths for Windows and Linux, but those are currently untested — feedback welcome.
This plugin does not talk to the reMarkable cloud or to the tablet directly. It writes books into the local storage of the reMarkable desktop app, which then uploads them to your tablet on its next sync.
That means you need to:
- Have the reMarkable desktop app installed and logged in to your reMarkable account.
- Quit and restart the reMarkable desktop app after sending books. The app only picks up new documents at startup; without a restart, nothing reaches the tablet.
- Calibre 5.0.0 or later
- reMarkable desktop app installed and logged in (required — see above)
- Python 3 (bundled with Calibre)
The plugin uses multiple fallback methods for PDF page detection. Install any of these for better reliability:
poppler-utils(providespdfinfo) - recommendedPyPDF2Python librarypikepdfPython libraryqpdfcommand-line tool
-
Go to the latest release and download the
remarkable_sync-X.Y.Z.zipasset under Assets.⚠️ Do not download "Source code (zip)" or "Source code (tar.gz)". Those are auto-generated by GitHub, wrap everything inside a top-level folder, and Calibre will refuse to load them. -
In Calibre, go to Preferences → Plugins → Load plugin from file and select the downloaded zip.
-
Restart Calibre. The plugin appears as reMarkable Sync in the toolbar and under Tools.
-
Open Tools → reMarkable Sync → Settings… to configure your default folder, device type, conversion preferences, and (optionally) custom columns for reading-position sync.
Curious what the conversion looks like before installing? See
examples/the-time-machine.pdf — The
Time Machine by H. G. Wells, sourced from
Standard Ebooks
and converted with the plugin's default settings for the reMarkable
Paper Pro Move (full-bleed cover, configured typography and margins).
remarkable-sync/
├── __init__.py # Plugin entry point (InterfaceActionBase)
├── ui.py # Menu actions and user interface
├── main.py # Book path utilities
├── worker.py # Conversion and sending logic (runs in background)
├── remarkable.py # reMarkable file format handling
├── config.py # Settings UI and preferences
├── images/ # Plugin icons
└── Makefile # Development commands
# Using Makefile (macOS)
make install # Install plugin
make run # Launch Calibre
make dev # Install + run
# Or directly with calibre-customize
calibre-customize -b .After installation, restart Calibre to load the plugin.
# macOS
/Applications/calibre.app/Contents/MacOS/calibre --debug
# Windows/Linux
calibre --debugDebug output appears in the terminal, useful for troubleshooting plugin issues.
- Make changes to plugin source files
- Run
calibre-customize -b .to reinstall - Restart Calibre (or use the debug console to reload)
- Test via Tools → reMarkable Sync → Send to reMarkable
Preferences → Plugins → User interface action → reMarkable Sync → Customize plugin
Available settings:
- Upload Settings
- Default folder on reMarkable (with pinned folders marked 📌)
- Device type (reMarkable 2, Paper Pro, Paper Pro Move) — controls the PDF page size
- PDF Conversion Settings
- Auto-convert EPUB to PDF
- Font family (any installed system font, or system default)
- Base font size (px) — picked from a curated list (9–32 px)
- Line height (100–200 %)
- Page margins, in points: Left, Right, Top, Bottom (0–100 pt each)
- Sync Settings (optional, for syncing reading positions back to Calibre)
- Custom-column mappings: reMarkable UUID, Progress (%), Current page, Last read
- See Reading Position Sync below
The plugin can sync reading positions from reMarkable back to Calibre using custom columns. This allows you to track your reading progress across your library.
Go to Preferences → Add your own columns and create the following columns:
| Column | Type | Description | Required |
|---|---|---|---|
| reMarkable UUID | Text | Document ID for safe sync | ✅ Required |
| Progress (%) | Floating point numbers | Reading progress on 0-100 scale (e.g., 45.2 = 45.2%) | Optional |
| Current page | Integers | Current page number (1-indexed) | Optional |
| Last read | Date | Timestamp of last reading session | Optional |
How sync works:
- When you send a book to reMarkable, the plugin stores the document UUID in Calibre
- Only books with a UUID are synced (books sent from Calibre)
- Only documents in the configured reMarkable folder are considered
- If the existing "Last read" value is more recent than the reMarkable timestamp, no data will be overwritten
If you use the Reading Goal plugin, you can share columns:
| reMarkable Sync Column | Reading Goal Column |
|---|---|
| Progress (%) | Percent read |
| Last read | Status date |
Current page cannot be shared as Reading Goal doesn't use it.
- Configure custom columns in Settings (UUID column is required)
- Send books to reMarkable using Tools → reMarkable Sync → Send to reMarkable
- Read on your reMarkable device
- Click Tools → reMarkable Sync → Sync Reading Positions
Books sent to reMarkable are named using the format: Series-Number Title - Author
Examples:
Dune-1 Dune - Frank HerbertFoundation-3 Second Foundation - Isaac AsimovThe Martian - Andy Weir(no series)
This naming convention helps organize books on reMarkable and makes series sort correctly.
When sending EPUB files, the plugin converts them to PDF optimized for reMarkable:
- Page size: Matched to your device (reMarkable 2, Paper Pro, or Paper Pro Move)
- Typography: Configurable font family, size, and line height
- Margins: Configurable for comfortable reading
- Full-bleed cover: The cover image is extracted and added as the first page without margins, scaled to fit the page width and top-aligned. Any padding at the bottom uses the dominant color from the cover's edge for a seamless appearance.
A converted EPUB displayed on a reMarkable Paper Pro Move.
The plugin creates document files directly in the reMarkable desktop app's local storage:
| Platform | Path |
|---|---|
| macOS | ~/Library/Containers/com.remarkable.desktop/Data/Library/Application Support/remarkable/desktop/ |
| Windows | %LOCALAPPDATA%/remarkable/desktop/ |
| Linux | ~/.local/share/remarkable/desktop/ |
For each book, it creates:
{uuid}.pdf- The book content{uuid}.metadata- Document metadata (title, parent folder, timestamps){uuid}.content- Page structure and formatting info{uuid}.local- Local sync metadata{uuid}.pagedata- Page tracking data{uuid}/- Directory for annotations{uuid}.thumbnails/- Thumbnail images
After sending books, restart the reMarkable desktop app to trigger sync to the tablet.
Create a distributable ZIP file:
make dist
# Creates remarkable_sync-X.Y.Z.zipUsers can install via Preferences → Plugins → Load plugin from file.
The sync approach — using the reMarkable desktop app as a bridge, which only requires a free reMarkable Connect account (no paid subscription) — was inspired by the Remarcal team's work.
GPL v3

