Noureddine RAMDI / Rnote: Rust-powered vector drawing for handwritten notes with pressure sensitivity

Created Mon, 04 May 2026 10:15:02 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

flxzt/rnote

Rnote tackles a practical challenge many note-taking apps face: combining the flexibility of vector drawing with smooth, pressure-sensitive stylus input on desktop platforms. It’s built in Rust with GTK4, positioning itself as a lightweight, open-source alternative with a native feel. The app focuses on handwritten notes and sketching, supporting multiple document layouts including fixed pages, continuous scrolling, and an infinite canvas.

vector-based drawing optimized for stylus input

At its core, Rnote is a vector drawing application designed specifically for handwritten notes and sketches. The use of Rust ensures a performant backend, while GTK4 provides a modern, native UI framework tailored for Linux, macOS, and Windows. The app’s UI adapts to stylus input, featuring pressure sensitivity and configurable stroke styles which gives a natural pen-like experience.

Supporting various document expansion layouts, the app allows users to work with fixed pages, continuous vertical scrolling, or an infinite canvas that can grow as needed. This flexibility is important for different note-taking workflows — from structured page-based notes to freeform sketching.

Documents are saved in a custom .rnote format, which is gzipped JSON under the hood. This format is still unstable and evolving, which introduces challenges around backward compatibility. Rnote supports exporting notes to SVG, PDF, XOPP, PNG, and JPEG, covering common needs for sharing and printing.

A CLI tool is bundled with the app to support automation, which appeals to users who want to integrate Rnote into scripts or batch operations. Distribution is handled through Flatpak for Linux, app bundles for macOS, and Winget for Windows.

managing an unstable document format with version pinning and migration

One of the most interesting aspects under the hood is Rnote’s approach to its native .rnote file format. It’s gzipped JSON, which makes it human-readable when decompressed but also easy to compress for storage efficiency. However, the format is not stable and has breaking changes across versions v0.2.0 to v0.5.0.

This instability means that users sometimes need to downgrade the app to an earlier version to open older documents. The repo’s README explicitly documents how to do this via Flatpak by pinning to a specific commit hash. This is a practical workaround for a common problem in desktop apps that define their own native formats before stabilizing them.

The tradeoff is clear: evolving the file format allows the developers to iterate quickly and add features but at the cost of backward compatibility headaches. Rnote mitigates this with clear downgrade instructions and the ability to pin or unpin Flatpak versions.

The CLI tool also ties into this by enabling automation around document handling, likely supporting conversions and batch exports without relying on the GUI.

This approach is worth understanding if you’re building desktop applications that manage complex native document formats. The pinned Flatpak version and explicit commit downgrades are a neat example of managing unstable file formats in production.

installation and usage commands

Linux

Download the official flatpak on Flathub here.

MacOS

Thanks to dehesselle the app is available on MacOS as an app bundle.
Check out the repository, the latest release can be downloaded here.

Windows

Download the Windows installer from the latest release which can be found here.

Install using Winget:

winget install flxzt.rnote

Downgrading

Because the file format still is unstable, downgrading to a specific version might be necessary.

List all available past versions on flathub:

flatpak remote-info --log flathub com.github.flxzt.rnote

Pick the commit from the desired version and downgrade with:

sudo flatpak update --commit=<commit-hash> com.github.flxzt.rnote 

After downgrading, the flatpak version can be pinned or unpinned with:

$ flatpak mask com.github.flxzt.rnote
$ flatpak mask --remove com.github.flxzt.rnote

To update to the latest version again, unpin and run flatpak update.

verdict

Rnote is a solid option for anyone looking for a native, vector-based note-taking and sketching app with good stylus support. The Rust + GTK4 stack delivers performance and a modern UI, while the adaptive input features make it appealing for tablet and stylus users.

The main limitation is the unstable .rnote file format, which means workflows involving frequent upgrades or sharing documents between different app versions can be tricky. However, the explicit downgrade instructions and Flatpak version pinning mitigate this pain point fairly well.

If you want to experiment with an open-source, cross-platform vector note app that embraces the challenges of native document formats and stylus input, Rnote is worth a look. The bundled CLI adds automation potential, which is a nice bonus for power users.

This project is particularly relevant if you’re comfortable with Flatpak on Linux or want a native macOS or Windows experience without heavy dependencies. Expect to trade some stability in document compatibility for early access to evolving features and a clean Rust codebase.


→ GitHub Repo: flxzt/rnote ⭐ 11,187 · Rust