How to install .NET Core on your Remarkable 2 e-Ink tablet with Remarkable.NET
I blogged about The quiet rise of E Ink Tablets and Infinite Paper Note Takers - reMarkable 2 vs Onyx Boox Note Air and my love for the Remarkable 2 e-Ink tablet.
Now I see that Colby Newman is working on a .NET API for the Remarkable series of tablets. As you know, Dear Reader, I will install .NET on anything and everything so this is right up my alley. The NuGet Package is Remarkable.NET and the GitHub is at https://github.com/parzivail/ReMarkable.NET
.NET Core is open source and cross platform and Remarkable.NET is build on .NET Core 3.1 which has binaries for ARM32 which sets us up nicely for use on the Remarkable tablet.
I can download the build here https://dotnet.microsoft.com/download/dotnet/3.1
On my Remarkable I can go to Settings | Help | Copyright and Licenses to see my IP address and SSH root password.
Now I can scp and ssh firstname.lastname@example.org and enter the password. Note that ssh and OpenSSH is built into Windows 10 so you don't need to install putty or WinSCP but feel free if it makes you happy. Just a reminder though that Windows has OpenSSH or you can use WSL on Windows 10.
After downloading .NET Core 3.1 to my local machine I use scp to copy to /home/root then I ssh into the Remarkable Tablet. Of course, your IP will be different.
scp .\dotnet-sdk-3.1.411-linux-arm.tar.gz email@example.com:/home/root
Now, per their docs, from my ssh session on the Remarkable, I unzip dotnet and mark it as executable.
tar xzf dotnet-sdk-3.1.411-linux-arm.tar.gz -C ./dotnet
chmod +x ./dotnet/dotnet
Fantastic. This is an amazing project. There's even an emulator that uses OpenTK to draw, so I can test locally.
The docs sample code is very idiomatic .NET. Nice stuff. For example:
// Create an image
var img = new Image<Rgb24>(300, 300);
// Do some image processing
img.Mutate(ctx => ctx.DrawLines(Color.Black, 3, new PointF(50, 50), new PointF(250, 250)));
// Draw the image to the screen
OutputDevices.Display.Draw(img, img.Bounds(), Point.Empty);
// Exit when home button is pressed
InputDevices.PhysicalButtons.Pressed += (sender, button) =>
if (button == PhysicalButton.Home)
This is very easy to read.
If your are ssh'ed into your Remarkable 2, you can start|stop the main Remarkable interface with
systemctl start|stop xochitl
You may want to do this when running apps ssh'ed in. There's also a community repository of free software for the Remarkable called Toltec. It's like homebrew or winget or apt get for Remarkable. And the dotnet runtime is already in the Toltec listing, which is cool.
I'm still exploring but I'm enjoying the ride! (as always, no warranty express or implied!)
NOTE: If you mess up your remarkable messing around with Toltec or think you Bricked it (again, don't complain to me, please) you can connect it with USB and
ssh firstname.lastname@example.org and once you are there, there is a great thread here on how to uninstall Toltec.
Have fun, be safe.
Sponsor: Pluralsight helps teams build better tech skills through expert-led, hands-on practice and clear development paths. For a limited time, get 50% off your first month and start building stronger skills.