alpha-liu-01/SpeedyNote

A simple note app with good performance and PDF import support

C++

1,697

1,524 commits

updated Sep 21, 2026

See the code

README

SpeedyNote

SpeedyNote Logo

A blazing-fast, cross-platform note-taking app for stylus users

Built for students who need iPad-quality annotation on budget hardware

License: GPL v3 Platform Qt

Get it on Flathub    Featured|HelloGitHub

English • 中文


Why SpeedyNote?

The ProblemSpeedyNote's Solution
OneNote doesn't support PDF annotationFull PDF support with fast rendering
Xournal++ is painfully slow on large PDFs360Hz input on a Celeron N4000 (1.1GHz)
GoodNotes/Notability cost $10+ and require iPadFree & open source, runs on $50 tablets
Most note apps are mobile-only or desktop-onlySame experience on Windows, Linux, macOS, Android & iPadOS

Features

Performance First

  • 360Hz stylus polling on low-end hardware (tested: Celeron N4000 @ 1.1GHz)
  • Instant PDF loading - large documents open in seconds, not minutes
  • Small memory footprint - native C++ with no Electron bloat
  • ARM64 native builds - optimized for Snapdragon laptops and Rockchip Chromebooks

Professional Drawing Tools

  • Pressure-sensitive inking with Pen, Marker, and Highlighter tools
  • Vector-based strokes - always sharp at non-extreme zoom levels
  • Multi-layer editing (SAI2-style) - add, delete, reorder, merge layers
  • Stroke eraser with full undo/redo support
  • Touch gestures - two-finger pan, pinch-to-zoom, palm rejection

Document Modes

  • Paged Notebooks - traditional page-by-page notes (`.snb)
  • Edgeless Canvas - infinite whiteboard with lazy-loading tiles (`.snb)
  • PDF Backgrounds - annotate PDFs with clickable internal links
  • Sharing - .snbx note bundles allows easy cross-platform note sharing.

Tablet-First UX

  • Action bars - context-sensitive buttons appear when you need them
  • Subtoolbars - quick access to tool settings without menu diving
  • Page panel - thumbnail navigation with drag-to-reorder
  • PDF outline - click TOC entries to jump to sections

Advanced Features

  • Handwriting OCR - recognize handwritten notes on-device for text search and selection (macOS & Linux); supports Latin scripts, Chinese, Japanese, and Korean
  • Link objects - create clickable links to markdown notes, URLs, or positions
  • Markdown notes - attach rich text notes to any page or position
  • Multi-tab editing - work on multiple documents simultaneously

Screenshots

PDF AnnotationLayer PanelPage Thumbnails
PDFLayersPages
Edgeless CanvasAction BarSubtoolbar
EdgelessActionSubtoolbar
Link ObjectsMarkdown SupportAndroid
LinkObjectsMarkdownAndroid

Getting Started

System Requirements

PlatformMinimumRecommended
WindowsWindows 7 SP1Windows 11
macOSmacOS 12macOS 15+
LinuxUbuntu 22.04 / Fedora 38Any with Qt 6.4+
AndroidAndroid 9 (API 28)Android 13+
iPadOSiPadOS 16.0iPadOS 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

Installation

Windows / macOS / Linux

Download the latest release from GitHub Releases or the official website.

PlatformPackage
Windows.exe installer
macOS.dmg disk image
Arch Linuxyay -S speedynote
Android.apk package

iPadOS

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.


Building From Source

Prerequisites

PlatformRequirements
AllCMake 3.16+, C++17 compiler
WindowsMSYS2 with clang64/clangarm64 toolchain
macOSXcode Command Line Tools, Homebrew
LinuxQt 6.4+ dev packages, MuPDF (handwriting OCR optional, see Linux guide)
AndroidDocker (see Android Build Guide)
iPadOSmacOS, Xcode 15+, Qt 6.9.3 for iOS (see iPadOS Build Guide)

Quick Build

# 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

Detailed Build Guides


File Formats

FormatDescriptionUse Case
.snbBundle folder with tilesEdgeless canvas, large projects
.snbxCompressed bundle (ZIP)Sharing, backup

Note: The legacy .spn format from v0.x is not supported.


Command Line Interface (Desktop)

SpeedyNote includes a powerful CLI for batch operations on Windows and Linux. Perfect for scripting, automation, and syncing notes between devices.

Quick Start

# 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/

Commands

CommandDescription
export-pdfExport notebooks to PDF format
export-snbxExport notebooks to .snbx packages
importImport .snbx packages as notebooks

Export to PDF

speedynote export-pdf [OPTIONS] <input>... -o <output>
OptionDescription
-o, --outputOutput file (single) or directory (batch)
--dpi <N>Export resolution (default: 150)
--pages <RANGE>Page range, e.g., "1-10,15,20-25"
--no-metadataDon't preserve PDF metadata
--no-outlineDon't preserve PDF bookmarks
--annotations-onlyExport strokes only (blank background)
--overwriteOverwrite existing files
--recursiveSearch directories recursively
--dry-runPreview 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-run

