Skip to content

YakBarber/remarkable_file_format

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

reMarkable File Format

This repository provides a reverse-engineered file format spec for the reMarkable tablet's proprietary file format.

If you are not interested in developing your own parser or writer for the reMarkable file format, you probably should instead look at rmconvert, my sister project aimed at building bi-directional conversion tooling for this file format. If you're looking to build tools yourself, read on.

Note: This file represents the current version of the reMarkable file format used on tablets with up-to-date firmware. If you are on an older (pre 3.0) version, you should instead look at the work done by others on the older formats.

Explanation

The format spec in this repository is a single Kaitai Struct YAML-style file (rmv6.ksy). This file is a functional, nearly-complete specification of the reMarkable tablet's "v6" .rm (formerly .lines) file format, which was introduced with firmware version 3.0 at the end of 2022. The specification was reverse-engineered by me, Barry Van_Tassell, during my 6-week batch at the Recurse Center in the summer of 2023. I have done my best to follow Kaitai style norms, to include documentation, and to be clear about what is known, unknown, complete, and incomplete.

You'll first will want to check out the Kaitai Struct documentation and tooling, which will explain what stuff means and allow you to translate the spec into parsing code in a number of different languages.

Finally, it's worth pointing out that currently the specification only describes the format of the .rm files used to store all the vector details of your drawings and scribbles. ReMarkable also includes several text files with these .rm files, which are necessary but not described here. Since they're text-based though, you can open them up and read them yourself. The unofficial reMarkable wiki (now archived) also had an article describing their structure.

Getting to the files

Your reMarkable tablet, believe it or not, is actually just a Linux computer. ReMarkable's creators have been kind enough to give us root-level access to the tablet's internals. You can read more about this on the unofficial wiki and the official reMarkable support page, but the TL;DR is:

  • You can access your tablet via ssh. First connect your tablet to either your computer via USB or your local home network. Then in your tablet settings, tap on "Help," then "Copyrights and licenses." There you will find your tablet's local IP address and the root password. If the IP address is 10.10.11.11, you'd log in like: ssh [email protected] and then enter the root password when prompted.
  • Files are stored in a flat structure in /home/root/.local/share/remarkable/xochitl.
  • Each notebook is stored as a collection of files and directories with the same UUID. Within the UUID-named directory, there will be a single .rm file for each page of the notebook, named with a different UUID. These .rm files are the subject of this repository.

Covering my butt

  1. Neither myself nor this work are associated with reMarkable in any way. I'm just some guy with a tablet who likes having control over his files.
  2. This work is released under the MIT License, which means you can essentially do whatever you want with it as long as you acknowledge my contribution and agree that it's not my fault if anything goes wrong.
  3. I am making no guarantees of the accuracy or fitness of this work. Mucking around with the internals of your tablet and its files comes with risks, and it is your responsibilty to manage those risks for yourself.
  4. If you find a bug or inaccuracy, please submit an issue to this repository, or even better, fork the repository and submit a pull request with a fix.

Shoulders I am standing on

These links are to previous work I have referenced and taken inspiration from. For the most part, they target obsolete versions of the reMarkable file format.

remarkable-layers, a Python library for bi-directional conversion of v5 binary files. Abandoned/archived in 2021

original format documentation (2017-2019)

Kaitai struct for parsing .rm v3 and v5 files (2020)

rM2svg (2019)

lines-are-rusty, a Rust-based parser based on 2019 documentation

filesystem layout and format of the non-binary metadata files (wiki, archived :( )

About

File format spec for the reMarkable tablet

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published