A simple note taking application written in Rust and GTK4.
Rnote aims to be a simple but functional note taking application for freehand drawing or annotating pictures or documents. It eventually should be able to import / export various media file formats.
One main consideration is that it is vector based, which should make it very flexible in editing and altering the contents.
This is my first Rust and GTK project and I am learning as I go along. It might blow up your computer. ;)
Rnote is available as a flatpak on Flathub:
- Stroke history list widget
- with the ability to move them up and down the history / layers
- Stroke trash restorer
- with a preview of the deleted strokes
- Stylus buttons configuration to map them to different actions or switch to different pens
- switch geometry to nalgebra wherever possible. It can operate on f64 and has much more features than graphene.
- template deduplication when loading in .rnote save files.
- printing / PDF export
- PDF import
- picture import
- export as bitmap picture
- implement bezier curve stroke with variable stroke width (see Quadratic bezier offsetting with selective subdivision, Precise offsetting of bezier curves)
- (implemented: lines, rectangles, ellipses) drawing rough shapes by porting rough.js to Rust (see
- make as much as possible parallel, especially rendering and actions which affect many strokes.
- implement text fields
If you have drawn something beautiful in Rnote and want to share it, let me know so I can include it as a screenshot. :)
Building with Flatpak
There is a flatpak manifest in
Use Gnome Builder or vscode with the flatpak extension to build and run the application for you. This is the easiest and recommended way.
Bugs and workarounds
- If you encounter
bwrap: Can't find source path /run/user/1000/doc/by-app/com.github.flxzt.rnote: No such file or directorywhen trying to run the flatpak,
xdg-document-portaldid not start yet. Starting it manually with
systemctl start --user xdg-document-portalshould fix it.
If you don't have an IDE or extension to handle building flatpaks, you can also do it manually:
First the Gnome 41 SDK is needed:
flatpak install org.gnome.Sdk//41 org.freedesktop.Sdk.Extension.rust-stable//21.08 org.gnome.Platform//41
Building the app with flatpak is done with:
flatpak-builder --user flatpak-app build-aux/com.github.flxzt.rnote.Devel.json
Creating a repo:
flatpak-builder --user --repo=flatpak-repo flatpak-app build-aux/com.github.flxzt.rnote.Devel.json
Install to the system as user with:
flatpak-builder --user --install flatpak-app build-aux/com.github.flxzt.rnote.Devel.json
Then it can be run. From the build directory:
flatpak-builder --run flatpak-app build-aux/com.github.flxzt.rnote.Devel.json rnote
Or if it is installed:
flatpak run com.github.flxzt.rnote
Build with Meson
The flatpak manifest calls the meson build system to build the application. If a native build is wanted, meson can be called directly.
cargo are installed. Then run:
meson setup --prefix=/usr _mesonbuild
Meson will ask for the user password when needed.
To enable the development profile, set
-Dprofile=devel as a parameter. Else the
default profile will be set. ( This can be reconfigured later )
Once the project is configured, it can be compiled with:
meson compile -C _mesonbuild
The compiled binary should now be here:
Installing the binary into the system can be done with:
meson install -C _mesonbuild
Meson has some tests to validate the desktop, gresources, ... files.
meson test -v -C _mesonbuild
This places the files in the specified prefix and their subpaths. The binary should now be in
/usr/bin (and therefore in PATH)
reconfiguring the meson build files can be done with:
meson configure -Dprofile=default _mesonbuild
For example if the profile needs to be changed.
If you don't like rnote, or decided that is not worth your precious disk space, you can always uninstall it with:
sudo ninja uninstall -C _mesonbuild