reCalibre-Driver
July 27, 2026 · View on GitHub
Sync books from Calibre to a reMarkable tablet over SSH/Wi-Fi/USB. Calibre sees the reMarkable as a regular connected device — send books to it, see what's on it, delete from it. Books can be delivered either as plain files for KOReader (the default) or into the native reMarkable home screen via remarkable-fs.
This is a maintained fork of naclander/Calibre-Remarkable-Device-Driver-Plugin — that original project is archived and no longer maintained (explicitly archived on GitHub in April 2023, with several open, unresolved issues — including reports of the plugin failing to load on Windows and Apple Silicon Macs, and SSH authentication breaking against newer OpenSSH versions). All credit for the original design and implementation goes to Nathan Aclander; this fork exists to keep the plugin working, fix those issues, and add KOReader support on top. Licensed GPL-3.0, same as the original.
Upgrading from the original plugin? This fork uses a new plugin identity, so Calibre treats it as a fresh install — uninstall the old plugin and enter your settings again here (see CHANGELOG.md for everything that changed).
Step 1 — Enable SSH on the reMarkable
The plugin talks to the tablet over SSH, which requires Developer Mode on current firmware:
- On the tablet: Settings → General → your tablet → Software → Advanced → Developer Mode and enable it (the tablet reboots).
- Find your SSH password under Settings → General → Help → About → Copyrights and Licenses — scroll to GPLv3 Compliance. The password is randomly generated per device.
- Note the IP address shown in the same place. Connected over USB cable it's
always
10.11.99.1; over Wi-Fi it's whatever your network assigned (a DHCP reservation in your router keeps it stable).
Step 2 — Install the plugin
-
Download the zip matching the OS Calibre runs on (not your reMarkable's OS — the zips are platform-specific because they bundle compiled SSH/keyring libraries, so a zip built for one OS won't load on another):
These links always fetch the latest release. To pick a specific version instead, browse all releases.
-
In Calibre: Preferences → Plugins → Load plugin from file, pick the zip.
-
Restart Calibre.
Step 3 — Configure
In Preferences → Plugins, find reCalibre-Driver under "Device interface plugins", double-click it (or select it and press Customize plugin):
| Setting | What it does | Default |
|---|---|---|
| Remarkable IP | The tablet's IP address from Step 1 | 10.11.99.1 |
| Send books to | Where sent books land — see the next section | KOReader folder |
| KOReader Folder | Device directory books are copied to in KOReader mode | /home/root/books |
| Organize into folders by series (or first tag) | Files each book under a subfolder named after its Calibre series, falling back to its first tag if it has no series | Off |
| Books Path | Virtual folder books appear under in native mode | / |
| Config Path | Where the plugin's tracking file (.calibre.json) lives on the device | /home/root/ |
| Password | The SSH password from Step 1 — stored in your OS keyring (Windows Credential Manager / macOS Keychain / Linux Secret Service), never in plaintext | (empty) |
Click Test Connection — you should see "Successfully connected". If not, the error message will say whether the tablet was unreachable (wrong IP / different network) or refused the password (wrong password / Developer Mode off). Then save and restart Calibre.
Choosing where books are saved on the device
The Send books to dropdown picks between two destinations:
KOReader folder (default)
Books are copied as ordinary .epub/.pdf files, named after their title
(e.g. The Left Hand of Darkness.epub), into the directory set in
KOReader Folder. The folder is created automatically on first connect if
it doesn't exist.
- To change where books go, edit KOReader Folder to any absolute path
on the tablet, e.g.
/home/root/books/calibreor/home/root/library. Anything under/home/rootsurvives reboots and is included in reMarkable's own storage. - One-time KOReader setup: open KOReader's file browser, navigate to your books folder, then set it as home via ☰ → Settings gear → Home folder → Set current folder as home (wording varies slightly by KOReader version). After that, new books appear in KOReader's home screen as soon as they're sent.
- Books sent this way do not appear in the native reMarkable home screen — the native UI can't see plain files.
reMarkable native UI
Books are converted into the tablet's internal xochitl document format, so they show up on the standard reMarkable home screen like any notebook.
- To change where books go, edit Books Path. This is a virtual
folder path in the reMarkable UI, not a filesystem path:
/puts books at the top level,/Books/Calibrecreates (if needed) a Books folder containing a Calibre folder in the home screen and files books there. - Connecting in this mode is noticeably slower — the plugin has to scan the tablet's entire document store — and eject briefly restarts the tablet's UI so new books show up.
You can switch modes at any time; already-sent books stay where they were sent.
Usage
With the tablet reachable, start Calibre and a Device icon appears in the toolbar (give it a few seconds; native mode takes longer).
- Send a book: right-click it → Send to device → Send to main memory. EPUB, PDF, and CBZ (comics) are sent as-is. Any other format is auto-converted to EPUB first by Calibre's own "send to device" pipeline (its standard behavior for every device plugin, not specific to this one). CBR isn't supported — RAR extraction needs a dependency we've deliberately avoided (see the packaging notes in CHANGELOG.md).
- Comics (CBZ): in KOReader mode, sent as-is — KOReader reads CBZ natively. In native mode, automatically converted to PDF on send, since the stock reMarkable viewer can't render CBZ.
- See what's on the tablet: click the Device icon.
- Remove a book: in the Device view, right-click it → Remove books.
- Disconnect: click the eject icon next to the Device icon.
Sync reading progress and highlights (KOReader mode)
Pull KOReader's reading progress and highlights for your books back into Calibre, into custom columns you create yourself:
- Preferences → Add your own columns, and create one or both of:
- Lookup name
percent_read, type Floating point numbers — reading progress as a percentage. - Lookup name
highlights, type Long text — highlighted passages and notes, one per line.
- Lookup name
- Restart Calibre (required for new custom columns to take effect — this is normal Calibre behavior, not specific to this plugin).
- With the tablet connected, open Preferences → Plugins → reCalibre-Driver → Customize, and click Sync Reading Progress.
This only updates columns you've actually created — if neither exists, the
button tells you what to create instead of doing nothing silently. It reads
each book's .sdr sidecar file (KOReader's own per-book progress/highlights
storage) over SFTP; books you haven't opened in KOReader yet are skipped, not
treated as errors.
Troubleshooting
Run Calibre from a terminal with calibre-debug -g and watch the console.
Lines tagged [recalibre-driver] are the plugin's own logging.
- No Device icon: the tablet wasn't reachable at startup — check the IP in
settings (Wi-Fi addresses change; USB is always
10.11.99.1) and that the tablet is awake. Calibre re-detects periodically, so it can appear later. - Authentication errors: re-check the password from Step 1; it changes if Developer Mode is toggled off and on again.
- A few
FileNotFoundErrortracebacks during connect (native mode): items on the tablet whose content file is missing (e.g. some notebooks) are skipped; this is noisy but harmless.
Development
git clone https://github.com/zer0trip/reCalibre.git
cd reCalibre
python -m venv .venv && . .venv/Scripts/activate # or .venv/bin/activate on macOS/Linux
pip install -e ".[dev]"
pytest
To test against a real Calibre install, build a zip (this vendors paramiko,
remarkable-fs, and keyring for whichever OS you run it on) and install that
— not calibre-customize -b ./plugin directly. The bare source directory
doesn't include those vendored dependencies, and config.py imports keyring
at module load time, so a source-only install fails immediately on Calibre
startup with ModuleNotFoundError: keyring.
python scripts/build_plugin_zip.py --output dist/recalibre-driver.zip
calibre-customize -a dist/recalibre-driver.zip
calibre-debug -g
What changed from the original
See CHANGELOG.md.
Thanks
Calibre, remarkable-fs, KOReader, and Nathan Aclander for the original plugin this fork is built on.