macOS · private beta
A Mac text editor with everything you need and nothing in your way.
Volt is a macOS text editor for the work you do every day. It opens instantly, keeps out of the way, and never loses what you typed — and it does everything you would leave your current editor for: 119 languages, project-wide search and replace, Git, language servers, multiple cursors, split view.
The same design that makes it quiet makes it quick. A small file is simply read; past a size you set, it is not read at all — so a 4.23 GB log of 50.4 million lines opens in two milliseconds, on a few megabytes. And the files nothing else will open, it opens too.
Get the beta
One email when the next round of invitations goes out. Then one question: what should we build next?
Speed
Measured, not claimed
One file, one machine, one release build: a 4.23 GB web log of 50.4 million
lines on an M-series Mac. Every number below comes out of
Volt --benchmark, which you can run on your own file. Opening does no
work you did not ask for, which is why the fans stay out of it.
| Operation | Time | What it does |
|---|---|---|
| Open the file | 2 ms | Settle the character set and the line ending |
| Read a random line | 41 µs | Line 40 million as quickly as line 40 |
| First regex match | 12 ms | Never over a decoded copy of the file |
| Count every line exactly | 0.2 s | Only when something asks for the total |
| Literal search, needle present | 1.50 s | 2.8 GB/s |
| Literal search, needle absent | 0.52 s | 8.1 GB/s, without decoding any of it |
| Memory while it is open | a few MB | For a file of 4.23 GB |
For comparison, rg -F -j 1 on the same file and machine takes 1.55 s and
0.69 s. Volt is in the same class as a dedicated search tool — and it keeps what it
learned about the file afterwards, so every later jump, search and scroll is instant.
Powerful, and small
Everything a big editor does. None of what makes one big.
Editors usually pick a side. The capable ones arrive as a browser in a trench coat: hundreds of megabytes, a runtime to install, a plugin tree to maintain, a gigabyte of memory before you have opened anything. The small ones are viewers. Volt is one binary of about six megabytes that does the lot.
What it has
- 119 languages highlighted, folded and outlined — the whole list
- 219 character sets, 62 EBCDIC code pages, nine line endings
- Editing together through iCloud Drive, with who changed what marked
- Files on other machines, opened and saved over the ssh you already have
- Language servers, linters and formatters, per language
- Git change bars, blame, and a diff against any revision
- Multiple cursors, Vim mode, block edit, split view, a minimap
- Structural and regular-expression search and replace, project-wide
- A hex editor, record fields, and compressed files opened as text
- Five themes, a theme editor, and languages you can add yourself
- Asked for, then built — the beta moves quickly and the waitlist sets the order
What it does not carry
- No Electron, and no browser engine wrapped around a text box
- No Java runtime to install before it will start
- No
node_modules, and no package manager behind it - No plugin system — a language or a theme is a file you drop in
- No account, no sign-in, no licence server to reach
- No telemetry: it does not phone home, ever
- No third-party code at all — Swift and the system frameworks
- No gigabyte of RAM to hold a file you only wanted one line of
- No server of its own — sharing goes through your iCloud Drive, remote files through your ssh
- No SSH library of its own — it drives the ssh macOS already ships
- No crash reporter and no usage statistics sent anywhere
Six megabytes, one core, a few megabytes of memory — for a file of 4.23 GB. Lean is not a feature it lost; it is why it is quick. How that compares with BBEdit, Sublime Text, VS Code and Vim — including where Volt is the wrong choice.
Legacy and mainframe
It opens what other editors will not
Most editors read one shape of file: UTF-8, LF, one line at a time. The files that actually arrive — from a mainframe, a Windows box in 1998, a word processor, a language model — are not always that shape. Volt reads them as they are and writes them back as they were.
Files off a mainframe
Fifty-eight national pages and four Japanese ones that mix single- and double-byte characters, every one read and written. A Western page is recognised from the language in it; Greek, Cyrillic, Arabic and Hebrew look like ordinary ASCII words, so those you pick.
Files with no lines in them
IBM variable-length records with a four-byte descriptor, and 80- or 132-column punch-card records with nothing between them, become lines when they open. The padding goes back to the card it came from.
The columns a copybook defined
Give the widths the way a copybook writes them — 3 15 10 20 — and a hairline
rules every boundary, or let Volt find them from the gaps. Name the fields, export them as
CSV, and have the layout remembered for tomorrow night's extract.
The bytes themselves, and editable
A hex editor beside the text, not instead of it. Type hex digits and the bytes go in; select, paste, overwrite in place; and undo is the document's own, so a change made in the bytes comes back out with ⌘Z like any other.
Compressed files, as text
A .gz opens as the text inside it and saves as a .gz again.
nginx.conf.gz is highlighted as an nginx configuration and a rotated
access.log.1.gz as a log — no unpacking on the command line first.
Codes older than the byte
IBM 1401 BCD, CDC Display Code, UNIVAC Fieldata, DEC SIXBIT, GOST 10859 — sixteen six-bit codes from the tapes of the fifties and sixties — and MARC-8, which library catalogues still exchange records in.
NEL, LS, PS, VT, FF, LFCR
Beside LF, CRLF and CR. A file separated by U+2028 or by a bare CR has no 0x0A in it at all, and used to open as one line several megabytes long.
Detection that explains itself
UTF-8, 16 and 32, every ISO-8859 part, the Windows, DOS and classic Mac pages, Chinese, Japanese and Korean in every wrapping, and the corners — VISCII, KOI8-T, ARMSCII-8. The common ones are detected on opening and the status bar says which and why; the rest you pick, and picking one asks whether to re-read the bytes or convert on save.
00000000 56 6f 6c 74 20 6f 70 65 |Volt ope|00000008 6e 73 20 61 20 34 2e 32 |ns a 4.2|00000010 33 20 47 42 20 6c 6f 67 |3 GB log|00000018 20 69 6e 20 32 20 6d 73 | in 2 ms|00000020 2e 0a |.. |
Two guides go further: EBCDIC on macOS — the sixty-two code pages, why the file opens as one long line, and how to write it back — and mainframe files on a Mac, on RDW records, fixed-width extracts and COBOL copybooks.
Every day
The editor you have open all day
The big files are the proof, not the point. Everything you would leave your current editor for is here, and none of it asks for your attention until you want it.
Highlighting, folding, outline
Swift, Rust, Go, Python and TypeScript; COBOL, RPG, JCL and ABAP; Terraform, Dockerfiles, GraphQL, nginx and crontabs; Mermaid, Typst and G-code. Templates are read as two languages at once — the whole list.
Regex, project-wide, kept
Literal and regular expressions over a project or files larger than RAM; many replacements in one pass; only the lines that match; searches saved and on every Mac you own.
Find code by its shape
print(:[what]) finds every call to print, whatever its arguments, and
if (:[cond]) { :[body] } finds the whole statement. Brackets inside a string
or a comment are not counted, and the replacement puts back what each hole caught.
Multiple cursors, block edit, splits
⌥-click and ⌥-drag, one undo step for a batch, rectangular selection, two panes on one document, twenty-seven text commands, and every one of them bindable.
For the hands that know it
Normal, Insert and Visual; counts, motions and text objects; registers, marks,
macros and . to repeat. It edits through the same document as everything
else, so undo is one history — and ⌘ still belongs to the menus.
The shape of the code, beside it
One row for every line, never squashed into a grey smear. Bookmarks and search hits are marked down its edges, and pointing at a row names the function it is inside.
Read a log like a log
Recognised by its lines, not its name. Times, levels, IPs and exceptions coloured; errors marked down the scroller; a stack trace kept with the error that threw it; Show Only Errors, and Go to Time 14:03.
The space bar, in the Finder
Press it on a mainframe extract, an 8-bit note or a record file and see the text — with the character set, the line endings and the record format named in the heading — instead of the wall of question marks the system shows.
EditorConfig, Git, a project report
The project's own rules win over personal settings. Change bars, blame and a diff of any revision beside the file — and a report of every file's character set and line ending, filtered to the seven that are not like the others.
LSP, linters, formatters, scripts
A language-server client, per-language linter and formatter commands, and ⌥⌘R to run the script you are editing — with a formatter of its own when none is installed.
Any font, and what it can do
Any typeface on the Mac, at any size and letter spacing, with the features the font carries — small capitals, old-style figures, alternates, the weight and width of a variable font.
Swift, and nothing bundled with it
A macOS application written in Swift, with no third-party dependencies: no Java runtime to install, no Electron, no copy of a browser inside the download. One binary of about six megabytes, built for Apple silicon.
Nothing lost
Type it once. It is still there.
Quitting never asks. Closing a window never asks. Nothing you typed is written to the file until you save it, and nothing you typed is thrown away because you did something ordinary. The only way to lose text is to answer Don't Save — because that is somebody saying so.
Come back to exactly what you left
A new file you have typed into and a file you have edited but not saved both come back as they were — the same window in front, the same tab selected. Quitting should not be a decision about your work, and a dialog asking whether to keep it is that decision in disguise.
The case that loses work everywhere else
A window closed with unsaved text in it took that text with it. Here it is set aside instead, and Recover Unsaved Documents lists what is waiting — for a week, or as long as you set.
A window that searches the text
They are nearly all called Untitled, so searching the names is useless. This searches what is in them, lists each match with the line it is on, and opens the preview at it. Beside every draft: which file it belongs to, when it was made, when it last changed, how big it is, and the first page of the text.
A big file is kept too
Work in a window that is still open is kept whatever its size and whatever the limits say. A limit is about a folder of old copies, never about the file being typed into. When the folder does have to shrink, the biggest drafts go first — losing one large draft is one loss, losing the hundred small ones it was worth is a hundred.
It notices, and says so
With nothing unsaved, a file changed on disk reloads by itself and keeps your caret and scroll position — a couple of milliseconds even at 4 GB. With unsaved changes it asks instead. And a draft written against a version of the file that no longer exists is marked as such, rather than quietly put back over somebody else's work.
Save when you walk away
Switching to another window, tab or application can write the file. Off by default, because writing somebody's file when they clicked elsewhere is a surprise — and when it is on it still refuses the cases that would go wrong: a document that has never been saved, a locked file, one that belongs to somebody else.
Together, and elsewhere
Edit a file with someone. Edit a file on a server.
Share a file in iCloud Drive and whoever you invite edits the same text on their Mac, with their changes arriving in your window as they save. Or open a file on a machine across the network, from here, and have ⌘S write it back there.
Invite someone into the file
File ▸ Share… on a file in iCloud Drive offers to edit it together. A file that is not in iCloud Drive yet is offered a move there first; one shared with you to read opens read only and still follows what its owner saves.
Their changes arrive; yours stay
What they save lands in the text on screen, your caret and selection stay by the same words, and the whole arrival is one step of Undo. Changes to different lines — or to different words of one line — are both kept.
Marked in the gutter, by name
Every line a merge brought in is marked down the gutter and the scroller, and resting the pointer on it says Changed by Anna at 10:42. The status bar says who has the file shared and who changed it last.
A save never writes over something newer
A shared file saves itself a moment after you stop typing. If somebody saved since your window last agreed with the file, their change is merged in first — and when two Macs saved at once, every place the versions differ is marked for you.
user@host:/etc/nginx.conf
File ▸ Open Remote… lists the server's directories as you type, and ⌘S writes the file
back. It uses the ssh already on your Mac, with your own keys and ~/.ssh/config;
a password is asked for once, and can be kept in your keychain.
Or send it from the server
Already logged in somewhere? rmate config.yml opens the file here, and
closing the window gives you your shell prompt back. The client ships with Volt — one
small script, nothing to install on the server but that.
A dropped connection loses nothing
A remote save either lands whole or leaves the file that was there — never half of the new one — and the file keeps its permissions. A remote window comes back tomorrow, with any unsaved work in it exactly as it was left.
Your searches, modes and snippets
Saved searches, language modes and snippets follow you through iCloud, each with a version and a date, so the regex you built on one Mac is waiting on the other.
Highlighting and themes
Colour that comes from a file you can edit
A hundred and nineteen languages, five themes in the box, and both of them plain text you can change. Pick one — the window below is drawn with the same colour values the editor ships.
// A theme is JSON. What you leave out is inherited.
import Foundation
struct Theme: Codable {
let name: String
let appearance: Appearance
var syntax: [Token: Colour] = [:]
@discardableResult func colour(for token: Token) -> Colour {
syntax[token] ?? appearance.fallback(token)
}
}
let paper = try Theme(named: "Paper") // 13 coloursFive themes ship: Light, Dark, Paper, Midnight and Coffee. The one you pick colours the whole window — title bar, gutter and sidebars, not only the text.
JSON, or a colour well
A theme is a .volttheme file: named colours in hex, and anything you
leave out inherited from light or dark. Or open the theme editor, which lays the
colour wells over a live editor showing real code, and save what you made.
Add one without waiting for a release
A language is a .voltmode file — keywords, comments, string
delimiters, indentation, folding, outline. Drop one in a folder and it is there.
Give it the id of a built-in language and it replaces it. No plugin system, no
signing, nothing to install.
Colour what matters in your files
A mode can carry regular expressions painted on top: an IP address in a log, the
name in a name = value pair, TODO inside a comment. A rule
can colour plain text or one named kind, so nothing can make a comment stop looking
like a comment.
Templates lex as what they hold
ERB, EEx, EJS and PHP-in-HTML: the page is read as a page and each
<% … %> island as the language inside it, over several lines if it
runs that far. The outline of a template is the outline of the language inside it.
No extension, no problem
A script called deploy is what its #! line says.
.zprofile is recognised by its whole name. .m is asked
whether it is Objective-C or MATLAB. T-SQL and PostgreSQL are told apart, and CSV
and TSV get a mode of their own.
Colour-blind palettes, and Increase Contrast
Light and Dark palettes built on the blue-against-orange axis, chosen by running candidates through deuteranopia, protanopia and tritanopia simulations — and the test suite fails the build if any pair stops being distinguishable. macOS's Increase Contrast is honoured the moment it is switched on.
A look inside
What it looks like when you are using it
Four of the places you will actually spend time. Nothing here is hidden behind a configuration file, and nothing needs one.
Questions
Questions people ask first
How can it open a 4 GB file instantly?
Because past a certain size it does not read the file at all. Under that size — 64 MB by default, and it is a setting — the file is simply read, which is faster than being clever about it. Above it, opening looks at about a megabyte, enough to settle the character set and the line ending, and everything after that is worked out on demand: scrolling, jumping to a line, editing. That is why the memory used for a 4.23 GB file is a few megabytes rather than 4.23 GB. The status bar says which of the two happened — in memory or mapped.
What happens to my unsaved work if I quit or close the window?
Nothing. Quitting never asks and never loses anything: a new file you typed into and a file you edited but did not save both come back exactly as you left them, in the same window and the same tab. Closing a single window — the case that loses text in most editors — sets the work aside instead, and Recover Unsaved Documents lists what is waiting, searchable by what is written in it rather than by a name that is always Untitled. The only way to throw text away is to answer Don't Save.
Can two people edit the same file?
Yes, through iCloud Drive. Share a file from File ▸ Share… and the people you invite edit it on their own Macs. What each of you saves arrives in the others' windows as it is saved: the changes are merged into the text on screen, your caret stays where it was, and every line somebody else changed is marked with who changed it and when. A save never writes over something newer — if the file changed since your window last agreed with it, that change is merged in first.
Can I edit files on a server?
Yes, two ways. File ▸ Open Remote… opens user@host:/path over the ssh already on your Mac, with your own keys and ssh configuration, lists directories as you type, and writes the file back on ⌘S. Or, from a shell on the server, rmate opens the file in Volt on your Mac. Either way a dropped connection leaves the file as it was, never half-written, and its permissions are kept.
Which macOS versions does it need?
macOS 13 or later, built natively for Apple silicon.
Is it a viewer or can I edit those files?
Edit. An insertion or a deletion is recorded against the file rather than rewritten into it, so typing a character into a 20 GB file costs the same as typing into a small one. Saving makes a single pass, converting the character set and the line endings on the way through.
What happens to a file it cannot fully understand?
It says so instead of guessing. Detection reports which character set it chose and on what evidence; a file with bidirectional controls in it warns you when it opens; a Greek EBCDIC file is never guessed at, because those bytes are indistinguishable from ordinary ASCII words — you pick the page and it reads perfectly.
Can I change the colours, or add a language?
Both, and both are plain text. A theme is a .volttheme file of named
colours; leave one out and it is inherited. A language is a .voltmode
file — keywords, comments, strings, indentation, folding, outline — and one that
takes a built-in language's id replaces it, which is how you add a keyword without
waiting for a release. There is a theme editor too, with a live preview that is a
real editor showing real code.
What is it built with, and how big is the download?
Swift and the system frameworks, with no third-party dependencies. There is no Java runtime to install, no Electron and no bundled browser engine — the whole application is one binary of about six megabytes, built for Apple silicon. That is most of why it starts instantly and leaves the fans alone.
Does it need anything installed to work?
No. Formatting, linting, language servers and Git each use an external tool when one is there and say plainly when it is not. A copy of Volt that may not start other programs at all still opens, edits, searches, highlights, folds, outlines and saves.
How much of it is tested?
Over 3,400 checks run on every build — reading, editing, encodings, search,
saving, and the user interface down to whether a settings pane's controls
line up. The suite is part of the binary: Volt --selftest.
When can I have it, and what will it cost?
It is in private beta now. Join the waitlist and you will be emailed when the next round of invitations goes out. Pricing is not settled; waitlist members hear about it first and are asked before it is.
Private beta
Join the beta
One email when invitations go out — then one question about what to build next. It takes about twenty seconds, and it is not a suggestion box: the beta moves quickly, and what people ask for is what gets built. Say what your editor will not open and it becomes the next thing that opens.




