Skip to content
SecurityTripPublic

About

Resources

Code of conduct

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Birchpad

A fast, extensible, cross-platform text editor in the spirit of Notepad++, written in Rust.

Status: alpha (0.1). A Notepad++-like editor: tabs and split views, encodings, syntax highlighting for 50 languages with folding, multi-cursor and column editing, bookmarks, sessions that keep unsaved work, Find in Files, macros, themes, an interface in English and Russian, plugins as WebAssembly components and scripts in Rhai, with Compare, JSON and XML tools, a hex view and spell checking built in. Full parity with Notepad++ comes next. Expect rough edges. See the roadmap and the changelog.

Goals

  • Feature parity with Notepad++ first: tabs and split views, multi-cursor and column editing, syntax highlighting and folding, powerful find/replace and find-in-files, macros, sessions that never lose unsaved work, user-defined languages and themes.
  • Then go further: LSP, command palette, Git integration, built-in terminal, huge-file mode, plugins in any language via WebAssembly.
  • Native and fast: GPU-rendered UI, no browser engine, instant startup.
  • Cross-platform: Windows, Linux and macOS from day one.
  • Enterprise-ready: per-machine MSI, Group Policy / Intune templates, update channels that administrators control, and a guaranteed zero-network mode.

Why "Birchpad"?

Before paper became common in medieval Novgorod, people wrote everyday notes, letters and school exercises on strips of birch bark. Those birch-bark documents were the notepads of their time, and Birchpad is named after them.

Installing

Downloads are on the releases page:

File For
birchpad-<version>-windows-x64-setup.exe, …-windows-arm64-setup.exe Windows, installed for the current user without administrator rights; updates itself
birchpad-<version>-windows-x64.msi Windows, installed per machine by administrators, who also update it
birchpad-<version>-windows-x64.zip, …-windows-arm64.zip Windows, portable: unzip and run
birchpad-<version>-macos.zip macOS 10.15.7 or later, Apple silicon and Intel (Birchpad.app)
birchpad-<version>-linux-x64.zip Linux x64, portable

On Linux, to see Birchpad in the applications menu, put birchpad on your PATH and copy io.github.securitytrip.birchpad.desktop to ~/.local/share/applications/ and io.github.securitytrip.birchpad.png to ~/.local/share/icons/hicolor/512x512/apps/.

Windows releases are not signed yet (see the code signing policy), so Windows SmartScreen asks before the first start ("More info", "Run anyway"). macOS needs Birchpad.app opened once with Control-click > Open until the app is notarized. Each release lists SHA-256 checksums and carries GitHub build provenance (gh attestation verify <file> --repo SecurityTrip/Birchpad).

On Windows, the installer and the MSI add "Edit with Birchpad" to the Explorer's context menu of files (the MSI's ExplorerMenu feature can be left out: ADDLOCAL=Main); Preferences > Files adds it for a portable copy, or takes it away. At its first start Birchpad offers to open text files (Settings > Make Birchpad the Default Editor does it later): on Windows you then choose it in Default apps, which programs may not do themselves; on macOS, use Finder's Get Info > Open with > Change All.

To uninstall, use Installed apps in Windows Settings for the installer and the MSI, or delete the folder of a portable copy.

Nightly builds of the next version's branch (v0.1.4 after 0.1.3) are published as pre-releases; set updates.channel = "nightly" to get them as updates.

Code signing policy

Windows releases are not signed yet. The release workflow is ready to sign the Windows executable, the per-user installers and the MSI of each release (not nightly builds) through SignPath, and stays switched off until Birchpad has a code signing certificate; see ADR 0021. Until then, each release's SHA-256 checksums and GitHub build provenance show that a download is what the release workflow built from this repository's source on GitHub-hosted runners.

Privacy policy: Birchpad collects no personal data, and connects to the network only to check for and download updates, which can be turned off; see PRIVACY.md.

Building

