A simple note app with good performance and PDF import support
A simple note app with good performance and PDF import support
| The Problem | SpeedyNote's Solution |
|---|---|
| OneNote doesn't support PDF annotation | Full PDF support with fast rendering |
| Xournal++ is painfully slow on large PDFs | 360Hz input on a Celeron N4000 (1.1GHz) |
| GoodNotes/Notability cost $10+ and require iPad | Free & open source, runs on $50 tablets |
| Most note apps are mobile-only or desktop-only | Same experience on Windows, Linux, macOS, Android & iPadOS |
.snbx note bundles allows easy cross-platform note sharing.| PDF Annotation | Layer Panel | Page Thumbnails |
|---|---|---|
| Edgeless Canvas | Action Bar | Subtoolbar |
|---|---|---|
| Link Objects | Markdown Support | Android |
|---|---|---|
| Platform | Minimum | Recommended |
|---|---|---|
| Windows | Windows 7 SP1 | Windows 11 |
| macOS | macOS 12 | macOS 15+ |
| Linux | Ubuntu 22.04 / Fedora 38 | Any with Qt 6.4+ |
| Android | Android 9 (API 28) | Android 13+ |
| iPadOS | iPadOS 16.0 | iPadOS 17+ |
Hardware: Any x86_64 or ARM64 CPU. Tested on Intel Core i5 470UM (2010), Celeron N4000, Snapdragon 7c Gen 2, Rockchip RK3399, Apple M4
Download the latest release from GitHub Releases or the official website.
| Platform | Package |
|---|---|
| Windows | .exe installer |
| macOS | .dmg disk image |
| Arch Linux | yay -S speedynote |
| Android | .apk package |
Option 1: Sileo (jailbroken iPads) - Add the SpeedyNote APT repository and install via Sileo
Option 2: TrollStore - Download the .ipa from GitHub Releases and install via TrollStore
Option 3: Build from source - See iPadOS Build Guide
iPadOS builds require a jailbroken device or TrollStore. App Store distribution is not available at this time.
| Platform | Requirements |
|---|---|
| All | CMake 3.16+, C++17 compiler |
| Windows | MSYS2 with clang64/clangarm64 toolchain |
| macOS | Xcode Command Line Tools, Homebrew |
| Linux | Qt 6.4+ dev packages, MuPDF (handwriting OCR optional, see Linux guide) |
| Android | Docker (see Android Build Guide) |
| iPadOS | macOS, Xcode 15+, Qt 6.9.3 for iOS (see iPadOS Build Guide) |
# Clone the repository
git clone https://github.com/alpha-liu-01/SpeedyNote.git
cd SpeedyNote
# Windows clean build (packaging-ready)
./compile.ps1
# Windows incremental development build
./compile.ps1 -dirty
# macOS
./compile-mac.sh
# Linux
./compile.sh
# Or build packages: ./build-package.sh| Format | Description | Use Case |
|---|---|---|
.snb |
Bundle folder with tiles | Edgeless canvas, large projects |
.snbx |
Compressed bundle (ZIP) | Sharing, backup |
Note: The legacy .spn format from v0.x is not supported.
SpeedyNote includes a powerful CLI for batch operations on Windows and Linux. Perfect for scripting, automation, and syncing notes between devices.
# Export all notebooks to PDF
speedynote export-pdf ~/Notes/ -o ~/PDFs/
# Backup notebooks to .snbx packages
speedynote export-snbx ~/Notes/ -o ~/Backup/
# Import .snbx packages
speedynote import ~/Downloads/*.snbx -d ~/Notes/| Command | Description |
|---|---|
export-pdf |
Export notebooks to PDF format |
export-snbx |
Export notebooks to .snbx packages |
import |
Import .snbx packages as notebooks |
speedynote export-pdf [OPTIONS] <input>... -o <output>| Option | Description |
|---|---|
-o, --output |
Output file (single) or directory (batch) |
--dpi <N> |
Export resolution (default: 150) |
--pages <RANGE> |
Page range, e.g., "1-10,15,20-25" |
--no-metadata |
Don't preserve PDF metadata |
--no-outline |
Don't preserve PDF bookmarks |
--annotations-only |
Export strokes only (blank background) |
--overwrite |
Overwrite existing files |
--recursive |
Search directories recursively |
--dry-run |
Preview without creating files |
Examples:
# Single notebook to PDF
speedynote export-pdf ~/Notes/Lecture.snb -o ~/Desktop/lecture.pdf
# All notebooks at 300 DPI
speedynote export-pdf ~/Notes/ -o ~/PDFs/ --dpi 300
# Export only annotations (no background)
speedynote export-pdf ~/Notes/*.snb -o ~/PDFs/ --annotations-only
# Preview what would be exported
speedynote export-pdf ~/Notes/ -o ~/PDFs/ --dry-runspeedynote export-snbx [OPTIONS] <input>... -o <output>| Option | Description |
|---|---|
-o, --output |
Output file (single) or directory (batch) |
--no-pdf |
Don't embed source PDF (smaller files) |
--overwrite |
Overwrite existing files |
--recursive |
Search directories recursively |
--dry-run |
Preview without creating files |
Examples:
# Backup with embedded PDFs
speedynote export-snbx ~/Notes/ -o ~/Backup/
# Backup without PDFs (smaller)
speedynote export-snbx ~/Notes/ -o ~/Backup/ --no-pdf
# Single notebook
speedynote export-snbx ~/Notes/Project.snb -o ~/Desktop/project.snbxspeedynote import [OPTIONS] <input>... -d <dest>| Option | Description |
|---|---|
-d, --dest |
Destination directory for notebooks |
--add-to-library |
Add imported notebooks to the launcher timeline |
--overwrite |
Overwrite existing notebooks |
--recursive |
Search directories recursively |
--dry-run |
Preview without importing |
Examples:
# Import packages
speedynote import ~/Downloads/*.snbx -d ~/Notes/
# Import and add to library (shows in launcher)
speedynote import ~/Downloads/*.snbx -d ~/Notes/ --add-to-library
# Import from a directory
speedynote import ~/Backup/ -d ~/Notes/ --recursive --add-to-libraryNote: On Android, imported notebooks are automatically added to the library. On desktop, use
--add-to-libraryto make them appear in the launcher timeline.
These options work with all commands:
| Option | Description |
|---|---|
--verbose |
Show detailed progress |
--json |
Output results as JSON (for scripting) |
--fail-fast |
Stop on first error |
-h, --help |
Show help for command |
-v, --version |
Show version |
| Code | Meaning |
|---|---|
| 0 | All operations succeeded |
| 1 | Some files failed or were skipped |
| 2 | All files failed |
| 3 | Invalid arguments |
| 5 | Cancelled (Ctrl+C) |
#!/bin/bash
# Sync notes from tablet to PC via SSH
TABLET="user@tablet:/storage/emulated/0/Notes"
LOCAL="$HOME/Notes"
BACKUP="$HOME/Backup"
# Pull new .snbx files from tablet
rsync -av "$TABLET/*.snbx" "$BACKUP/incoming/"
# Import to local library
speedynote import "$BACKUP/incoming/" -d "$LOCAL" --json | \
jq '.status == "success"' && rm "$BACKUP/incoming/"*.snbx
# Export updated notes as PDF for reference
speedynote export-pdf "$LOCAL" -o "$HOME/PDFs/" --dpi 150SpeedyNote
No open issues yet, or sync has not completed.