A simple drawing application to create handwritten notes.
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.
Disclaimer
This is my first Rust and GTK project and I am learning as I go along. Expect some bugs and crashes. Also, the file format is still unstable and will change between versions!
Rnote is available as a flatpak on Flathub:
Because the file format still is unstable, downgrading to a specific version might be necessary and can be done with:
version | command |
---|---|
v0.2.5 | sudo flatpak update --commit=2036a51c8118a30eb4ceb2e16ba2f84fa8ca4dc814fb88d9424709380093a6c6 com.github.flxzt.rnote |
v0.1.6 | sudo flatpak update --commit=ffb9781989704f3eb28910437bb26709357566a977178d5fb4ef1a2926edae8b com.github.flxzt.rnote |
After downgrading, the version can be pinned or unpinned with:
$ flatpak mask com.github.flxzt.rnote
$ flatpak mask --remove com.github.flxzt.rnote
Then the sheets can be exported as an SVG or PDF and can be re-imported into the newest version of Rnote.
- Drag & Drop: Make sure Rnote has permissions to the locations you are dragging files from. Can be granted in Flatseal (a Flatpak permissions manager)
- odd location for current file: when the directory displayed in the header title is something like
/run/user/1000/../
, rnote does not have permissions to access the directory. Again, granting them in Flatseal fixes this issue.
The .rnote
file format is a gzipped json file. It is (de)compressed with the flate2
crate and (de)serialized with the Serde
crate.
So far breaking changes in the format happened in versions:
v0.2.0
v0.3.0
To be able to open and export older files that are incompatible with the newest version, look under Installation /Downgrading to install older versions of Rnote.
- switch geometry to nalgebra wherever possible. It can operate on f64 and has much more features than graphene.
- printing & PDF export
- PDF import ( as vector & bitmap )
- vector & bitmap picture import
- implement bezier curve stroke with variable stroke width (see Quadratic bezier offsetting with selective subdivision, Precise offsetting of bezier curves)
- Textured brush strokes with tweakable parameters
- Stroke elements drag tool: drag along parts of the selected strokes based on the proximity of a round pen tool
- strokes rotation
- parallelizing rendering and actions which affect many strokes.
- asychronous rendering
- (partial) Xournal++ .xopp file import and export
- (implemented: lines, rectangles, ellipses) drawing rough shapes by porting rough.js to Rust
- cancellable rendering
- export as bitmap picture
- text fields (Plain, Markdown)
- optional stroke smoothing
- Stroke Layers
- History list
- with the ability to move them up and down the history
- Stroke trash restorer
- with a preview of the deleted strokes
- Stylus buttons configuration to map them to different actions and / or pen types
- Locked strokes: mode to toggle the mutability of strokes
- Multiple sheet tabs
- Share and synchronize sheets with others ( via e.g. the peer-2-peer protocol libp2p ).
If you have drawn something cool in Rnote and want to share it, submit a PR so it can be showcased here. :)
Build instructions and guidelines how to contribute are outlined in CONTRIBUTING.md