Xournal++ Mobile is a Flutter companion for opening, editing, and annotating Xournal++ .xopp notebooks on mobile devices and other platforms.
Status: beta. The app is usable in practice for working with notebooks, but compatibility and platform behavior are still being improved. Keep backups of important documents.
This repository is a revived and modernized fork of the original Xournal++ Mobile by TheOneWithTheBraid, later mirrored by xournalpp/xournalpp_mobile. This fork builds on the original application's document support and editor, with significant changes to its code and design as well as an updated Flutter toolchain.
- Open, create, edit, and save
.xoppnotebooks, including pages, layers, strokes, highlights, images, text, and LaTeX content. - Draw with pen and highlighter tools, erase, select and move content, and undo edits. Shape tools include lines, circles, ellipses, squares, and rectangles.
- Use touch, mouse, or stylus input, with optional stylus pressure sensitivity where available. Navigate documents with continuous scrolling, zoom, and a page browser.
- Import PDFs as notebook backgrounds, annotate them, and export notebooks to PDF. Missing background PDFs can be located again when opening a notebook.
- Open recent documents, remember the current page, and recover unsaved work from a recovery draft.
- Open documents through platform file and sharing integrations, including Android document providers and open intents.
Available integrations and behavior vary by platform. The app is a companion to the desktop application, and not every Xournal++ feature or document is supported identically.
Android, iOS, and web are the main targets. The repository also contains Linux, macOS, and Windows Flutter runners; support and testing vary across platforms.
See the GitHub releases for available builds. The release workflow builds Android APK and AAB packages and Linux, Debian, Windows, and macOS artifacts; Android Play publishing is configured for internal testing. Artifact availability depends on the release build.
Install a current stable Flutter SDK and the dependencies for your target platform. The project requires Dart >=3.10.0 <4.0.0; use flutter doctor to check your setup.
git clone https://github.com/robol/xournalpp_mobile.git
cd xournalpp_mobile
flutter pub get
flutter runTo run in Chrome or build an Android APK:
flutter run -d chrome
flutter build apkAndroid builds require the Android SDK and a compatible JDK. Other targets require their platform-specific Flutter build dependencies.
On Android, iOS, and desktop, new notebooks default to Internal storage in the app's private data. Saving there needs no file picker. Use Save As and choose Local storage to save a file in shared phone storage, on an SD card, or elsewhere through the system picker. Existing Local storage notebooks stay in their original locations. Internal notebooks and their PDF backgrounds are removed when the app's data is deleted. Save a Local storage copy and retain any original PDF backgrounds separately to keep them outside the app. The web app continues to use its existing storage workflow.
On Linux, building the Nextcloud credential-storage plugin also requires libsecret-1-dev; using Nextcloud requires a running desktop keyring service.
Run the analyzer and test suite with:
flutter analyze
flutter testThe tests cover document parsing, drawing and input, PDF export and rendering, saving and recovery, and editor behavior. See AGENTS.md for the project map, development conventions, and focused test commands.
- Some
.xoppdocuments may not render or behave exactly as they do in desktop Xournal++. - Large notebooks and PDF backgrounds can consume significant memory and may affect performance.
- PDF export does not support every source PDF or notebook configuration, including encrypted or rotated source pages, repeated source pages, and notebooks backed by multiple source PDFs.
- Some editing features and platform integrations remain incomplete or differ between platforms.
| Feature | Android | iOS | Web | Linux/Windows | macOS |
|---|---|---|---|---|---|
| Xournal notebook editor | Yes | Yes | Yes | Yes | Yes |
| Internal app-private notebook storage | Yes | Yes | No | Yes | Yes |
| Android Storage Access Framework document providers | Yes | N/A | N/A | N/A | N/A |
| Nextcloud WebDAV settings | Yes | Yes | No | Yes | Yes |
| Google Drive sign-in | Yes | Not yet | Not yet | Yes | Not yet |
| PDF background import/export | Yes | Yes | Platform-dependent | Yes | Yes |
The desktop runners and storage-provider behavior are not yet tested equally on
every target. For important notes, keep an independently accessible .xopp
backup until you have verified opening and saving on your own device/provider.
- Internal notebooks and copied PDF resources are app-private. Removing the app's data also removes those originals. Use Save As → Local storage to create a separate notebook file, and keep any referenced PDFs separately.
- Local storage notebooks may contain external PDF background paths; moving
just the
.xoppdoes not necessarily transfer the PDF. Relink it if asked. - Cloud storage is not a collaborative real-time editor. Avoid editing the same notebook on two devices at once until version conflict handling is available. To protect a divergent version, save under a new filename.
- The recovery dialog restores a recent unsaved notebook checkpoint after a restart. If a destination fails while saving, keep the recovery draft and save a second copy before discarding it.
For contributors, run flutter analyze and flutter test locally and test
Android document providers with cancellation, revoked permissions, and
interrupted writes. See AGENTS.md for code ownership and test
targets. Cloud access requires configuring the corresponding OAuth or
Nextcloud account in Settings; never commit app passwords or client secrets.
Contributions are welcome, especially for compatibility, reliability, performance, accessibility, platform integrations, tests, and documentation. Before making large changes, please open an issue or discussion so the direction can be coordinated.
The original project, created by TheOneWithTheBraid, provided the foundation for .xopp rendering and editing in this fork. Its original locations are GitLab and the archived GitHub mirror. Credit for that original work goes to its author and contributors.
Xournal++ Mobile is licensed under the European Union Public Licence v1.2. See LICENSE.
