Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tinypad

A tiny Windows 11-style notepad, written in Rust against the raw Win32 API — no UI framework, no telemetry, one dependency, and a single ~330 KB .exe that starts instantly.

CI Release License: MIT

tinypad with three open tabs in dark mode

Inspiration

This exists because of Dave Plummer — the retired Microsoft engineer behind a good deal of classic Windows, and host of Dave's Garage — and specifically TinyRetroPad, the project from his PlummersSoftwareLLC that fits a working, menu-complete Notepad-style Windows editor into roughly 2.5 KB of hand-written x86 assembly. He walks through it here:

📺 Watch the video

TinyRetroPad chases the absolute floor on bytes. tinypad asks the same question — how little does a real Notepad actually need? — in Rust instead: still no framework, no runtime, no dependencies beyond raw extern declarations, but wearing the full Windows 11 look. At ~330 KB it is enormous next to 2.5 KB of assembly, and rounding error next to a modern Electron editor. Both are pushing against the same thing.

Download

Grab the latest release:

File What it is
tinypad-setup-<version>.exe Installer — per-user (no admin prompt), Start Menu entry, Open with for .txt, clean uninstaller
tinypad.exe Portable — one file, no install, no registry writes

64-bit Windows 10 or 11. The Mica backdrop and rounded corners are Windows 11 extras; on Windows 10 it falls back to a solid caption and looks fine.

The binaries are unsigned, so SmartScreen shows an "unknown publisher" warning the first time. More info → Run anyway.

Usage

Open files by dragging them onto the window, passing them on the command line (tinypad.exe notes.txt), or with Ctrl+O. If you installed it, tinypad also shows up under Open with for .txt files.

Tabs

Tabs live in the title bar, the way Windows 11 Notepad does it. Ctrl+N or the + button opens one, Ctrl+W closes one, and Ctrl+Tab cycles. A tab with unsaved changes shows a dot instead of its close button — todo.txt in the screenshot above. Closing a modified tab asks before discarding anything.

Find and replace

Ctrl+F opens the search panel, Ctrl+H opens it with a replace row. Matches highlight as you type; Enter and Shift+Enter (or F3 / Shift+F3) step forward and back, and Esc closes the panel. The Aa and loop buttons toggle match-case and wrap-around.

The find panel searching the open document

Menus and shortcuts

Three menus — File, Edit, View — matching the system theme, with every command showing its shortcut. Alt+F, Alt+E, and Alt+V open them from the keyboard.

The File menu open, showing keyboard shortcuts

Keys Action
Ctrl+N / Ctrl+T New tab
Ctrl+W Close tab
Ctrl+Tab / Ctrl+Shift+Tab Next / previous tab
Ctrl+O / Ctrl+S / Ctrl+Shift+S Open / Save / Save As
Ctrl+F / Ctrl+H Find / Replace
F3 / Shift+F3 Find next / previous
Ctrl+Z / Ctrl+X / Ctrl+C / Ctrl+V Undo / Cut / Copy / Paste
Ctrl+A Select all
Ctrl+Plus / Ctrl+Minus / Ctrl+0 Zoom in / out / reset
Ctrl+scroll Zoom
Alt+F / Alt+E / Alt+V File / Edit / View menu

Themes

tinypad follows the Windows app theme and switches live — change it in Settings → Personalization → Colors and the window, menus, scrollbars, and title bar all update without a restart.

tinypad in light mode

The status bar

Line and column, zoom level, line-ending style, and encoding — all of the document state that a text editor should not hide from you.

Features

  • Tabs in the title bar, with modified-dots, close buttons, and working Snap Layouts on the maximize button
  • Dark and light, following the system theme, switching live
  • Encoding is preserved, not mangled: UTF-8 (± BOM), UTF-16 LE/BE, and ANSI are detected on open and written back in the same encoding, with CRLF / LF / CR line endings kept intact
  • Find & Replace with match case, wrap around, and incremental highlight
  • Zoom 10–500%, word wrap toggle, drag & drop
  • Remembers window placement, wrap, and zoom in %APPDATA%\tinypad\settings.ini

Building

The build cross-compiles from Linux (or WSL) to Windows — which is also exactly what CI does, so the binaries you download are built the same way.

rustup target add x86_64-pc-windows-gnu
sudo apt install gcc-mingw-w64-x86-64 nsis   # nsis only needed for the installer
cargo wb      # alias for: cargo build --release --target x86_64-pc-windows-gnu
              # -> target/x86_64-pc-windows-gnu/release/tinypad.exe
cargo test    # encoding, search, and settings logic — runs natively on Linux

Installer:

cd installer && makensis -DVERSION=0.1.0 tinypad.nsi

The app icon is generated by assets/gen_icon.py (pure Python stdlib, no ImageMagick) and committed as assets/app.ico.

Releasing

Push a tag and the release workflow builds the exe and installer, stamps the version into both, and publishes them:

git tag v0.1.0 && git push origin v0.1.0

How it works

Roughly 2,900 lines of Rust over windows-sys, which is just extern declarations — every pixel of chrome is drawn by this codebase.

window.rs Message loop and the custom frame: WM_NCCALCSIZE to reclaim the title bar, WM_NCHITTEST for drag and Snap Layouts, DPI changes, theme changes
chrome.rs Title-bar painting — tabs and caption buttons, composited through a buffered-paint DIB so the Mica backdrop shows through GDI drawing
editor.rs One classic EDIT control per tab, which buys per-tab undo, caret, and scroll state for free
tabs.rs / fileio.rs Tab model, file dialogs, save prompts
find.rs / search.rs Find panel, and the pure UTF-16 search core behind it
encoding.rs BOM sniffing, UTF-8/16 codecs, line-ending detection — all pure and unit-tested
theme.rs Palettes, DWM attributes, and system dark-mode detection

Two deliberate limitations, both matching classic Notepad: undo is single-level, and toggling word wrap clears the undo stack (the EDIT control has to be recreated to change wrapping).

License

MIT — see LICENSE.

About

A tiny Windows 11-style notepad in Rust and pure Win32. No frameworks, no telemetry, ~330 KB. Inspired by Dave Plummer.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages