A fast, simple text editor for Windows and Linux (Raspberry Pi included) that opens files of any size: an 800 MB JSON file opens instantly, scrolls smoothly, and can be searched, edited, formatted and saved.
⬇ Download for Windows (one signed
Slate.exe, 64-bit Windows 10 or 11) · Linux and Raspberry Pi (apt) ·
All releases · Website
Measured on a Windows PC with an NVMe drive, the file already in Windows' memory cache; the 810 MB file is made-up shop orders.
- Opens huge files instantly: nothing is loaded up front, only what's on screen is read and drawn. Files open in the background, so a slow network drive never freezes the window.
- Tabs that come back after a restart, including unsaved changes (like Windows 11 Notepad), for big files too (on Linux, up to 64 MB). Work is never lost silently: anything that can't be kept is asked about, and Windows won't shut down over it without asking.
- Find and replace with match case, whole word and regular expressions; fast on huge files (on several cores).
Find in selection (Alt+S), Find next and previous through all open tabs (Alt+A), searches kept highlighted in
every tab, each in a color of its own (Alt+H), the last searches and replacements with Up and Down, and
\n/\tin a regular expression's replacement for a line break or a tab. - Column selection (Alt+drag, Shift+Alt+arrows: type, paste and delete on every line) and dragging selected text to another place (with Ctrl, a copy).
- Spell check, like Notepad's: words spelled wrong get a wavy red line, in plain text, Markdown's prose and comments in code (not names, links, numbers or data files); right-click one for suggestions, Add to dictionary or Ignore. It's Windows' own spell checker, in Windows' language (on Linux, Enchant, which Slate's package brings along when it can). View → Spell check turns it off.
- Input methods for Chinese, Japanese and Korean: what's being composed shows right in the text at the cursor, in the theme's colors, its clauses underlined.
- Show only the lines that match a search (or the ones that don't, or any of the highlighted ones), in a tab of their own with each line's number in the file; Enter or a double-click goes to that line in the file, and it follows a log as it grows. 809,820 lines out of a 400 MB log in 0.23 s.
- Bookmarks (Ctrl+F2, then F2 / Shift+F2 to go from one to the next), kept with the tabs; read-only tabs (File → Read only; a file you can't write opens that way).
- Syntax colors for 52 kinds of files: Python, PowerShell, Batch, Shell, VBScript/VBA, AutoHotkey, Perl, R, C, C++, C#, Objective-C and Objective-C++, Java, Kotlin, Scala, Swift, Dart, Go, Rust, JavaScript, TypeScript, PHP, Ruby, Lua, SQL, HTML (with its CSS and scripts), CSS, XML, Markdown (code blocks in their language), YAML, JSON, TOML, INI, Java properties, nginx and Apache configuration, Terraform/HCL, CMake, Dockerfiles, Inno Setup and NSIS installer scripts, G-code (3D printers, CNC), PPCL programs (Siemens APOGEE and Desigo), CSV with commas or semicolons and TSV (each column its own color), logs, diffs, subtitles (SRT, WebVTT), calendars and contacts (iCalendar, vCard) and Visual Studio solutions. Block comments and multi-line strings are followed correctly.
- Line tools: sort lines (
file2beforefile10), remove duplicate or blank lines, trim spaces at line ends; UPPERCASE / lowercase / Title Case; comment or uncomment lines with Ctrl+/; duplicate, delete and move lines. - Format → Convert: Base64, URL encoding and JSON string escapes, each way, on the selection (or the whole text); and the SHA-256 of the selection or the file, to copy.
- EditorConfig: a project's
.editorconfigsets the indentation of its files, the line endings and encoding of new ones, and a line break at the end when they're saved. - CSV and TSV: check (every row as many fields as the first, quotes where they may be, with the line and column of a mistake; a 300 MB file in about 0.2 s), sort the rows by the caret's column (numbers and dates by value, the header row staying on top, rows with line breaks in quotes kept whole), and the column's name in the status bar.
- JSON and XML: format (pretty-print), minify and check, also for JSON Lines; a path bar showing where the caret
is (
data › [1203] › name,catalog › book[3] › title; copy it as a JSON path or XPath), a structure panel to browse objects, arrays and elements, fast on huge files, and Go to line takes a path too (data[1203].name,/catalog/book[3]/title). - Print (Ctrl+P): the file or the selection, in its colors (or black), with line numbers and the file's name and page numbers (each can be left out); long lines go on in the next row, breaking between words. Print preview shows the pages as they'll print, and Page setup the paper and margins. Microsoft Print to PDF (Windows) and Print to File (Linux) make a PDF.
- Characters you can't see are shown: control characters as symbols (␀, ␛…), zero-width ones and a byte order mark
inside the text as ▯, the bidirectional controls of the "Trojan Source" trick as ⇄ (they don't reorder the text on
screen); Show whitespace marks non-breaking and other look-alike spaces. View → Character at the caret says
what one is (
é U+00E9 · UTF-8: C3 A9). - From a command line:
slate notes.txt:120opens a file at a line,slate --read-only fileopens it read only,slate --wait filereturns once its tab is closed (git config --global core.editor "slate --wait"), andsome-command | slate -opens what it prints in a new tab. - Go to line, word wrap, line numbers, show whitespace, the matching bracket highlighted, overtype, zoom, dark and light themes (follows Windows, or switch with the sun/moon button). With Windows' high contrast on, Slate uses its colors, and Magnifier follows the text cursor.
- Tabs in the title bar, as in Windows 11's Notepad (View → Tabs in the title bar puts them back under it). Reopen closed tabs (Ctrl+Shift+T), close the other, the saved or all tabs, and a list of all tabs when they don't fit. The files opened last are on the taskbar button's menu (on Linux, in the desktop's recent files). The status bar counts words and characters, and shows the language, line endings, encoding and indentation: click one to change it.
- Detects and keeps the encoding (UTF-8, UTF-8 with BOM, UTF-16, ANSI) and line endings (CRLF / LF). Saving as ANSI asks first if some characters would turn into "?".
- Notices when another program changes an open file; reloads it automatically when you have no unsaved changes (handy for log files).
- A single small
Slate.exethat runs from any folder. Help → Open files with Slate… adds it to "Open with", the Start menu and the right-click menu; Help → Stop opening files with Slate… takes that back. Scripts that Windows runs when they're double-clicked (.bat,.cmd,.vbs,.js,.reg,.py…) are left alone: open them with Edit with Slate on the right-click menu. - Keeps itself up to date: at most once a day it asks GitHub for the latest release, and when there's a newer one
an Update button appears in the status bar. One click downloads it, checks it against the release's checksum
(and, from 0.8.1, that it's signed by the same publisher) and restarts Slate with your tabs (and their unsaved
text) back where they were. If the new version can't start, the old one comes back by itself. Help → Check for
updates… does it on demand. (On Linux,
aptkeeps Slate up to date.) When Windows restarts for an update, Slate opens again with its tabs, as Notepad does (with Restart apps on in Windows' sign-in options). - Screen readers on Windows (Narrator, NVDA, JAWS) read the text through UI Automation: the line, word or character at the cursor as it moves, the selection and edits, and the tab's name when another tab gets the keyboard; huge files too. Not yet: the tab strip, status bar and menu bar, and Linux (Orca) (docs/ROADMAP.md).
The usual ones work as in Notepad (Ctrl+N, O, S, F, H, G, Z, Y, A, X, C, V), plus:
| Keys | |
|---|---|
| Ctrl+W / Ctrl+Shift+T | Close tab / reopen the tab closed last |
| Ctrl+Tab, Ctrl+1 … Ctrl+9 | Next tab, go to a tab |
| Ctrl+Alt+S | Save all |
| Ctrl+P | |
| Ctrl+D / Ctrl+Shift+K | Duplicate / delete the line |
| Alt+Up / Alt+Down | Move the line up / down |
| Alt+drag, Shift+Alt+arrows | Column selection |
| Ctrl+/ | Toggle comment |
| Ctrl+U / Ctrl+Shift+U | lowercase / UPPERCASE |
| Shift+Alt+F | Format JSON or XML |
| F3 / Shift+F3 | Next / previous match |
| Alt+L | Show only the lines with a match |
| Alt+S (in the find box) | Find in selection |
| Alt+A (in the find box) | Next / previous match through all open tabs |
| Alt+H (in the find box) | Highlight the search in every tab |
| Ctrl+F2 / F2 / Shift+F2 | Bookmark the line / next / previous bookmark |
| Alt+Z | Word wrap |
| Ctrl+Plus / Ctrl+Minus / Ctrl+0 | Zoom in / out / reset |
| Ctrl+Shift+O | JSON and XML structure panel |
| Insert | Overtype on / off |
| F5 | Insert the time and date |
Help → Keyboard shortcuts lists them all. On Linux, Alt+1 … Alt+9 go to a tab too.
Get Slate.exe from the latest release and run it from
any folder. It needs 64-bit Windows 10 or 11. Slate.exe --install sets it up for your account without asking
anything (what Help → Open files with Slate… does, for scripts and package managers).
Slate.exe is code-signed (publisher: James Cupps, through Microsoft's Artifact Signing) since 0.8.0. While the
certificate is new, Windows' SmartScreen may still show "Windows protected your PC" the first time; choose More
info → Run anyway. Each release lists the SHA-256 of Slate.exe (in Slate.exe.sha256) if you want to check
the download.
Slate runs on 64-bit Linux with GTK 4.8 or newer: Debian 12, Raspberry Pi OS 12 (Bookworm, on a Raspberry Pi 4 or 5), Ubuntu 24.04 and newer, or similar. To install it, run this line in a terminal; it gets the package for your computer from the latest release (into a new temporary file of your own) and installs it only if that worked:
f=$(mktemp --suffix=.deb) && wget -O "$f" https://github.com/jamesccupps/Slate/releases/latest/download/slate-linux-$(dpkg --print-architecture).deb && chmod 644 "$f" && sudo apt install "$f"
Slate is built for 64-bit systems only (amd64 and arm64): on 32-bit Raspberry Pi OS (dpkg --print-architecture
says armhf) the download stops with "404 Not Found".
Or add Slate's apt repository yourself and install it by name, like any other package:
sudo wget -O /usr/share/keyrings/slate-archive-keyring.gpg https://jamesccupps.github.io/Slate/apt/slate-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/slate-archive-keyring.gpg] https://jamesccupps.github.io/Slate/apt stable main" | sudo tee /etc/apt/sources.list.d/slate.list
sudo apt update && sudo apt install slate
Slate is then in the menu (Accessories), opens files from the file manager, and slate notes.txt opens a file from
a terminal; Help → Open files with Slate… makes it the app that opens text, Markdown, CSV, JSON, XML, YAML, log
and code files when they're double-clicked. The package also adds Slate's own apt repository (signed; /etc/apt/sources.list.d/slate.list), so
sudo apt upgrade keeps Slate up to date along with the rest of the system; removing Slate removes that too. The
latest release also has the packages to download yourself
(slate-linux-arm64.deb for 64-bit ARM like the Pi, slate-linux-amd64.deb for PCs; install one with
sudo apt install ./slate-linux-arm64.deb) and .tar.gz files with the same program to run without installing
(those don't update). Its settings, session and crash.log are in ~/.local/share/slate.
The Linux version has the same engine, file handling, colors, find and replace, line tools, JSON/XML tools, menus and status bar as on Windows, in a GTK window, and follows the desktop's light or dark style as it changes. Not on Linux yet:
- high contrast;
- keeping unsaved changes to documents over 64 MB between runs (closing asks about them instead);
- screen readers (Orca) and crash dumps (
crash.logonly).
- Settings, the session (open tabs and unsaved text) and
crash.logare in%LOCALAPPDATA%\Slate Text Editor(Help → Open settings folder; on Linux~/.local/share/slate; Slate 0.15 and older kept them in%LOCALAPPDATA%\Slate, and moves them by itself). File → Restore last session turns the session off: closing then asks about unsaved changes, like Notepad used to. - Portable mode: put an empty file named
Slate.portablenext toSlate.exe, and Slate keeps all of that, and its temporary files, in adatafolder beside it instead (handy on a USB stick or a fast drive). - Slate running as administrator keeps its own session, apart from the normal one.
The update check is one request to api.github.com for the latest release of this repository; it sends nothing
about you or your files. Turn it off with Help → Check for updates automatically. Slate doesn't send anything
else anywhere. If it crashes, it writes crash.log (and on Windows a small crash dump) in its settings folder, and
only there; Help → Report a problem… opens a GitHub issue form with the version filled in, which you can
edit and send yourself, attaching those files if you like.
To keep Slate but stop it opening files when they're double-clicked: Help → Stop opening files with Slate…; the
file types you set to open with Slate go back to Windows' own choice. To remove it: if you used Open files with
Slate… (or winget), Windows Settings → Apps → Installed apps → Slate → Uninstall removes it. Otherwise just delete
Slate.exe. Your settings and unsaved text stay in %LOCALAPPDATA%\Slate Text Editor (or the portable data folder): delete
that too if you don't need them any more. On Linux: sudo apt remove slate.
MIT: see LICENSE. The libraries built into Slate.exe are listed, with their licenses, in
THIRD-PARTY-NOTICES.md.
Windows: needs Rust (the GNU toolchain is enough; no Visual Studio). Run build.cmd, which produces
dist\Slate.exe. Linux: Rust and GTK 4's development files (sudo apt install build-essential libgtk-4-dev), then
cargo build --release (target/release/Slate); packaging/linux/package.sh makes the .deb.
cargo test --lib runs the unit tests, and Slate.exe --test tests\smoke.txt drives the real app in a hidden
window (set SLATE_DATA_DIR to an empty folder first: the smoke test writes a session there and reads it back).
GitHub Actions builds and tests every push to main, every pull request and every version tag, for Windows and for
Linux on x86-64 and ARM64 (on Debian 12, under Xvfb:
tests/smoke-linux.txt); a version tag (v1.2.3) drafts a release with Slate.exe, Slate.exe.sha256 and the
Linux packages attached. What's planned is in docs/ROADMAP.md.