Export to SNBX

speedynote export-snbx [OPTIONS] <input>... -o <output>
OptionDescription
-o, --outputOutput file (single) or directory (batch)
--no-pdfDon't embed source PDF (smaller files)
--overwriteOverwrite existing files
--recursiveSearch directories recursively
--dry-runPreview 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.snbx

Import SNBX Packages

speedynote import [OPTIONS] <input>... -d <dest>
OptionDescription
-d, --destDestination directory for notebooks
--add-to-libraryAdd imported notebooks to the launcher timeline
--overwriteOverwrite existing notebooks
--recursiveSearch directories recursively
--dry-runPreview 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-library

Note: On Android, imported notebooks are automatically added to the library. On desktop, use --add-to-library to make them appear in the launcher timeline.

Common Options

These options work with all commands:

OptionDescription
--verboseShow detailed progress
--jsonOutput results as JSON (for scripting)
--fail-fastStop on first error
-h, --helpShow help for command
-v, --versionShow version

Exit Codes

CodeMeaning
0All operations succeeded
1Some files failed or were skipped
2All files failed
3Invalid arguments
5Cancelled (Ctrl+C)

Scripting Example

#!/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 150

Supported Languages

SpeedyNote supports multiple languages:

  • English
  • 简体中文 (Simplified Chinese)
  • Español (Spanish) (Machine translated)
  • Français (French) (Machine translated)
  • German (Machine translated)
  • Brazilian Portuguese (Machine translated)

Contributions for additional translations are welcome!


Contributing

Contributions are welcome! Please feel free to:

  • Report bugs via GitHub Issues
  • Suggest features
  • Add translations
  • Submit pull requests

License

SpeedyNote is licensed under the GNU General Public License v3.0.

  • Free to use, modify, and distribute
  • Source code always available
  • Commercial use allowed (Play Store version)
  • Derivative works must also be GPL v3

See LICENSE for details.

Third-Party Libraries

LibraryLicenseUsage
Qt 6LGPL v3UI framework
MuPDFAGPL v3PDF rendering/export
QMarkdownTextEditMITMarkdown editor
minizMITZIP compression

Support the Project

If SpeedyNote helps you, consider:


Made for students who deserve better tools

SpeedyNote v1.x

alpha-liu-01/SpeedyNote

A simple note app with good performance and PDF import support

C++

1,697

1,524 commits

updated Sep 21, 2026

See the code

README

SpeedyNote

SpeedyNote Logo

A blazing-fast, cross-platform note-taking app for stylus users

Built for students who need iPad-quality annotation on budget hardware

License: GPL v3 Platform Qt

Get it on Flathub    Featured|HelloGitHub

English • 中文


Why SpeedyNote?

The ProblemSpeedyNote's Solution
OneNote doesn't support PDF annotationFull PDF support with fast rendering
Xournal++ is painfully slow on large PDFs360Hz input on a Celeron N4000 (1.1GHz)
GoodNotes/Notability cost $10+ and require iPadFree & open source, runs on $50 tablets
Most note apps are mobile-only or desktop-onlySame experience on Windows, Linux, macOS, Android & iPadOS

Features

Performance First

  • 360Hz stylus polling on low-end hardware (tested: Celeron N4000 @ 1.1GHz)
  • Instant PDF loading - large documents open in seconds, not minutes
  • Small memory footprint - native C++ with no Electron bloat
  • ARM64 native builds - optimized for Snapdragon laptops and Rockchip Chromebooks

Professional Drawing Tools

  • Pressure-sensitive inking with Pen, Marker, and Highlighter tools
  • Vector-based strokes - always sharp at non-extreme zoom levels
  • Multi-layer editing (SAI2-style) - add, delete, reorder, merge layers
  • Stroke eraser with full undo/redo support
  • Touch gestures - two-finger pan, pinch-to-zoom, palm rejection

Document Modes

  • Paged Notebooks - traditional page-by-page notes (`.snb)
  • Edgeless Canvas - infinite whiteboard with lazy-loading tiles (`.snb)
  • PDF Backgrounds - annotate PDFs with clickable internal links
  • Sharing - .snbx note bundles allows easy cross-platform note sharing.

Tablet-First UX

  • Action bars - context-sensitive buttons appear when you need them
  • Subtoolbars - quick access to tool settings without menu diving
  • Page panel - thumbnail navigation with drag-to-reorder
  • PDF outline - click TOC entries to jump to sections

Advanced Features

  • Handwriting OCR - recognize handwritten notes on-device for text search and selection (macOS & Linux); supports Latin scripts, Chinese, Japanese, and Korean
  • Link objects - create clickable links to markdown notes, URLs, or positions
  • Markdown notes - attach rich text notes to any page or position
  • Multi-tab editing - work on multiple documents simultaneously

Screenshots