Birchpad needs the Rust toolchain pinned in rust-toolchain.toml (rustup installs it automatically).

cargo run -p birchpad
cargo test --workspace

Command line

Birchpad accepts the Notepad++ options that make sense for it:

birchpad [-n<line>] [-c<column>] [-p<position>] [-l<language>] [-ro] [-multiInst]
         [-nosession] [-openSession] [FILE]...

A second launch opens its files as tabs in the running window and exits; -multiInst starts a separate instance instead, as do every launch, or a launch with -openSession, when Preferences > Multi-Instance says so (instances.mode = "multi" or "session"). -l takes Notepad++'s language names (-lcpp, -lpython, -lnormal), -openSession opens the files as sessions. Other Notepad++ options (-x, -y, -notabbar, ...) are accepted and ignored.

Portable mode and the network

Put a file named birchpad-portable.txt next to the executable (the Windows and Linux ZIPs come with it) and Birchpad keeps its settings and data in a data folder next to it. Administrator policies of the machine still apply.

Birchpad uses the network only to check for updates: once a day, and when you pick Help > Check for Updates. It reads a manifest signed with the project's key and refuses any other; installed copies (the Windows installer) update themselves when Birchpad restarts, other copies show where to download the new version. With updates.mode = "off" (a setting or an administrator policy) Birchpad makes no network requests at all; "notify" announces new versions without downloading them. See ADR 0020 and the privacy policy.

Repository layout

Path Contents
crates/core Text model: rope buffer, selections, change sets, transactions, undo history, search. No UI.
crates/config Layered settings: defaults, machine defaults, user settings, administrator policies; sessions.
crates/i18n The interface languages: YAML locales, texts by key, plural forms, the language in use. No UI.
crates/commands Command catalog, keymaps, the menu model, macros and Run commands, as data. No UI.
crates/io Encoding detection and conversion, reading and safely saving files, searching them (Find in Files). No UI.
crates/view Layout of a document view in cells: tab stops, word wrap, visual rows, right-to-left text. No UI.
crates/syntax Languages and syntax trees: detection, tree-sitter parsing, highlighting, folding. No UI.
crates/cli Notepad++-compatible command line and the single-instance hand-off. No UI.
crates/tools Built-in tools: JSON and XML formatting, hex dumps, comparing texts, spell checking, date formats, HTML export. No UI.
crates/plugin Plugins as WebAssembly components (wit/birchpad.wit), Rhai scripts, the plugin manager. No UI.
crates/update Updates: the signed update manifest, channels, versions, installing (Velopack on Windows). No UI.
crates/release-tool birchpad-release: signing keys and the update manifest, for the release workflows.
crates/ui What the window's parts share: the command registry, the settings and state of the application, dialog buttons, messages to the user.
crates/editor The editor: the buffer, the editor view drawn and edited in GPUI, the active theme.
crates/menu-bar The menu bar drawn in the window on Windows and Linux, with Windows' keyboard access.
crates/app The desktop application: the workspace, panes, panels, dialogs and menus. See ADR 0041 for the layout.
packaging/ Release packaging: per-machine MSI, macOS app bundle, portable-mode marker, update signing setup.
docs/ Roadmap, architecture decision records, and writing plugins and scripts.

Contributing

Contributions are welcome. Please read CONTRIBUTING.md first.

Relationship to Notepad++

Birchpad is an independent project, not affiliated with or endorsed by Notepad++ or its authors. It is a clean-room reimplementation: it contains no code from Notepad++, Scintilla or Notepad++'s plugins, and is written from Notepad++'s user manual, its behavior as a user sees it and its file formats, never from its source (the rules). Birchpad reads Notepad++'s themes, sessions, user-defined languages and other files from the user's own copy so that they carry over, but does not ship them. "Notepad++" is named only to describe that compatibility.

License

Licensed under either of

at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Birchpad is an independent project and is not affiliated with Notepad++.

About

Resources

Code of conduct

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages