xournalpp
Xournal++ is a handwriting notetaking software with PDF annotation support. Written in C++ with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Windows 10. Supports pen input from devices such as Wacom Tablets.
Top Related Projects
Quick Overview
Xournal++ is an open-source note-taking software that supports handwriting and PDF annotation. It's designed as a more feature-rich alternative to the original Xournal, offering a modern interface and enhanced functionality for digital note-taking, sketching, and document markup.
Pros
- Cross-platform compatibility (Linux, Windows, macOS)
- Extensive drawing and annotation tools
- Support for pressure-sensitive input devices
- PDF annotation and export capabilities
Cons
- Steeper learning curve compared to simpler note-taking apps
- Limited cloud synchronization options
- Some users report occasional stability issues
- Resource-intensive for older hardware
Getting Started
To get started with Xournal++:
- Download the appropriate version for your operating system from the official releases page.
- Install the application following the instructions for your OS.
- Launch Xournal++ and create a new document or open an existing PDF for annotation.
- Explore the toolbar to familiarize yourself with the various drawing and annotation tools.
- For detailed usage instructions, refer to the user manual.
Note: Xournal++ is not a code library, so code examples are not applicable.
Competitor Comparisons
simple terminal UI for git commands
Pros of Lazygit
- Streamlined Git workflow with an intuitive terminal user interface
- Faster and more efficient Git operations compared to command-line usage
- Customizable keybindings and color schemes for personalized experience
Cons of Lazygit
- Limited to Git-specific functionality, unlike Xournal++'s broader note-taking capabilities
- Requires terminal proficiency, which may be less user-friendly for some compared to Xournal++'s GUI
- Lacks drawing and handwriting features present in Xournal++
Code Comparison
Lazygit (Go):
func (gui *Gui) handleCommitConfirm(g *gocui.Gui, v *gocui.View) error {
message := gui.trimmedContent(v)
if message == "" {
return gui.createErrorPanel(gui.Tr.EmptyCommitMessage)
}
return gui.handleCommitSubmit(message)
}
Xournal++ (C++):
void Control::saveAs() {
Path filename;
if (chooseSavePath(filename)) {
save(filename);
}
}
ksnip the cross-platform screenshot and annotation tool
Pros of ksnip
- Focused on screenshot capture and annotation
- Lightweight and fast
- Cross-platform support (Windows, macOS, Linux)
Cons of ksnip
- Limited drawing and note-taking capabilities
- Fewer advanced features for document editing
- Smaller community and less frequent updates
Code Comparison
ksnip (C++):
void KsnipConfig::setCaptureCursor(bool captureCursor)
{
mConfig.setValue(QStringLiteral("captureCursor"), captureCursor);
mCaptureCursor = captureCursor;
}
Xournal++ (C++):
void Control::setToolSize(ToolSize size)
{
EditSelection* sel = nullptr;
if (this->win)
{
sel = this->win->getXournal()->getSelection();
}
this->toolHandler->setSize(size);
if (sel)
{
sel->setSize(size);
}
}
Summary
ksnip is a lightweight, cross-platform screenshot tool with basic annotation features, while Xournal++ is a more comprehensive note-taking and PDF annotation application. ksnip excels in quick screen captures and simple edits, whereas Xournal++ offers advanced drawing tools and document editing capabilities. The code comparison shows ksnip's focus on configuration settings for screenshot capture, while Xournal++ demonstrates more complex tool handling for document editing.
📝A simple and elegant markdown editor, available for Linux, macOS and Windows.
Pros of MarkText
- Focused on Markdown editing with a clean, distraction-free interface
- Real-time preview of Markdown formatting
- Supports various export formats, including PDF and HTML
Cons of MarkText
- Limited drawing and handwriting capabilities
- Less suitable for complex note-taking with diagrams or mathematical equations
- Fewer annotation tools compared to Xournal++
Code Comparison
MarkText (JavaScript):
export const isMarkdownFile = filename => {
const markdownExtensions = ['.md', '.markdown', '.mdown', '.mkd', '.mkdn', '.mdwn', '.mdtxt', '.mdtext', '.text', '.txt']
return markdownExtensions.some(ext => filename.endsWith(ext))
}
Xournal++ (C++):
bool XojMsgBox::showQuestionYesNo(GtkWindow* win, const string& title, const string& question, bool defIsYes) {
GtkWidget* dialog = gtk_message_dialog_new(win, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s", question.c_str());
gtk_window_set_title(GTK_WINDOW(dialog), title.c_str());
gtk_dialog_set_default_response(GTK_DIALOG(dialog), defIsYes ? GTK_RESPONSE_YES : GTK_RESPONSE_NO);
int res = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
return res == GTK_RESPONSE_YES;
}
The code snippets highlight the different focus areas of the two projects: MarkText emphasizes Markdown file handling, while Xournal++ deals with GUI interactions and dialog boxes.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Xournal++

Translations
Would you like to see Xournal++ in your own language? Translators are welcome to contribute to Xournal++.
You can contribute translations to the following locations:
- Crowdin
- Submit a pull request on GitHub to change:
Interested in translating a new language? Discuss on Gitter or create a new issue to unlock the language on Crowdin.
Thanks in advance!
Features
Xournal++ (/ËzÉnlÌËplÊsËplÊs/) is a hand note-taking software written in C++ with the target of flexibility, functionality and speed. Stroke recognizer and other parts are based on Xournal Code, which you can find at SourceForge.
Xournal++ features:
- Supports pressure-sensitive styluses and digital pen tables (e.g. Wacom, Huion, XP Pen, etc. tablets)
- Paper backgrounds for note-taking, scratch paper, or whiteboarding
- Annotate on top of PDFs
- Select text from the background PDF, copy, highlight or underline it or strike it through
- Follow links from the background PDF
- Export to a variety of formats including SVG, PNG and PDF, both from the GUI and command line
- Different drawing tools (e.g. pen, highlighter) and stroke styles (e.g. solid, dotted)
- Shape drawing (line, arrow, circle, rectangle, spline)
- Use the set-square and compass tools for measurements or as a guide for drawing straight lines, circular arcs and radii
- Fill shape functionality
- Shape resizing and rotation
- Rotation and grid snapping for precise alignment of objects
- Input stabilization for smoother writing/drawing
- Text tool for adding text in different fonts, colors, and sizes
- Enhanced support for image insertion
- Eraser with multiple configurations
- LaTeX support (requires a working LaTeX installation) with customizable template and a resizable editor with syntax highlighting
- Sidebar containing page previews with advanced page sorting, PDF bookmarks and layers (can be individually hidden/edited)
- Allows mapping different tools/colors etc. to stylus/mouse buttons
- Customizable toolbar with multiple configurations, e.g. to optimize toolbar for portrait/landscape
- Custom color palette support using the .gpl format
- Page template definitions
- Bug reporting, auto-save, and auto backup tools
- Audio recording and playback alongside with handwritten notes
- Multi language support (over 20 languages supported)
- Plugins using Lua scripting
Mobile & web app
From mid 2020 to May 2021, a Flutter-written mobile app for Android, Chrome OS and iOS (unreleased) and the web has been developed, which supports the file format and most of the basic features of Xournal++. Unfortunately development has stalled and we have lost contact to the (single) developer. The web app is no longer available. You can still check out the separate repository on GitLab or Get it on Google Play
GNU/Linux![]() |
Windows 10![]() |
macOS Catalina![]() |
Xournal++ Mobile on Chromium OS![]() |
Toolbar / Page Background / LayerMultiple page background, easy selectable on the toolbar
|
Layer sidebar and advanced layer selection![]() |
Multiple predefined and fully customizable toolbars![]() |
User Manual and FAQ
For general usage, consult the User Manual. Answers to some common questions can be found in the FAQ.
Experimental Features
Sometimes a feature is added that might not be rock solid, or the developers aren't sure if it is useful. Try these out and give us some feedback.
Here are a few under development that you can play with now:
-
Assign a mouse button or stylus button to bring up a toolbox of toolbars right under the cursor. You can also modify what is in the toolbox through the usual View â Toolbars â Customize although it won't appear unless you've assigned a button in preferences: mouse or stylus (or selected a toolbar configuration that uses it).
-
This is an experimental feature because not everything you can put in the toolbox behaves. So be aware.
-
-
Keep your eyes out for other experimental features in preferences as seen here:
DrawingTools: When drawing a box, circle etc, simulate ctrl or shift modifiers by the initial direction you move the mouse.
Action on Tool Tap: Allow a brief tap on the screen to bring up the floating toolbox and/or select an object. May work with pen and highlighter only.
Installing
The official releases of Xournal++ can be found on the Releases page. We provide binaries for Debian (Buster), Ubuntu (16.04), MacOS (10.15 and newer), and Windows. For other GNU/Linux distributions (or older/newer ones), we also provide an AppImage that is binary compatible with any distribution released around or after Ubuntu 16.04. For installing Xournal++ Mobile on handheld devices, please check out Xournal++ Mobile's instructions
A note for Ubuntu/Debian users: The official binaries that we provide are
only compatible with the specific version of Debian or Ubuntu indicated by the
file name. For example, if you are on Ubuntu 20.04, the binary whose name
contains Ubuntu-bionic
is only compatible with Ubuntu 18.04. If your system
is not one of the specific Debian or Ubuntu versions that are supported by the
official binaries, we recommend you use either the PPA (Ubuntu only), the Flatpak, or the
AppImage.
There is also an unstable, automated nightly release that includes the very latest features and bug fixes.
With the help of the community, Xournal++ is also available on official repositories of some popular GNU/Linux distros and platforms.
Debian
On Debian bookworm and Debian sid the xournalpp
package (stable version) is contained in the official repositories. Simply install via
sudo apt install xournalpp
There are also the official Stable releases and unstable automated nightly releases.
Ubuntu and derivatives
On distros based on Ubuntu 22.04 Jammy Jellyfish (and later) the xournalpp
package (stable version) is contained in the official repositories.
Simply install via
sudo apt install xournalpp
Stable PPA
The latest stable version is available via the following unofficial PPA:
sudo add-apt-repository ppa:apandada1/xournalpp-stable
sudo apt update
sudo apt install xournalpp
Unstable PPA
An unstable, nightly release is available for Ubuntu-based distributions via the following PPA:
sudo add-apt-repository ppa:andreasbutti/xournalpp-master
sudo apt update
sudo apt install xournalpp
This PPA is provided by the Xournal++ team. While it has the latest features and bug fixes, it has also not been tested thoroughly and may break periodically (we try our best not to break things, though).
Fedora
The released version of xournalpp is available in the main repository via Software application or the following command:
sudo dnf install xournalpp
or
pkcon install xournalpp
The bleeding edge packages synced to xournalpp git master on a daily basis are available from COPR luya/xournalpp.
openSUSE
On openSUSE Tumbleweed, the released version of Xournal++ is available from the main repository:
sudo zypper in xournalpp
For openSUSE Leap 15.0 and earlier, use the install link from X11:Utilities.
For all versions of openSUSE, bleeding edge packages synced to xournalpp git master on a weekly basis are available from home:badshah400:Staging.
Arch Linux
The latest stable release is available in the [extra] repository.
To build the latest state of the master branch yourself, use this AUR package.
Solus
The latest stable release is available in the main repository:
sudo eopkg it xournalpp
Flatpak
The Xournal++ team officially supports a FlatHub release, which can be installed with
flatpak install flathub com.github.xournalpp.xournalpp
Note that for Xournal++ to work properly, you must have at least one GTK theme and one icon theme installed on Flatpak. To enable LaTeX support, you will also need to install the TeX Live extension:
flatpak install flathub org.freedesktop.Sdk.Extension.texlive
The Flatpak manifest can be found at the Xournal++ Flatpak packaging repository, and all Flatpak-related packaging issues should be reported there.
Android and Chrome OS
Android is supported by Xournal++ Mobile. It can be downloaded either on the Tags page or from Google Play.
iOS
Unfortunately, the iOS app is not published yet in the Apple App Store. See here to learn, why. Anyway, in the Building section you can learn how to build an early preview.
Windows
Official Windows releases are provided on the Releases page.
Mac OS X
Mac OS X releases are provided on the Releases page.
Notes:
- There have been compatibility problems with Mac OS X Catalina regarding both file permissions and stylus support (#1772 and #1757). Unfortunately, we don't have the resources to adequately support Catalina at this time. Help would be appreciated!
- Xournal++ will be delivered with a patched GTK. Else, pressure sensitivity will not work on Mac #569.
Building
File format
The file extension .xopp
is a gzipped XML file. PDFs are not embedded into the file, so if the PDF is deleted, the background is lost. .xopp
is basically the same file format as .xoj
, which is used by Xournal. Therefore, Xournal++ is able to read .xoj
files, and can also export to .xoj
. As soon as notes are exported to a .xoj
file, all Xournal++ specific extensions like additional background types, are lost.
.xopp
files can theoretically be read by Xournal, as long as you do not use any new features. Xournal does not open files that contain new attributes or unknown values, so Xournal++ will add the extension .xopp
to all saved files to indicate the potential presence of Xournal++-only features.
All new files will be saved as .xopp
. If an .xoj
file that was created by Xournal is opened, the Save-As dialog will be displayed on save. If the .xoj
file was created by Xournal++, the file will be overwritten on save and the file extension will not change.
We are currently introducing a new file format that can efficiently store attached PDF files and other attachments internally. We will still allow for attachments that are linked to external files. Please refer to #937 for further details.
Building
We support building on three operating systems:
Contributing
See CONTRIBUTING.md
Top Related Projects
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot