ZPad is a lightweight yet feature-rich native desktop text editor built on Tauri (Rust) and CodeMirror 6. It opens in under a second, handles files of any size, renders Markdown live with math and diagrams, and stays out of your way until you need it. A glass-morphism UI, eight built-in themes, pinnable floating notes, and a robust crash-recovery system make it comfortable on every kind of desktop.
Pre-built binaries are available exclusively on the ZPad website. The GitHub Releases page contains changelogs and source archives only — no binary downloads.
| Platform | File |
|---|---|
| Windows | ZPad_0.1.0_x64-setup.exe · ZPad_0.1.0_x64_en-US.msi |
| macOS Apple Silicon | ZPad_0.1.0_aarch64.dmg |
| macOS Intel x64 | ZPad_0.1.0_x64.dmg |
| Linux | ZPad_0.1.0_amd64.AppImage · .deb · .rpm |
Prerequisites: Rust (stable), Node.js 20+, pnpm
git clone https://github.com/TheHolyOneZ/ZPad.git
cd zpad
pnpm install
pnpm tauri buildFor a live dev session with hot-reload:
pnpm tauri devThe release binary ends up in src-tauri/target/release/.
- Get ZPad
- What is ZPad?
- Why ZPad?
- Feature Highlights
- Installation
- First Launch & Onboarding Tour
- The Interface at a Glance
- Tab Bar
- The Editor
- File Management
- Tabs & Split Panes
- Markdown Preview
- Floating Pins
- Mention Links — File References
- Distraction-Free Mode
- Find & Search
- File Comparison (Diff View)
- Appearance & Themes
- Status Bar Reference
- Keyboard Shortcuts
- Encoding & Line Endings
- Auto-Save & Crash Recovery
- Large File Support
- System Integration
- Platform Notes
- Settings Overview
- How ZPad Compares
- FAQ & Troubleshooting
- Tech Stack
- Licence
ZPad is a native desktop text editor focused on speed, clarity, and power. Unlike web-based editors wrapped in Electron, ZPad is built with Tauri — a Rust-powered native desktop framework — giving you a binary that is roughly a tenth the size of comparable Electron apps and opens in under a second on any modern machine.
Who is ZPad for?
- Writers who want a distraction-free Markdown editor with a live, fully-featured rendered preview
- Developers who need a fast scratchpad, config editor, log viewer, or note-taker
- Power users who juggle many files and want multi-tab, multi-pane layouts with real split views
- Anyone who wants a modern-looking editor that doesn't feel bloated, slow, or resource-hungry
ZPad is not a code editor with language servers, linting, or a plugin ecosystem. It is deliberately scoped: open files, edit text, write Markdown, take notes, pin sticky notes to your desktop. It does those things exceptionally well.
| Problem | ZPad's answer |
|---|---|
| System notepad is too basic | Full editor: tabs, splits, cross-tab search, go-to-line |
| Notepad++ doesn't run on macOS or Linux | Native app on all three platforms |
| Cross-platform editors (Obsidian, VS Code) are Electron — heavy and slow | Tauri/Rust: ~5–7 MB installer, sub-second cold start, ~150–200 MB RAM footprint |
| Notes live in the cloud — you lose control | Everything is a plain text file on your disk. No accounts, no sync, no telemetry. |
| You lose work when the app crashes | Shadow-save writes your text every 150 ms and restores it automatically on restart |
| Session restore means re-opening all your files manually | ZPad reopens your last set of named files automatically on every launch |
| Transparent editors on your desktop look unprofessional | Eight polished themes with adjustable glass-morphism opacity |
- Multi-tab editing — open as many files as you want, each in its own tab, with full unsaved-change tracking
- Split panes — up to 4 side-by-side or stacked editor panes, each with independent tabs and scroll positions
- Live Markdown preview — CommonMark + GitHub Flavored Markdown + math (KaTeX) + Mermaid diagrams + callouts + footnotes + definition lists + emoji + YAML frontmatter
- Floating pins — detachable always-on-top sticky note windows that stay visible while you work in other apps
- Mention links — embed
[file:path]references directly in text; click to open, hover to preview, right-click for full options - Distraction-free mode — hide the tab bar and status bar with
F11for full-screen immersion - Cross-tab search — search every open file simultaneously with instant, navigable results
- File comparison — built-in diff view with highlighted changes and keyboard change navigation
- 40+ character encodings — reads and writes UTF-8, UTF-16, Windows-1252, ISO-8859 variants, Shift_JIS, GBK, and many more
- Auto line-ending detection — LF, CRLF, and CR detected automatically and convertible per-file
- Auto-save — saves named files automatically 2 seconds after you stop typing
- Shadow-file crash recovery — edits are written to a shadow copy every 150 ms and restored after any unexpected close
- Large file support — opens files up to 512 MB with chunked loading and virtual scrolling
- 8 built-in themes — including frosted-glass dark mode, pure-black Midnight, and six more
- Window opacity control — reveal your desktop wallpaper through the editor panels
- System tray — quick access to recent files and a global hotkey to bring ZPad to the front from any app
- Single instance — opening a second copy passes the file to the running app rather than spawning a duplicate
- Session restore — named open files are remembered and reopened on every launch
- Interactive onboarding tour — a 30-second spotlight walkthrough on first launch, replayable any time
Pre-built installers for Windows, macOS, and Linux are available exclusively on the ZPad website. The GitHub repository is used for source code and changelogs only — there are no binary downloads on the GitHub Releases page.
| Platform | Installer |
|---|---|
| Windows | ZPad_x64-setup.exe (NSIS installer) or .msi |
| macOS Apple Silicon | ZPad_aarch64.dmg |
| macOS Intel x64 | ZPad_x64.dmg |
| Linux (Debian / Ubuntu) | ZPad_amd64.deb |
| Linux (Fedora / RHEL) | ZPad-x86_64.rpm |
| Linux (universal) | ZPad_amd64.AppImage |
No runtime, virtual machine, or language installation is required. ZPad is fully self-contained.
When you open ZPad for the first time, a short interactive tour walks you through the main features. Each step spotlights a real UI element and shows a tooltip explaining what it does — the rest of the screen dims so the highlighted element stands out clearly.
| # | Step | What it covers |
|---|---|---|
| 1 | Welcome | Introduction to ZPad |
| 2 | Tabs | Opening, closing, and cycling between tabs |
| 3 | Editor | Multi-cursor, go-to-line, word wrap |
| 4 | Status Bar | All the toggle pills along the bottom edge |
| 5 | Markdown Preview | The MD pill and the live preview pane |
| 6 | Floating Pins | Pinning a buffer as an always-on-top sticky note |
| 7 | Finish | Opens the built-in Markdown Showcase |
| Key | Action |
|---|---|
| → Arrow or Enter | Advance to the next step |
| Escape | Skip the tour immediately |
The step indicator (a row of dots at the top of each tooltip) shows where you are in the tour. The active dot stretches into a pill shape; completed dots turn accent-tinted.
After completing or skipping, the tour does not appear again on startup. Replay it at any time by clicking the ? button at the far right of the tab bar, or pressing F1.
The final tour step opens a Markdown Showcase tab — a pre-built document demonstrating every formatting feature ZPad's preview engine can render: headings, tables, math, Mermaid diagrams, callouts, footnotes, code blocks, and more. It doubles as a live syntax reference. Close the tab whenever you are done with it.
ZPad's window has three main horizontal zones:
┌──────────────────────────────────────────────────────────────────┐
│ Tab Bar (tabs · toolbar buttons · window controls) │
├──────────────────────────────────────────────────────────────────┤
│ │
│ Editor Area (one or more panes, each with its own tab strip) │
│ │
├──────────────────────────────────────────────────────────────────┤
│ Status Bar (cursor position · word count · toggle pills) │
└──────────────────────────────────────────────────────────────────┘
All three zones use a glass-morphism aesthetic by default — frosted translucent panels that can reveal your desktop wallpaper at adjustable opacity. Eight built-in themes let you switch the full colour palette in one click.
The tab bar runs across the top of the window. It displays your open files as tabs on the left and a row of toolbar buttons on the right.
Each open file appears as a tab showing its file name, or Untitled 1, Untitled 2, etc. for new unsaved files.
| Indicator | Meaning |
|---|---|
| Blue dot ● on the tab | The file has unsaved changes |
| Lock icon 🔒 on the tab | This tab is linked to a floating pin window |
| No indicator | The file is saved and up to date |
Interacting with tabs:
| Action | What it does |
|---|---|
| Left-click a tab | Switch to that file |
| Middle-click a tab | Close it |
| Right-click a tab | Open the context menu (see below) |
| Drag a tab | Reorder within the same pane, or move it to another pane |
Tab right-click context menu:
- Close Tab
- Close Other Tabs
- Close Tabs to the Left
- Close Tabs to the Right
- Close All
- Split Right
- Split Down
- Copy File Path
The toolbar buttons sit between the last tab and the window controls:
| Button | What it does | Keyboard shortcut |
|---|---|---|
| + | Open a new untitled tab | Ctrl+N |
| Open | Browse and open a file from disk | Ctrl+O |
| Recent | Open the recent files panel | Ctrl+Shift+O |
| Pin Tab | Pin the active tab as a floating note | Ctrl+Shift+P |
| New Pin | Create a blank floating pin (not linked to any tab) | — |
| Compare | Open a side-by-side file comparison view | — |
| Appearance | Open the theme and opacity settings | — |
| Split ∥ | Split the current pane vertically (side by side) | Ctrl+\ |
| Split ═ | Split the current pane horizontally (stacked) | Ctrl+Shift+\ |
| × Pane | Close the active pane (visible when 2+ panes are open) | Ctrl+Shift+W |
| ? | Replay the onboarding tour | F1 |
On Windows and Linux, the Minimize, Maximize, and Close window controls appear on the right edge of the tab bar. On macOS, they appear in the standard top-left position as a traffic-light cluster.
ZPad's editing surface is powered by CodeMirror 6 — the same engine used by many professional developer tools. It is fast, reliable, and handles everything from small notes to log files with millions of lines.
Standard editing conventions apply throughout:
- Undo with
Ctrl+Z - Copy
Ctrl+C, CutCtrl+X, PasteCtrl+V - Select all with
Ctrl+A - Home / End to jump to the start or end of the current line
- Ctrl+Home / Ctrl+End to jump to the very start or end of the file
ZPad supports multiple simultaneous cursors. When more than one cursor is active, every edit — typing, deleting, pasting — applies to all of them at once.
To place an additional cursor at any position, Alt+Click at that location. Combine multiple Alt+Clicks to build up as many cursors as you need — useful for editing parallel lines or adding the same text to many places at once.
Press Ctrl+G to open the Go to Line dialog. Type a line number and press Enter to jump there instantly. The cursor lands at the beginning of that line. Works on files of any size, including large files in virtual-scroll mode.
You can also click the Ln X, Col Y pill in the status bar to open the same dialog.
Click the Wrap On / Wrap Off pill in the status bar to toggle word wrap. When word wrap is off, long lines extend horizontally and require horizontal scrolling. When it is on, they wrap to the next visual line automatically.
Word wrap is a global setting — it applies to all tabs the same way.
Click the Ln# On / Ln# Off pill in the status bar to toggle line numbers. Three display styles are available from the Appearance panel:
| Style | Description |
|---|---|
| Hidden | No line numbers are shown |
| Classic | Absolute numbers — 1, 2, 3 … going from top to bottom |
| Relative | Distance from the cursor line — helpful for keyboard-driven navigation |
| Action | Shortcut |
|---|---|
| Increase font size | Ctrl+= |
| Decrease font size | Ctrl+- |
| Reset to default (14 px) | Ctrl+0 |
| Decrease via status bar | A− button |
| Increase via status bar | A+ button |
The current size is displayed as a label between the A− and A+ buttons in the status bar (e.g. "14px"). Changes apply immediately to all panes.
| Action | Shortcut |
|---|---|
| Move current line up | Alt+Up |
| Move current line down | Alt+Down |
| Duplicate line below | Shift+Alt+Down |
| Delete entire line | Ctrl+Shift+K |
| Select entire line | Ctrl+L |
These work on the line the cursor is currently on. When multiple cursors are active, the operation applies to each cursor's line simultaneously.
ZPad's editor automatically highlights the matching bracket, parenthesis, or square bracket whenever the cursor sits next to one. The matching pair is highlighted in the accent colour so you can see the scope at a glance.
Brackets, parentheses, square brackets, and quotes are also auto-closed — type an opening ( and the matching ) is inserted automatically with the cursor placed inside. Press Backspace immediately to remove both if you didn't want them.
The line the cursor is currently on receives a subtle background highlight so you never lose track of your position in a wall of text.
Hold Alt and click to place an additional cursor at any point in the document. Combine this with vertical movement to select a column of text across multiple lines and edit them all at once — for example, to add a prefix to every line in a list.
| Method | How |
|---|---|
| File dialog | Ctrl+O — native OS open dialog |
| Recent files panel | Ctrl+Shift+O — filterable list of recently opened files |
| Drag and drop | Drag one or more files from your OS file manager into the ZPad window |
| Command line | Launch ZPad with a path argument: zpad myfile.txt |
The open dialog suggests plain-text types by default — .txt, .md, .log, .conf, .ini, .csv, .json, .yaml, .yml, .toml, .sh, .env — but an All Files filter is always available. ZPad will open any plain-text file regardless of extension.
Files larger than 1 MB automatically open in large-file mode (see Large File Support).
Press Ctrl+Shift+O to open the recent files panel. It shows up to 20 recently opened files with human-friendly relative timestamps — "3 min ago", "2 hours ago", "Yesterday".
- Type to filter the list in real time
- ↑ / ↓ arrows to navigate the filtered list
- Enter or click to open a file
- Delete to remove a file from the recents list
The 10 most recent files also appear in the system tray menu, so you can reopen a file without bringing ZPad to the foreground first.
| Action | Shortcut |
|---|---|
| Save | Ctrl+S |
| Save As | Ctrl+Shift+S |
For a file that has never been saved (still named Untitled), Ctrl+S acts as Save As and opens a file dialog to choose a name and location.
A blue dot (●) on the tab indicates unsaved changes. It disappears immediately when the file is saved.
If you close a tab (or quit ZPad) while a file has unsaved changes, a prompt appears with three choices:
| Choice | What happens |
|---|---|
| Save | The file is written to disk, then the tab closes |
| Keep unsaved | The tab closes without writing to disk — the shadow file preserves the content for crash recovery |
| Cancel | Nothing happens; you return to editing |
When you quit with multiple dirty files, the prompt appears for each one in sequence.
When Auto ● is active in the status bar, ZPad automatically saves named files 2 seconds after you stop typing. Untitled files (those without a path on disk) are not auto-saved but are fully protected by crash recovery.
Click the Auto pill in the status bar to toggle. The ● dot next to "Auto" shows when it is active. The setting persists across restarts.
ZPad watches every open file for changes made by other applications. If a file is modified externally while ZPad has it open, a notification appears within 250 milliseconds. You can:
- Reload — replace the editor content with the on-disk version
- Keep — keep your local version and ignore the external change
- Cancel — dismiss the notification without taking action
If you also have unsaved local edits, ZPad warns you that reloading will discard those edits before you confirm.
Right-click any tab and choose Copy File Path to put the full absolute path of that file on the clipboard.
| Action | Shortcut |
|---|---|
| New tab | Ctrl+N |
| Close active tab | Ctrl+W |
| Jump to tab 1 – 9 | Ctrl+1 through Ctrl+9 |
| Next tab | Ctrl+Tab |
ZPad supports up to 4 independent editor panes arranged side-by-side or stacked. Each pane has its own tab strip and maintains its own independent scroll position, cursor, and active tab.
| Action | Shortcut |
|---|---|
| Split vertically (side by side) | Ctrl+\ |
| Split horizontally (top / bottom) | Ctrl+Shift+\ |
| Close active pane | Ctrl+Shift+W |
| Focus pane to the left | Ctrl+Alt+Left |
| Focus pane to the right | Ctrl+Alt+Right |
| Focus pane above | Ctrl+Alt+Up |
| Focus pane below | Ctrl+Alt+Down |
The Split ∥ and Split ═ buttons in the tab bar do the same thing. Right-clicking any tab also offers Split Right and Split Down options directly.
Resizing panes: Click and drag the divider bar between any two panes to change the split ratio.
Moving tabs between panes: Drag a tab from one pane's tab strip to another pane to move that file there.
Pane tab right-click menu:
- Close Tab
- Close Other Tabs
- Close Pane
- Split Right / Split Down
- Move to New Pane (Right or Down)
- Copy File Path
At least one pane always exists. The split buttons disable themselves when 4 panes are already open.
Click the MD pill in the status bar to open a live side-by-side Markdown preview. The editor stays on the left; the rendered preview appears on the right and updates in real time as you type. When preview is active the pill shows a blue dot: MD ●. Click it again to close the preview and return to full-width editing.
Markdown preview is per-buffer — it is linked to the tab it was opened on, and follows that tab when you switch panes.
ZPad's Markdown renderer goes well beyond basic CommonMark. Here is the complete list of everything it supports.
Six heading levels (H1 through H6). H1 and H2 render with a bottom border rule for visual distinction. Every heading automatically receives an anchor ID that internal links can target.
| What you write | What you see |
|---|---|
*italic* or _italic_ |
Italic text |
**bold** or __bold__ |
Bold text |
***bold italic*** |
Bold and italic |
~~strikethrough~~ |
|
==highlight== |
Highlighted text (mark background) |
`inline code` |
Monospace code span |
H~2~O |
Subscript — H₂O |
X^2^ |
Superscript — X² |
<kbd>Ctrl</kbd> |
Keyboard key badge |
- Unordered lists — use
-,*, or+as the bullet character - Ordered lists — use
1.,2.,3.etc. - Nested lists — indent two or four spaces to create a child level under any list item
- Mixed lists — unordered items nested inside ordered, and vice versa, with any level of depth
Write - [x] for a completed task and - [ ] for a pending task. Nested task items are fully supported. Checkboxes render visually in the preview.
- [x] Completed task
- [ ] Pending task
- [x] Nested completed subtask
- [ ] Nested pending subtask
Standard Markdown pipe tables with optional column alignment:
| Alignment | Syntax |
|---|---|
| Left (default) | :--- |
| Centre | :---: |
| Right | ---: |
Tables render with alternating-row hover highlights for readability.
Fenced code blocks with a language tag receive full syntax highlighting. Over 200 languages are supported, including JavaScript, TypeScript, Python, Bash, JSON, YAML, XML, SQL, Rust, Go, C, C++, Diff, and many more.
Each code block displays:
- A language label in the top-right corner
- A Copy button — click it to copy the entire block to the clipboard
Standard > blockquotes work at multiple levels of nesting. A blockquote can contain headings, lists, code blocks, and any other Markdown inside it.
Inline and display math are rendered via KaTeX:
| Syntax | Rendered as |
|---|---|
$E = mc^2$ |
Inline equation within the text flow |
$$\int_0^\infty f(x)\,dx$$ |
Full-width centred display block |
The full KaTeX library is available: matrices, integrals, summations, fractions, Greek letters, and essentially all standard LaTeX math commands.
Code blocks tagged with the language identifier mermaid are rendered as live vector diagrams. Supported diagram types include:
- Flowcharts
- Sequence diagrams
- Class diagrams
- State diagrams
- Gantt charts
- Entity relationship diagrams
- And all other Mermaid diagram types
GitHub-flavored alert syntax renders as styled callout boxes, each with a distinct icon and colour:
| Syntax | Callout style |
|---|---|
> [!NOTE] |
Blue — informational note |
> [!TIP] |
Green — helpful tip |
> [!WARNING] |
Yellow — caution |
> [!IMPORTANT] |
Purple — critical information |
> [!CAUTION] |
Red — danger / destructive warning |
Write [^1] as a reference in the text, and define [^1]: Your footnote text anywhere in the document. References render as superscript numbered links; all definitions collect in a "Footnotes" section at the bottom of the preview. Multi-paragraph footnotes are supported.
Term
: The definition of the term goes here.
Renders as a styled glossary-style definition list with the term emphasised and the definition indented below.
Both native emoji characters and GitHub shortcodes work:
- Native: 😀 🚀 ✅ ❌ 💡 📝
- Shortcodes:
:smile::rocket::white_check_mark::x::bulb:
The preview renders a sanitised subset of HTML embedded in your Markdown:
| HTML element | What it does |
|---|---|
<details> / <summary> |
Collapsible sections — click to expand or collapse |
<mark> |
Highlighted text |
<sub> / <sup> |
Subscript and superscript |
<kbd> |
Keyboard key badges |
| HTML tables | Alternative to Markdown pipe tables |
Inline styles on <div> and <span> |
Custom colours, spacing, etc. |
All HTML is sanitised with DOMPurify before rendering — malicious scripts, dangerous attributes, and unsafe elements are stripped automatically.
Documents that begin with a YAML block delimited by --- have their metadata parsed and displayed as a styled header at the top of the preview (not as raw YAML text). Common fields — title, author, date, tags — are recognised and laid out cleanly.
Three or more ---, ***, or ___ on a line by themselves render as a full-width horizontal divider.
| Link type | Syntax |
|---|---|
| Inline link | [text](https://example.com) |
| Reference-style link | [text][ref] + [ref]: https://example.com defined elsewhere |
| Auto-detected URL | Bare https:// or http:// addresses become clickable automatically |
| Email link | <email@example.com> renders as a mailto: link |
| Anchor link | [Section](#section-id) scrolls to the heading with that ID |
External links open in your default browser. Internal anchor links scroll the preview smoothly.
 renders the image inline. Images are lazy-loaded for performance and scale automatically to fit the preview column width.
While the preview is open, a TOC button appears in the preview header bar. Click it to toggle a collapsible table of contents sidebar built from all the document's headings. Click any entry to scroll the preview to that heading.
The editor and preview scroll positions are linked. Scrolling the editor moves the preview to the corresponding section, and vice versa. This makes navigation easy in long documents — you never lose your place in either pane.
Pins are always-on-top floating note windows that stay visible in front of every other application on your desktop. Keep a checklist visible while you work in your browser, or pin a reference document above your terminal — pins never go behind other windows.
| Method | Result |
|---|---|
Ctrl+Shift+P |
Pin the active editor tab as a floating note. The pin is linked to that tab — edits sync both ways. |
| New Pin button in the tab bar | Create a blank standalone pin. It is not linked to any editor tab. |
Linked pins stay in sync with the editor tab they were created from:
- Editing in the pin updates the editor tab
- Editing in the tab updates the pin
- The tab shows a lock icon 🔒 instead of the blue unsaved dot
- Clicking the lock icon in the tab bar brings the pin window into focus
- Closing a linked pin returns its buffer to the main editor as a normal tab
Standalone pins are independent scratchpads with no connection to any editor tab. They do not affect the main window.
- Pins float above all other windows, including windows from other applications.
- Pins are freely resizable — drag any edge or corner.
- Pins remember their position and size during the current session.
- Markdown preview is available inside pins, with a compact layout suited to smaller windows.
- Pins are session-only — they close when ZPad closes and do not reopen on the next launch.
- Closing ZPad closes all pin windows.
Pin windows use the same glass-morphism appearance as the main window. They respond to the same opacity setting in the Appearance panel. On Linux systems without a compositor, pin windows fall back to a solid opaque background.
ZPad lets you embed clickable file references directly in any text document using a simple syntax:
[file:/absolute/path/to/file.txt]
[file:~/notes/ideas.md]
[file:../relative/path.txt]
[file:/path/to/file.txt|custom label]
Mention links render as interactive pills — a small chip showing the filename (or your custom label) and its parent directory. They are visible and clickable right in the editor, without needing to switch to a preview.
| Action | What happens |
|---|---|
| Click | Open the file in a new tab (or switch to it if already open) |
| Shift+Click | Open the file in a horizontal split pane |
| Alt+Click | Pin the file as a floating window |
| Ctrl+Click | Reveal the file in your OS file manager |
| Middle-click | Open in a background tab without switching focus |
| Right-click | Open a context menu with all the above options plus "Copy path" |
| Hover (400 ms) | Show a preview popover with the first 12 lines of the file, its size, encoding, and last-modified time |
If the referenced file does not exist, the pill renders with a dashed border and a warning icon. Clicking a broken link shows a Create file option — confirm and ZPad creates an empty file at that path and opens it.
When you type [file: inside a document, an autocomplete dropdown appears immediately. It shows:
- Your recently opened files, ranked by recency
- Directory contents as you type a path (type
/after a directory name to browse into it)
Keep typing to filter by file name or full path. Press Enter or click a suggestion to insert the complete reference. Press Escape to dismiss without inserting.
- Paths starting with
~/expand to your home directory - Relative paths (e.g.
../notes/ideas.md) resolve from the directory of the file that contains the mention link - Absolute paths work exactly as written
ZPad checks file existence for each mention link with a 30-second cache. Broken-link styling updates automatically when a referenced file is created or deleted — you don't need to reload the document.
Press F11 to enter distraction-free mode. When active:
- The tab bar is hidden
- The status bar is hidden
- Only the editor panes fill the window
All keyboard shortcuts still work in distraction-free mode — you can open files, save, switch tabs, and use every feature without the UI visible.
Press F11 again to restore the tab bar and status bar.
Press Ctrl+Shift+F to open a search panel that searches every open file simultaneously.
As you type, results appear instantly. Each match shows:
- The file name (the tab's title)
- The line number where the match was found
- A text preview of the matching line with the match highlighted
| Action | How |
|---|---|
| Navigate results | ↑ / ↓ arrow keys |
| Jump to a match | Enter or click — ZPad switches to the correct tab and places the cursor on that line |
| Close the search panel | Escape |
The panel shows up to 500 total matches (200 per file) to keep the UI responsive when many files are open.
Press Ctrl+F to open the find & replace panel inside the active editor. The panel shows both the search field and the replace field together — it is a combined find-and-replace, not find-only.
The panel includes three toggle chips:
- Aa — case-sensitive search
- .* — regular expression mode
- ab| — whole-word matching
Use the ↑ / ↓ buttons to step through matches. Replace replaces the current match; Replace All replaces every occurrence at once. Close the panel with Escape.
Press Ctrl+G (or click the Ln X, Col Y pill in the status bar) to open the Go to Line dialog. Type a line number and press Enter to jump there.
Click the Compare button in the tab bar to open a side-by-side file comparison view.
A dialog asks you to choose a file to compare against the currently active tab. The active tab appears on the left; the chosen comparison file appears on the right.
What the colours mean:
- Lines highlighted in blue — added or changed
- Lines highlighted in red — removed
| Control | What it does | Shortcut |
|---|---|---|
| ← Prev | Jump to the previous changed block | Alt+Up ¹ |
| Next → | Jump to the next changed block | Alt+Down ¹ |
| Sync scroll | Keep both panes scrolled together | — |
| Only changes | Collapse unchanged sections so only differences are visible | — |
| Wrap | Toggle word wrap in both panes | — |
| A− / A+ | Decrease / increase font size in the diff view | — |
| ⇄ Swap | Swap which file is on the left and which is on the right | — |
| ↺ Reload | Re-read the right-hand file from disk (only available when it is a disk file) | — |
Press Escape to close the diff view and return to normal editing.
¹
Alt+UpandAlt+Downmay conflict with OS window-snapping shortcuts on Windows and some Linux desktop environments. Use the ← Prev / Next → toolbar buttons as an alternative.
Click the Appearance button in the tab bar to open the appearance settings panel. All changes apply instantly — there is no save button and no restart needed.
Eight built-in themes change the complete colour palette of the entire app — the tab bar, editor, status bar, preview, dropdowns, and all overlays.
| Theme | Character |
|---|---|
| Dark Glass | The default. Deep dark background with frosted-glass translucency and a blue accent colour. |
| Light | Clean bright background for daytime or well-lit environments. |
| Midnight | Pure solid black. No transparency effects whatsoever — maximum contrast, minimal distraction. |
| Warm | Amber and brown tones for a cosy, warm-light feel during long writing sessions. |
| Ocean | Deep teal and blue palette reminiscent of deep water. |
| Forest | Muted greens with an earthy, natural character. |
| Nord | The classic Arctic blue Nord colour scheme. |
| Rose | Dusty rose and mauve tones for a softer dark theme. |
A slider controls the transparency of editor panels, from 15% to 100%:
- At 100% the panels are fully opaque and nothing shows through
- At lower values the glass effect strengthens and your wallpaper becomes partially visible behind the UI
- The Midnight theme disables this slider — it is always fully opaque by design
Three display styles for line numbers are available:
| Style | Description |
|---|---|
| Hidden | No line numbers are shown |
| Classic | Absolute numbers — 1, 2, 3 … counted from the top of the file |
| Relative | Distance from the cursor's current line — useful for keyboard-driven editing styles |
ZPad honours your operating system's accessibility settings automatically:
- Reduce Transparency — when active, all backdrop-blur effects are disabled and panels use near-opaque solid backgrounds
- Prefer Reduced Motion — when active, all entrance animations, spotlight transitions, and UI motion are skipped entirely
- Focus indicators — keyboard-navigation outlines use the theme's accent colour at 2 px for clear visibility
The status bar runs along the bottom edge of the window. It always displays information about the active buffer and provides quick-access toggles. The bar scrolls horizontally if the window is too narrow to show everything at once.
| Pill | What it shows | Clickable? |
|---|---|---|
| Ln X, Col Y | Current cursor line and column | Yes — opens the Go to Line dialog |
| X lines | Total number of lines in the file | No |
| Xw Yc | Word count and character count | No |
| Pill / Control | What it does |
|---|---|
| A− | Decrease font size |
| XXpx | Current font size (e.g. "14px") — informational |
| A+ | Increase font size |
| Spaces: X | Current tab / indent width — informational (display only) |
| Wrap On / Wrap Off | Toggles word wrap |
| MD ● / MD | Toggles Markdown preview. Blue dot appears when active. |
| Ln# On / Ln# Off | Toggles line number visibility |
| Auto ● / Auto | Toggles auto-save. Blue dot appears when active. |
| LF / CRLF / CR (dropdown) | Change the line ending format for this file |
| UTF-8 (or other — dropdown) | Change the character encoding for this file |
| Plain Text | Language mode indicator — informational only |
| Action | Shortcut |
|---|---|
| New tab | Ctrl+N |
| Close active tab | Ctrl+W |
| Open file | Ctrl+O |
| Recent files panel | Ctrl+Shift+O |
| Save | Ctrl+S |
| Save As | Ctrl+Shift+S |
| Quit | Ctrl+Q |
| Switch to tab 1 – 9 | Ctrl+1 through Ctrl+9 |
| Next tab | Ctrl+Tab |
| Action | Shortcut |
|---|---|
| Go to line | Ctrl+G |
| Toggle distraction-free mode | F11 |
| Increase font size | Ctrl+= |
| Decrease font size | Ctrl+- |
| Reset font size to default | Ctrl+0 |
| Find & Replace (combined panel) | Ctrl+F |
| Move line up | Alt+Up |
| Move line down | Alt+Down |
| Duplicate line below | Shift+Alt+Down |
| Delete entire line | Ctrl+Shift+K |
| Select entire line | Ctrl+L |
| Undo | Ctrl+Z |
| Select all | Ctrl+A |
| Action | Shortcut |
|---|---|
| Cross-tab search (all open files) | Ctrl+Shift+F |
| Prev / Next change in diff view | toolbar ← Prev / Next → buttons ² |
| Close diff view / close modal | Escape |
| Action | Shortcut |
|---|---|
| Split vertically (side by side) | Ctrl+\ |
| Split horizontally (top / bottom) | Ctrl+Shift+\ |
| Close active pane | Ctrl+Shift+W |
| Focus pane to the left | Ctrl+Alt+Left |
| Focus pane to the right | Ctrl+Alt+Right |
| Focus pane above | Ctrl+Alt+Up |
| Focus pane below | Ctrl+Alt+Down |
| Action | Shortcut |
|---|---|
| Pin the active tab as a floating note | Ctrl+Shift+P |
| Replay the onboarding tour | F1 |
²
Alt+Up/Alt+Downin the diff view may be captured by OS window-snapping on Windows and some Linux environments. Use the toolbar buttons instead.
| Action | Shortcut |
|---|---|
| Bring ZPad to the front | Ctrl+Shift+Space |
| Bring ZPad to the front (fallback, CJK input methods) | Ctrl+Shift+. |
Global hotkeys function even when ZPad is minimised or behind other windows.
ZPad detects and preserves the encoding and line-ending style of every file automatically. No configuration is needed for everyday files — just open, edit, and save.
ZPad reads and writes files in 40+ character encodings:
Unicode
- UTF-8 (with or without BOM)
- UTF-16 LE (with BOM)
- UTF-16 BE (with BOM)
Western European
- Windows-1252, ISO-8859-1, ISO-8859-15, Macintosh
Central European
- Windows-1250, ISO-8859-2
Cyrillic
- Windows-1251, ISO-8859-5, KOI8-R, KOI8-U, Mac Cyrillic
Greek
- Windows-1253, ISO-8859-7
Turkish
- Windows-1254, ISO-8859-3
Hebrew
- Windows-1255, ISO-8859-8
Arabic
- Windows-1256, ISO-8859-6
Baltic
- Windows-1257, ISO-8859-4, ISO-8859-13
Vietnamese
- Windows-1258
Nordic / Celtic / Romanian
- ISO-8859-10, ISO-8859-14, ISO-8859-16
Japanese
- Shift_JIS, EUC-JP, ISO-2022-JP
Korean
- EUC-KR
Chinese
- GBK, GB18030, Big5
The current encoding is shown as a clickable pill in the status bar. Click it to open a dropdown and select a different encoding. The re-encoding is applied when you next save the file with Ctrl+S.
ZPad detects BOM automatically when opening a file. When a BOM is present, the status bar pill shows it alongside the encoding name — for example "UTF-8 BOM". The BOM is preserved on save unless you explicitly change the encoding to one that does not use one.
Three line-ending styles are supported:
| Style | Common on | Description |
|---|---|---|
| LF | Linux, macOS, modern Git | \n — one character per line break |
| CRLF | Windows | \r\n — two characters per line break |
| CR | Legacy Mac (pre-OS X) | \r — one character per line break |
ZPad detects the predominant style from the first 64 KB of the file and displays it in the status bar. Click the LF / CRLF / CR dropdown to change the format — the conversion is applied on the next save.
ZPad uses two independent layers to protect your work: explicit auto-save for named files, and a silent shadow-file system that runs continuously for everything.
When Auto ● is active in the status bar, ZPad saves named files to disk automatically 2 seconds after you stop typing. Untitled (never-saved) files are not written to disk by auto-save — they are protected by crash recovery instead.
Toggle auto-save by clicking the Auto pill. A blue ● dot appears next to "Auto" when it is enabled. The setting persists across restarts.
Regardless of the auto-save setting, ZPad writes a shadow copy of every open buffer to disk every 150 milliseconds. Shadow files are stored in a private directory managed by ZPad:
| Platform | Shadow file location |
|---|---|
| Linux / macOS | ~/.local/share/zpad/shadows/ |
| Windows | %APPDATA%\Local\zpad\shadows\ |
If ZPad closes unexpectedly — a crash, a force-kill, a power cut, or closing a terminal session that launched ZPad — the next time you open the app it scans this directory and offers to restore any unsaved content.
Recovered buffers appear as "Recovered: filename" tabs, clearly labelled so you know their origin. After reviewing, you can:
- Save the tab to a permanent location on disk
- Discard the shadow to remove the recovery file and close the tab
What crash recovery covers:
- All unsaved edits to named files (changes not yet written to disk, or written since the last save)
- All content in Untitled buffers (files that were never saved)
- Content from tabs that were linked to floating pins
What crash recovery does not cover:
- Files larger than 5 MB are excluded from shadow-writing to prevent performance issues
- Content that was already saved to disk is already safe — recovery is only for the delta between the last save and the crash
ZPad also saves a list of your open named files on exit and reopens them automatically at the next launch. The last active tab is re-selected. Untitled buffers are not part of session restore but are covered by crash recovery.
ZPad is designed to open very large text files without freezing or consuming excessive memory.
| File size | Behaviour |
|---|---|
| Under 1 MB | Normal editing — the full file is loaded into memory |
| 1 MB – 512 MB | Large-file mode — content loaded in chunks with virtual scrolling |
| Over 512 MB | Rejected at open time with an error message |
- Content is divided into chunks and loaded on demand. Only the visible portion of the file is held in memory at any time.
- The editor uses virtual scrolling — only the lines currently on screen are rendered. Scrolling through a file with millions of lines stays smooth.
- A sparse line index is built when the file first opens, enabling instant jumps to any line number via
Ctrl+G, regardless of how large the file is. - Lines longer than 10,000 characters are truncated in the display. A "Load more" button appears at the end of the truncated line to fetch the next portion on demand.
- Large files open in read-only mode. Editing a file with hundreds of millions of characters is not practical in a single-editor workflow.
ZPad keeps a tray icon running so you can access it quickly from the taskbar or menu bar, even when the main window is hidden.
| Action | What happens |
|---|---|
| Left-click the icon | Toggle the main window between visible and hidden |
| Open ZPad (menu item) | Show and focus the main window |
| New Tab (menu item) | Show the window and open a new untitled tab |
| Recent Files (submenu) | Up to 10 recently opened files — click any to open it |
| Quit ZPad (menu item) | Close the application entirely |
Linux note: On GNOME Wayland without the AppIndicator extension, tray icons are not natively supported and the ZPad icon will be invisible. ZPad shows a one-time notification on first run if this is detected. Install
gnome-shell-extension-appindicatorand enable it in GNOME Extensions to restore the tray icon.
A global hotkey brings ZPad to the front from any application, even when it is minimised or hidden behind other windows:
| Platform | Primary hotkey | Fallback |
|---|---|---|
| Windows | Ctrl+Shift+Space |
Ctrl+Shift+. |
| macOS | Cmd+Shift+Space |
— |
| Linux | Ctrl+Shift+Space |
Ctrl+Shift+. (use this if your input method captures the primary) |
On Wayland, where applications cannot forcibly steal focus, ZPad instead flashes its taskbar entry to signal that it needs attention.
ZPad enforces a single running instance. Opening a second copy while ZPad is already running causes:
- The existing window to come to the front and gain focus
- If the second launch included a file path argument, that file opens in the existing window
- The second process exits immediately without opening a new window
This prevents accidentally having two separate ZPad sessions with duplicate copies of the same files.
ZPad remembers the main window's position and size across restarts. If the saved position would place the window off-screen after a monitor configuration change (a monitor unplugged, DPI changed, screen resolution reduced), ZPad automatically re-centres the window at startup instead.
ZPad accepts a file path as a command-line argument:
zpad /path/to/file.txt
If ZPad is already running, the file opens in the existing window. If not, a new instance starts with that file open. Paths to directories, non-existent files, or files over 50 MB are rejected with an error at the command line.
- Wayland: Full support. Transparent pin windows always work. System tray requires AppIndicator support (see above). The global hotkey falls back to
Ctrl+Shift+.ifCtrl+Shift+Spaceis captured by an IME. - X11 with a compositor: Full support. Transparent windows work correctly on GNOME, KDE Plasma, Cinnamon, XFWM4, and any X11 setup running Compton or Picom.
- X11 without a compositor: Pin windows fall back to opaque solid backgrounds — transparent rendering without a compositor produces visual garbage on raw X11. The main editor window is unaffected. Set the environment variable
ZPAD_FORCE_TRANSPARENT=1to override compositor detection if you know your system supports transparency.
Full feature support on Apple Silicon and Intel. Native transparency, the global hotkey, and the menu-bar tray icon all work as expected.
Full feature support. Window controls (Minimize, Maximize, Close) are rendered by ZPad inside the tab bar area and match the active theme, rather than using the native Windows title bar.
All ZPad preferences are stored in a SQLite database in your user data directory. You never need to edit this file directly — everything is accessible through the UI. For reference:
| Setting | Where to change it | Options |
|---|---|---|
| Theme | Appearance panel | Dark Glass, Light, Midnight, Warm, Ocean, Forest, Nord, Rose |
| Background opacity | Appearance panel | 15% – 100% (disabled for Midnight) |
| Line number style | Appearance panel | Hidden, Classic, Relative |
| Word wrap | Status bar "Wrap" pill | On / Off |
| Line numbers visible | Status bar "Ln#" pill | On / Off |
| Font size | Status bar A+ / A− or Ctrl+= / Ctrl+- |
8 px – 32 px |
| Auto-save | Status bar "Auto" pill | On / Off |
| Tab / indent size | Displayed in status bar (informational, default 4) | Read-only display |
| File encoding | Status bar encoding dropdown | UTF-8, UTF-16, Windows-1252, and 37+ more |
| Line ending format | Status bar LF / CRLF / CR dropdown | LF, CRLF, CR |
All settings take effect immediately. There is no save button and no restart required.
Database file location:
| Platform | Path |
|---|---|
| Linux / macOS | ~/.local/share/zpad/zpad.db |
| Windows | %APPDATA%\Local\zpad\zpad.db |
| ZPad | Notepad++ | Obsidian | VS Code | Windows Notepad | |
|---|---|---|---|---|---|
| Windows | ✓ | ✓ | ✓ | ✓ | ✓ |
| macOS | ✓ | ✗ | ✓ | ✓ | ✗ |
| Linux | ✓ | ✗ | ✓ | ✓ | ✗ |
| Native (not Electron) | ✓ | ✓ | ✗ | ✗ | ✓ |
| Installer size | ~5–7 MB | ~5 MB | ~95 MB | ~100 MB | Inbox |
| Auto-save + crash recovery | ✓ | Partial | Partial | Partial | ✗ |
| Session restore | ✓ | ✓ | ✓ | ✓ | ✗ |
| Split-screen panes | ✓ | ✓ | ✓ | ✓ | ✗ |
| Live Markdown preview | ✓ | ✗ | ✓ | Extension | ✗ |
| Math (KaTeX) in preview | ✓ | ✗ | ✓ | Extension | ✗ |
| Mermaid diagrams in preview | ✓ | ✗ | ✓ | Extension | ✗ |
| System tray + global hotkey | ✓ | ✗ | ✗ | ✗ | ✗ |
| Floating overlay notes | ✓ | ✗ | ✗ | ✗ | ✗ |
| Clickable file mention links | ✓ | ✗ | ✓ (wikilinks) | ✗ | ✗ |
| Distraction-free mode | ✓ | ✓ | ✓ | ✓ | ✗ |
| 40+ file encodings | ✓ | ✓ | ✗ | Partial | ✗ |
| Large file support (512 MB) | ✓ | ✓ | ✗ | Partial | ✗ |
| No account required | ✓ | ✓ | ✓ | ✓ | ✓ |
| No telemetry | ✓ | ✓ | ✗ | ✗ | ✗ |
| Open source (GPL) | ✓ | ✓ | ✗ | Partial | ✗ |
On GNOME Wayland without the AppIndicator extension, system tray icons are not supported at the OS level. Install gnome-shell-extension-appindicator from GNOME Extensions, enable it, and log out and back in. The ZPad tray icon will appear on the next launch.
ZPad detected that your system does not have an active compositor. Start a compositor such as Picom or Compton, or switch to a desktop environment that includes compositing (GNOME, KDE Plasma, Cinnamon). Alternatively, launch ZPad with the environment variable ZPAD_FORCE_TRANSPARENT=1 to force transparent rendering regardless of detection.
On Linux with CJK input methods such as IBus or Fcitx, Ctrl+Shift+Space is often intercepted by the input method before ZPad can receive it. Switch to the fallback hotkey Ctrl+Shift+. — both are registered at the same time, so the fallback is always available.
Session restore only reopens named files — those with a known path on disk. Untitled (never-saved) buffers are covered by crash recovery and appear as "Recovered" tabs instead. If a file was moved, renamed, or deleted between sessions, ZPad silently skips it.
The next time you open ZPad after an unexpected close, a recovery prompt appears for each buffer that had unsaved changes. Review the recovered content, then use Ctrl+S to save it somewhere permanent.
If you missed the recovery prompt, the raw shadow files still exist on disk:
- Linux / macOS:
~/.local/share/zpad/shadows/ - Windows:
%APPDATA%\Local\zpad\shadows\
Each .zpad file in that folder contains your buffer's content after a short metadata header. Open the file in any text editor and look past the first ---ZPAD_SHADOW--- separator line — everything after that separator is your text.
Markdown preview renders whatever is in the active buffer. If the buffer is empty or contains only plain text with no Markdown formatting, the preview will reflect that accurately (usually just blank or plain paragraphs). Open the Markdown Showcase tab (via ? → tour → finish step, or F1) to see a fully rendered example.
The word count counts whitespace-separated tokens. For writing systems that do not use spaces between words — Chinese, Japanese, Thai — the count will reflect token or character count rather than linguistic word count.
Click the encoding pill in the status bar (e.g. UTF-8) to open a dropdown showing all 40+ supported encodings. Select the target encoding. The conversion is applied the next time you save the file with Ctrl+S.
No — the theme is a global setting that applies uniformly to the main window, all panes, and all floating pin windows.
ZPad's hard upper limit is 512 MB. Files above this size are rejected at open time. For very large binary logs or data files, a dedicated log viewer or hex editor is a better fit.
ZPad does not have language-aware syntax highlighting in the editor itself — it is a plain-text and Markdown editor, not an IDE. The Markdown preview does render fenced code blocks with syntax highlighting for 200+ languages, but the raw text-editing view is always plain.
Click the ? button at the far right of the tab bar, or press F1 at any time. The tour starts from the beginning immediately and does not affect your open files.
No. Skipping or completing the tour sets a persistent flag so it never interrupts you again on startup. Use the ? button or F1 to replay it whenever you want — there is no limit on replays.
No. ZPad has no telemetry, no analytics, no update-check pings, and no cloud connectivity of any kind. Your files and settings never leave your machine.
| Layer | Technology |
|---|---|
| Desktop shell | Tauri v2 (Rust) |
| Frontend | React 19 + TypeScript 5 |
| Editor engine | CodeMirror 6 |
| UI styling | Tailwind CSS v4 + custom glass design system |
| State management | Zustand 5 |
| Local database | SQLite — settings, recents, shadow state |
| Markdown parser | marked 18 + marked-alert, marked-footnote, marked-katex-extension, marked-emoji |
| Math rendering | KaTeX 0.17 |
| Diagram rendering | Mermaid 11 |
| Code highlighting | highlight.js 11 |
| HTML sanitisation | DOMPurify 3 |
| File watching | notify v8 (Rust) with 250 ms debouncer |
| Build tool | Vite 7 |
No cloud. No telemetry. No accounts. Your data stays on your disk.
ZPad is free and open-source software released under the GNU General Public License v3.0 (GPL-3.0).
You are free to use, study, modify, and distribute ZPad under the terms of that licence. See the LICENSE file for the full text.
Built with Tauri · CodeMirror 6 · React 19
| TheHolyOneZ | Built the entire application — architecture, Rust backend, UI, design system, and everything in between |
| Claude (Anthropic) | Authored this README |
