TextBuddy documentation

A plain-text editor with a sidebar of one-shot fixes. Change case, sort and dedupe lines, tame whitespace, straighten or curl punctuation, find & replace, wrap text in tags, and drop in filler copy. Select a passage and any fix stays inside it. This page walks through how to use each one.

Installation

The download from bendansby.com/apps/textbuddy is a standard .dmg — open it and drag TextBuddy.app to your Applications folder. The store version installs and updates the usual way.

Requires macOS 13 Ventura or later, on Apple Silicon or Intel. The direct-download build auto-updates via Sparkle; you can also check anytime via the app menu's Check for Updates…. The store build updates through its own channel. The direct download comes with a free 7-day trial with every feature unlocked — after that, a one-time license (bought on its own or as part of the Surprisingly Useful bundle) keeps it going; the store build is paid once through the usual pipeline, with no separate key.

TextBuddy only reads and writes the files you drop on it or pick yourself. Nothing is uploaded — even the filler-text generator runs entirely offline.

The editor & the Tasks sidebar

TextBuddy is a single window. The middle is a plain-text editor — type, paste, or drop a text file onto it to get started. The header shows the filename, a dot when there are unsaved changes, and a live word / character / line count. The right-hand Tasks sidebar holds every one-shot fix, grouped into Find & Replace, Case, Lines, Whitespace, Punctuation, Wrap, and Generate, with Save buttons pinned to the bottom.

Every transform is a single button. Click it and the fix happens immediately — no dialog, no confirmation.

Whole document, or just the selection

This is the thing to internalize: if you have text selected, a transform only touches the selection. If nothing is selected, it acts on the whole document. A Selection badge appears in the header and the sidebar whenever you have text highlighted, so you always know which mode a button is about to run in. The header's word / character / line counts switch to counting the selection too.

Line-based tasks (sort, dedupe, number, and the rest) are smart about partial selections: if your highlight starts or ends mid-line, it grows out to whole lines first, so you never split a line in half. Character-level tasks (case, punctuation, find & replace) use your selection exactly as drawn.

Everything is undoable with the system undo (⌘Z) — and redoable with ⌘⇧Z. Typing and one-shot transforms share the same undo history, so you can freely experiment and step back. There's also an Undo button in the sidebar header.

Change case

Five case buttons, each applied to the selection or the whole document:

ButtonWhat it does
UPPERCASEEvery letter to capitals
lowercaseEvery letter to small
Title CaseCapitalize the first letter of each word
Sentence caseCapitalize the first letter of each sentence
tOGGLE cASEInvert each character — upper becomes lower and vice versa

Lines

Line operations treat your text as a list of lines. With a selection, they act on the lines your selection touches (expanded to whole lines); otherwise on the whole document.

ButtonWhat it does
Sort A→Z / Sort Z→AAlphabetize lines ascending or descending (locale-aware compare)
ReverseFlip the line order top-to-bottom
ShuffleRandomize the line order
Remove duplicatesDrop repeated lines, keeping the first occurrence of each
Remove blank linesDelete empty lines
Join linesCollapse every line into one, space-joined
Number linesPrefix each line with a right-aligned number
Number lines writes the numbers into your text — it's an edit you can save. That's different from the line-number gutter under View options, which is a display-only ruler that never changes the file.

Line tasks normalize Windows line endings to Unix on the way in: a file opened with CRLF line endings is rewritten LF-only the first time any line task runs on it.

Whitespace

Cleanup for the invisible characters that make text look ragged:

ButtonWhat it does
Trim trailingRemove spaces and tabs at the end of every line
Trim linesRemove whitespace from both ends of every line
Collapse blank linesRuns of blank lines become a single blank line
Collapse spacesRuns of two or more spaces become one
Tabs → SpacesConvert each tab to four spaces
Spaces → TabsConvert four spaces to a tab

Punctuation

Swap between typewriter and typographic punctuation:

ButtonWhat it does
Smart quotesStraight quotes " ' become curly " " ' ', context-aware about opening vs. closing
Straight quotesCurly quotes back to straight — the exact inverse
EllipsisThree dots ... become a single ellipsis character
Dashes-- and --- become an em dash

Smart quotes and straight quotes are a matched pair, so you can flip a document to typographic quotes for publishing and back to straight quotes for code or a plain-text export.

Wrap in tags

The Wrap section surrounds each unit of your text with an opening and closing tag. Pick the granularity — word, sentence, or paragraph — and supply the tag, and TextBuddy brackets each unit with it. Handy for turning a stack of paragraphs into <p>…</p> blocks, marking up list items, or quoting each line. Like the other transforms, it honours a selection when you have one.

