What it removes and what it leaves alone
The rule is simple and worth stating exactly. A line is removed if it contains nothing at all, or nothing but whitespace. Everything else stays. That whitespace clause is the part that matters in practice, because a line holding two spaces looks empty in an editor but is not empty to a naive filter, and those are exactly the lines that survive a copy from a PDF or a web page and then break a script downstream.
Lines that are kept are kept verbatim. Leading indentation, trailing spaces, and the content itself are all preserved, because trimming is a different job and doing it silently here would surprise anyone pasting indented code or a padded fixed-width record.
Line endings are normalized first. Windows carriage-return-newline pairs and lone carriage returns from very old Mac files are both converted to plain newlines before the filter runs, so a file that mixes conventions is handled correctly and the output ends up consistent.
- Empty and whitespace-only lines both go
- Surviving lines keep their indentation and trailing spaces
- Mixed line endings are normalized to newlines
The jobs this actually solves
Text copied out of a PDF is the most common case. PDF text extraction interleaves blank lines wherever the layout had vertical space, so a two-page extract arrives with every other line empty. Stripping them turns it back into something readable, and into something a script can iterate over without special-casing.
Cleaning up a list is the second. Exports from spreadsheets, address books, and form builders frequently carry trailing blank lines, or gaps left where a deleted row used to be. A list that feeds an import, a mail merge, or a command-line loop usually needs those gone before it works.
The third is preparing text for a diff or a word count. Blank lines inflate line counts and add noise to a comparison, so removing them from both sides first makes a diff show the changes you care about rather than the whitespace churn.
What this tool deliberately does not do
It removes all blank lines rather than collapsing runs. There is no option to keep one blank line between paragraphs, so running prose through it will fuse paragraphs into a single wall of text. That is the right behavior for lists and data and the wrong behavior for an article, and the fix is to know which one you have before you paste.
It does not trim the lines it keeps, does not remove duplicates, and does not sort. Each of those is a separate operation with its own consequences, and combining them into one button makes the result harder to predict. Duplicate removal in particular has its own tool, which reports how many duplicates it dropped.
Everything happens locally. The text sits in the browser tab, the filter runs there, and the copy or download comes from memory. The only network request is a usage count carrying the tool name, never the content.
- All blank lines go; there is no collapse-to-one mode
- No trimming, no deduplication, no sorting
- The text never leaves the browser tab