PDF AnnotationLayer PanelPage Thumbnails
PDFLayersPages
Edgeless CanvasAction BarSubtoolbar
EdgelessActionSubtoolbar
Link ObjectsMarkdown SupportAndroid
LinkObjectsMarkdownAndroid

Getting Started

System Requirements

PlatformMinimumRecommended
WindowsWindows 7 SP1Windows 11
macOSmacOS 12macOS 15+
LinuxUbuntu 22.04 / Fedora 38Any with Qt 6.4+
AndroidAndroid 9 (API 28)Android 13+
iPadOSiPadOS 16.0iPadOS 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

Installation

Windows / macOS / Linux

Download the latest release from GitHub Releases or the official website.

PlatformPackage
Windows.exe installer
macOS.dmg disk image
Arch Linuxyay -S speedynote
Android.apk package

iPadOS

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.


Building From Source

Prerequisites

PlatformRequirements
AllCMake 3.16+, C++17 compiler
WindowsMSYS2 with clang64/clangarm64 toolchain
macOSXcode Command Line Tools, Homebrew
LinuxQt 6.4+ dev packages, MuPDF (handwriting OCR optional, see Linux guide)
AndroidDocker (see Android Build Guide)
iPadOSmacOS, Xcode 15+, Qt 6.9.3 for iOS (see iPadOS Build Guide)

Quick Build

# 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

Detailed Build Guides


File Formats

FormatDescriptionUse Case
.snbBundle folder with tilesEdgeless canvas, large projects
.snbxCompressed bundle (ZIP)Sharing, backup

Note: The legacy .spn format from v0.x is not supported.


Command Line Interface (Desktop)

SpeedyNote includes a powerful CLI for batch operations on Windows and Linux. Perfect for scripting, automation, and syncing notes between devices.

Quick Start

# 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/

Commands

CommandDescription
export-pdfExport notebooks to PDF format
export-snbxExport notebooks to .snbx packages
importImport .snbx packages as notebooks

Export to PDF

speedynote export-pdf [OPTIONS] <input>... -o <output>
OptionDescription
-o, --outputOutput file (single) or directory (batch)
--dpi <N>Export resolution (default: 150)
--pages <RANGE>Page range, e.g., "1-10,15,20-25"
--no-metadataDon't preserve PDF metadata
--no-outlineDon't preserve PDF bookmarks
--annotations-onlyExport strokes only (blank background)
--overwriteOverwrite existing files
--recursiveSearch directories recursively
--dry-runPreview 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-run

Export to SNBX

speedynote export-snbx [OPTIONS] <input>... -o <output>
OptionDescription
-o, --outputOutput file (single) or directory (batch)
--no-pdfDon't embed source PDF (smaller files)
--overwriteOverwrite existing files
--recursiveSearch directories recursively
--dry-runPreview 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.snbx

Import SNBX Packages

speedynote import [OPTIONS] <input>... -d <dest>
OptionDescription
-d, --destDestination directory for notebooks
--add-to-libraryAdd imported notebooks to the launcher timeline
--overwriteOverwrite existing notebooks
--recursiveSearch directories recursively
--dry-runPreview 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-library

Note: On Android, imported notebooks are automatically added to the library. On desktop, use --add-to-library to make them appear in the launcher timeline.

Common Options

These options work with all commands:

OptionDescription
--verboseShow detailed progress
--jsonOutput results as JSON (for scripting)
--fail-fastStop on first error
-h, --helpShow help for command
-v, --versionShow version

Exit Codes

CodeMeaning
0All operations succeeded
1Some files failed or were skipped
2All files failed
3Invalid arguments
5Cancelled (Ctrl+C)

Scripting Example

#!/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 150

Supported Languages

SpeedyNote supports multiple languages:

  • English
  • 简体中文 (Simplified Chinese)
  • Español (Spanish) (Machine translated)
  • Français (French) (Machine translated)
  • German (Machine translated)
  • Brazilian Portuguese (Machine translated)

Contributions for additional translations are welcome!


Contributing

Contributions are welcome! Please feel free to:

  • Report bugs via GitHub Issues
  • Suggest features
  • Add translations
  • Submit pull requests

License

SpeedyNote is licensed under the GNU General Public License v3.0.

  • Free to use, modify, and distribute
  • Source code always available
  • Commercial use allowed (Play Store version)
  • Derivative works must also be GPL v3

See LICENSE for details.

Third-Party Libraries

LibraryLicenseUsage
Qt 6LGPL v3UI framework
MuPDFAGPL v3PDF rendering/export
QMarkdownTextEditMITMarkdown editor
minizMITZIP compression

Support the Project

If SpeedyNote helps you, consider:


Made for students who deserve better tools

SpeedyNote v1.x

Significant stargazers

Integral

307 followers · starred May 2026

Orion

70 followers · starred Aug 2026

Beni Cherniavsky-Paskin

122 followers · starred Mar 2026

Dialga

62 followers · starred May 2026