Notes Classic is a local-first note manager inspired by the 2015 Evernote era. It runs as a Tauri desktop app with a rich editor, tagging, OCR search, and import/export pipelines. All data is stored locally by default and can be moved to any folder via Settings.
This README is intentionally detailed so the project can be built and shipped without internal docs.
- Two-level organization: Stacks + Notebooks
- Tags: Nested tags with drag/drop sorting
- Rich editor (Jodit):
- Callouts, code blocks, todo lists
- Attachments (download / view / delete)
- Image insertion and resizing
- Encrypted blocks (view-only decrypt)
- OCR indexing for images (searchable text)
- Note links and back/forward history
- Trash with restore and bulk clean
- Importers:
- Evernote local database
- Notes Classic export package
- Markdown (.md)
- HTML
- Text (.txt)
- Exporters:
- Notes Classic export package
- Markdown (.md)
- HTML
- Text (.txt)
- PDF (native, wkhtmltopdf)
Notes Classic uses a SQLite database (notes.db) plus a files/ directory for
binary assets:
notesandnotebooksstore metadata and hierarchynote_textstores HTML contentnote_fileslists image and attachment files referenced in notesocr_filesandocr_textstore OCR indexing state
Assets are not shared between notes even if bytes are identical. This keeps imports deterministic and avoids ambiguous ownership during deletion.
By default, runtime data lives in:
data/(database + files + OCR state)settings/(user settings)
Both folders are created at runtime and are intentionally ignored by git. The storage path can be changed in Settings. The app copies or switches storage according to the selected path.
- Node.js 18+ and npm
- Rust (stable) + Cargo
- Tauri prerequisites by OS (WebView + native deps)
- Install Node.js 18+ and Rust (stable).
- Install WebView2 Runtime (required by Tauri).
- Install MSVC build tools if not already present.
Install core build deps and WebKit/GTK:
sudo apt update
sudo apt install -y \
build-essential \
pkg-config \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libayatana-appindicator3-dev \
librsvg2-dev- Install Xcode Command Line Tools:
xcode-select --install- Install Node.js 18+ and Rust (stable).
npm install
npm run tauri devnpm run tauri buildArtifacts are written to src-tauri/target/release (platform-specific).
- Output:
.exeand installer artifacts insrc-tauri/target/release. - PDF export relies on wkhtmltopdf binaries (not committed to git):
src-tauri/resources/pdf/win/wkhtmltopdf.exesrc-tauri/resources/pdf/win/wkhtmltox.dll
- Output: native bundle in
src-tauri/target/release. - PDF export relies on wkhtmltopdf binaries (not committed to git):
src-tauri/resources/pdf/linux/wkhtmltopdfsrc-tauri/resources/pdf/linux/libwkhtmltox.so.0.12.6
- Output:
.appbundle insrc-tauri/target/release. - PDF export uses
src-tauri/resources/pdf/mac/wkhtmltopdf.pkg(not committed to git).
PDF export requires wkhtmltopdf binaries to be present in:
src-tauri/resources/pdf/win/
src-tauri/resources/pdf/linux/
src-tauri/resources/pdf/mac/
These files are intentionally excluded from git. Download a wkhtmltopdf build
for each target OS and place the binaries in the paths above before running
npm run tauri build.
Download source: https://wkhtmltopdf.org/downloads.html
OCR is powered by tesseract.js and bundled resources:
resources/ocr/worker.min.jsresources/ocr/tesseract-core.wasm(.js)resources/ocr/tessdata/eng.traineddata.gzresources/ocr/tessdata/rus.traineddata.gz
These must remain in place for OCR to work in packaged builds.
Notes Classic supports multiple import/export formats. All exports are designed to round-trip without losing structure or assets.
Produces a folder containing:
manifest.jsonnotes/(HTML + per-note metadata)files/andattachments/
Produces a folder with:
- Note files in the chosen format
attachments/folder for images and files
Requires selecting the local Evernote data directory. The importer scans the DB and resource cache, then rebuilds Notes Classic storage.
Encrypted blocks store their data inside a protected container. Decrypting is read-only. Removal of encryption restores the original content and asset links.
Internal links use note://<uuid> and open the target note directly.
- Confirm
npm run tauri buildpasses on target OS - Ensure
resources/ocrandresources/pdfare bundled - Verify import/export round-trips on example datasets
- Remove all local data (
data/,settings/) - Update version in
package.jsonandtauri.conf.json - Add
LICENSEandTHIRD_PARTY_NOTICES.md