Find & replace

Find & replace sits at the top of the sidebar. Type a term into Find, an optional replacement into Replace, and use the action row:

ControlWhat it does
NextJump to and highlight the next match, wrapping around at the end
ReplaceReplace the current match, then advance to the next
AllReplace every match at once
AaToggle case-sensitive matching on or off

A live match count sits alongside the fields. If text is selected, both the count and All stay inside that selection — a quick way to replace within a single paragraph or block without touching the rest of the file.

The floating pop-out window

⌘F focuses the inline Find field. When you need more room — searching or replacing across multiple lines — press ⇧⌘F (or click the pop-out button in the section header) to float Find & Replace out into its own window with multiline Find and Replace fields. Inside that window, ⌘↩ runs Replace All. The floating panel shares state with the sidebar and drives the same editor, so whichever surface you use, you're working on the same document.

Generate filler

The Generate section drops in placeholder copy — useful for mocking up a layout or padding out a draft. It works even on an empty document. Pick a count (1–9) and a unit (Words, Sentences, or Paragraphs), then:

ButtonWhat it does
InsertDrop a fresh block of filler at the cursor and start a session
ReplaceSwap the block you just inserted for a fresh generation
AddAppend another generation, growing the block

After you insert, the buttons become Replace and Add so you can dial the amount up or down until it looks right. As soon as you make any manual edit — typing, running a transform, or undoing — the session ends and the row goes back to Insert. Choosing the Words unit produces Title-Cased words with no punctuation, so it reads as a label or title; Sentences and Paragraphs get normal casing and punctuation.

The filler is generated locally by a small word model — plausible-looking prose, but not factual. There's no network call, so it works offline and nothing about your document leaves the Mac.

The file queue & Open Recent

Open several files at once — File → Open… (⌘O) is multi-select, and you can drop several files onto the window — and they load into a queue. A drawer appears down the left with a row per open document; click a row to switch to it. Only one document is active at a time. File → New (⌘N) adds a fresh Untitled document to the queue.

The queue always keeps at least one document: close the last one and it's replaced by a fresh Untitled.

Switching documents clears that document's undo history for this version — undo is per editing session, and moving away and back starts fresh. Save before you switch if you might want to step back later.

Opening the same file only once

TextBuddy won't open a file that's already in the queue a second time — asking for it again just brings the existing copy forward instead of creating a duplicate tab. That keeps you from accidentally editing two out-of-sync copies of the same file.

Open Recent

File → Open Recent lists the files you've opened lately (it also feeds the Dock menu). Clear Menu empties the list. The menu hides itself when there's nothing to show.

Turn on Show Menu Bar Icon in the app menu to get a TextBuddy icon in the menu bar. Clicking it drops down a small scratch pad — a throwaway text buffer, separate from your open documents, with a live word / character / line count and clusters of the Case, Punctuation, and Generate buttons.

It's for the quick one-off: paste a snippet from another app, fix its case or straighten its quotes, drop in a line of filler, and copy the result back — all without leaving whatever you were doing. The Generate cluster here includes a Copy Filler button that puts a fresh block straight on the clipboard. The scratch pad's contents are independent of your document queue and persist on their own.

View options

The View menu tunes how the editor looks — display only, none of it changes your file:

Workspace restore

TextBuddy remembers the files you had open. Quit with a few documents in the queue and they reopen on your next launch, so you pick up where you left off. Together with the unsaved-changes prompt below, it means you rarely have to think about setting the window back up.

Saving

Two buttons sit at the bottom of the sidebar:

Dirtiness is tracked by comparing content, not by a flag — so if you edit a document and then undo all the way back to how it was, the unsaved-changes dot disappears and Save disables again.

TextBuddy won't let you lose work by accident. Close a document with unsaved changes and you're prompted to Save, Cancel, or Don't Save. Quit with several unsaved documents and it offers to Review each one in turn, Discard everything, or Cancel the quit.

Languages

TextBuddy is localized into English, Deutsch, Español, Français, Italiano, 日本語, 한국어, Português (Brasil), Русский, and 简体中文. It picks the right language automatically based on your System Settings → General → Language & Region preferences.

To pin TextBuddy to a specific language without changing system preferences, open System Settings → General → Language & Region → Applications, click the + button, and pick TextBuddy.

Support

Questions or bug reports? Email ben.dansby@gmail.com and you'll get a reply, usually within a day or two. For privacy questions, see the privacy policy.