Skip to content

Repository files navigation

UmbraNote

A lightweight, cross-platform text editor written in modern C++. UmbraNote feels familiar like Windows Notepad, with optional encrypted notes, PDF export, and a clean native UI on Windows and Linux.

CI License Platform C++

Highlights

  • Familiar editing — New, Open, Save, Find/Replace, Go To, Word Wrap, Font picker, and status bar line/column display
  • Open any text-like file — Notepad-style open dialog (All Files by default) with auto-detect for UTF-8, UTF-16, and system ANSI
  • UTF-8 by default — Plain text files are saved as UTF-8 without BOM
  • Encrypted notes — High-security .zro files using Argon2id + XChaCha20-Poly1305, optional keyfile, and legacy v1/v2 support
  • PDF export — Export the current document to PDF from the File menu
  • Cross-platform core — Shared core/ library with native Win32 and GTK4 frontends
  • libsodium — Memory-hard Argon2id and modern AEAD for v3 encryption (bundled at build time if missing)

Screenshots

Add screenshots after your first GitHub release:

docs/screenshots/windows-editor.png docs/screenshots/linux-editor.png

Quick start

Windows

git clone https://github.com/YOUR_USERNAME/UmbraNote.git
cd UmbraNote
build.bat
UmbraNote.exe

Linux

git clone https://github.com/YOUR_USERNAME/UmbraNote.git
cd UmbraNote
chmod +x build.sh
./build.sh
./UmbraNote

Requirements

Platform Toolchain Libraries
Windows 10+ Visual Studio 2022 Build Tools or VS 2022 with C++ workload CMake 3.16+, Git (first build fetches libsodium if needed)
Linux GCC or Clang with C++17 CMake 3.16+, OpenSSL (libssl-dev), GTK4 (libgtk-4-dev), libsodium (libsodium-dev)

Build

Windows (recommended)

build.bat

Equivalent script:

scripts\build-windows.bat

Output: UmbraNote.exe in the repository root and releases/windows/UmbraNote.exe.

Sign a Windows release (PGP)

After building, sign release artifacts in the same detached ASCII-armored format used by YellowSphere:

scripts\sign-release.bat

Create the UmbraNote release key once (private key stored in gitignored .gnupg-release/):

scripts\init-release-key.bat

Then sign:

scripts\sign-release.bat

This writes releases/windows/UmbraNote.exe.asc, docs/SHA256SUMS, docs/SHA256SUMS.asc, and docs/UmbraNote_Release_Signing_2026_pubkey.asc.

Verify:

gpg --import docs/UmbraNote_Release_Signing_2026_pubkey.asc
gpg --verify docs/SHA256SUMS.asc docs/SHA256SUMS
gpg --verify releases/windows/UmbraNote.exe.asc releases/windows/UmbraNote.exe

See docs/RELEASE_SIGNING.md for key storage layout and fingerprint.

Linux (recommended)

./build.sh

Equivalent script:

./scripts/build-linux.sh

Output: UmbraNote in the repository root.

Manual CMake

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release

Windows binary path:

build/platform/win32/UmbraNote.exe

Linux binary path:

build/platform/linux/UmbraNote

Keyboard shortcuts

Action Shortcut
New Ctrl+N
Open Ctrl+O
Save Ctrl+S
Print Ctrl+P
Undo Ctrl+Z
Cut Ctrl+X
Copy Ctrl+C
Paste Ctrl+V
Find Ctrl+F
Find Next F3
Replace Ctrl+H
Go To Ctrl+G
Select All Ctrl+A

Repository layout

UmbraNote/
├── .github/
│   └── workflows/
│       └── ci.yml              # GitHub Actions build matrix
├── core/
│   ├── include/zeronote/       # Public core headers
│   ├── crypto.cpp              # AES-256-GCM + PBKDF2
│   ├── pdf_export.cpp          # PDF writer
│   ├── text_codec.cpp          # UTF-8 / UTF-16 file I/O
│   └── CMakeLists.txt
├── platform/
│   ├── win32/                  # Windows Win32 application
│   │   ├── main.cpp
│   │   ├── notepad.cpp
│   │   ├── resource.rc
│   │   └── app.manifest
│   └── linux/                  # Linux GTK4 application
│       └── main.cpp
├── docs/
│   └── FILE_FORMATS.md         # .txt, .zro, and PDF details
├── scripts/
│   ├── build-windows.bat
│   └── build-linux.sh
├── build.bat                   # Windows wrapper
├── build.sh                    # Linux wrapper
├── CMakeLists.txt
├── CONTRIBUTING.md
├── LICENSE
└── README.md

Architecture

UmbraNote is split into a portable core and thin platform shells:

┌─────────────────────────────────────────┐
│           platform/win32 or linux       │
│   menus, dialogs, editor widget, shell  │
└──────────────────┬──────────────────────┘
                   │
┌──────────────────▼──────────────────────┐
│                  core                   │
│  text_codec  crypto  pdf_export         │
└─────────────────────────────────────────┘
  • Windows uses BCrypt for cryptography.
  • Linux uses OpenSSL for the same file format and API surface.
  • UI code converts to UTF-8 at the boundary so file logic stays portable.

See docs/FILE_FORMATS.md for on-disk layouts and docs/SECURITY.md for the v3 threat model.

File types

Extension Purpose
.txt Plain UTF-8 text
.zro Password-encrypted UmbraNote document
.pdf Exported PDF output

Roadmap

  • Linux encrypted open/save dialogs
  • macOS port
  • Dark mode
  • Recent files list
  • Autosave and session restore

Contributing

Contributions are welcome. Read CONTRIBUTING.md before opening a pull request.

License

This project is licensed under the MIT License. See LICENSE.

About

No description, website, or topics provided.

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages