About this site, and how to check it
What it is
LineBreaks is a set of line-break tools that run entirely in your browser. There is no server, no account, no upload and no logging. The thing that distinguishes it from the several dozen other tools with the same name is not the transformation — that is a hundred lines of code — but the insistence that you can see what your text actually contains, and that every table on the site can be checked.
Three kinds of number, kept apart
The site publishes a lot of tables. They are not all the same kind of thing, and the difference matters more than the contents.
- Generated. Produced by calling the tool while the page is being built. The 8-character comparison table on the front page, the nine regex patterns and their outputs, the 20-row whitespace inventory, the 48-word hyphen corpus, the CSV record counts and the byte-level conversion table are all this kind. They cannot describe behaviour the tool does not have, because they are the behaviour.
- Measured. Read back from files this project actually wrote. That is one
table of 11 writers and one of 6 git configurations,
both on the CRLF vs LF page, both produced by
scripts/measure.mjs, which writes the data module the page renders so that no figure is ever transcribed by hand. - Quoted. Definitions and rules taken from a published document that was opened directly. Those are listed below, with how each was obtained.
Nothing on the site is a fourth kind — an estimate, an average over a corpus you cannot see, or a figure recycled from another site. Where a number could not be produced honestly, the page says so and leaves the gap open.
Sources, and how each was obtained
| What it establishes | Where | How it was obtained |
|---|---|---|
| The set of characters Unicode treats as newline functions (LF, VT, FF, CR, CRLF, NEL, LS, PS) | The Unicode Standard 16.0.0, core specification, chapter 5, section 5.8 "Newline Guidelines" | unicode.org publishes the core specification free; read directly from the publisher |
| The names LINE FEED, CARRIAGE RETURN, NEXT LINE and CHARACTER TABULATION, and their status as aliases rather than names | Unicode Character Database, NameAliases-17.0.0.txt | plain-text UCD file on unicode.org; read directly from the publisher |
| The names LINE SEPARATOR (U+2028) and PARAGRAPH SEPARATOR (U+2029) | The Unicode Standard 16.0.0, core specification, section 5.8 | read directly; the section names both characters in full |
| NO-BREAK SPACE (U+00A0) as "the nonbreaking counterpart of U+0020 SPACE… same width, but behaves differently for line breaking" | The Unicode Standard 16.0.0, core specification, chapter 6 | read directly from the publisher |
| The names of the seventeen Zs space characters, and of ZERO WIDTH SPACE, ZERO WIDTH NO-BREAK SPACE, SOFT HYPHEN and HYPHEN | The Unicode Utilities set browser on util.unicode.org, queried for [:Zs:] and for the four named characters | a tool published by the Unicode Consortium itself; read directly. Its count of seventeen Zs characters matches this project’s own scan of the Basic Multilingual Plane, which is a useful independent check on both |
| The platform newline conventions (MacOS 9 CR, MacOS X LF, Unix LF, Windows CRLF, EBCDIC NEL) | The Unicode Standard 16.0.0, core specification, §5.8, Table 5-2 | read directly; reproduced on /crlf-vs-lf/ as published |
| CRLF as the CSV record separator, and the rule that a field containing a line break must be quoted | RFC 4180, "Common Format and MIME Type for Comma-Separated Values (CSV) Files", rules 1 and 6 | rfc-editor.org, free; read directly |
| That HTTP/1.1 terminates its start-line and every header field line with CRLF | RFC 9112, "HTTP/1.1", section 2.1, whose ABNF reads HTTP-message = start-line CRLF *( field-line CRLF ) CRLF [ message-body ] | rfc-editor.org, free; read directly |
| The behaviour of core.autocrlf, core.eol and core.safecrlf | The git-config documentation bundled with Git for Windows 2.51.0 | read directly from the documentation shipped inside the installed Git distribution, then verified by measurement (see /crlf-vs-lf/) |
| That Excel for the web supports only CHAR(9), CHAR(10), CHAR(13) and CHAR(32) and above | Microsoft's support page for the CHAR function | read directly; note that the page gives no line-break example, and Excel itself was not available to test here |
Two absences are deliberate. The ISO 32000 PDF specification is not cited anywhere, because the ISO edition is paywalled and we did not read the free reprint Adobe publishes either; the paragraph on the PDF page explaining why PDF text has hard line breaks is therefore marked as background, and nothing in it is quoted from the specification. And the mechanical origin of CRLF — the carriage-return-then-line-feed teleprinter story — is presented on the CRLF page as the received explanation, because the Unicode newline section that was opened describes the platform conventions without saying where they came from.
The measurement environment
Everything in the measured category came off one machine, on one day, and a line ending is a property of the program and the platform together. The environment is recorded with the data and reprinted next to every table that uses it:
| Operating system | Windows_NT 10.0.26200 (x64) |
|---|---|
| Node | v22.20.0 |
| Python | Python 3.11.9 |
| PowerShell | 7.6.3 |
| Git | git version 2.51.0.windows.1 |
| Platform line ending | 0D 0A |
| Measured | 2026-08-14 |
| Runs per writer | 5, byte-identical on every run |
Each writer was run 5 times because a figure published from a single observation is not a measurement. These particular outputs are deterministic, so what the repetition establishes is stability — there is no median with a spread to report, and that is what the tables claim, in those words. On macOS or Linux several rows would read differently, and none of them describes any other version of the same tool.
What could not be measured
The obvious version of this site would carry a table of "which line-ending character each application puts in your clipboard". It does not, because that table could not be produced honestly here. These applications were unavailable:
- Microsoft Word — we had no copy of Word to test against.
- Microsoft Excel — we had no copy of Excel to test against.
- Google Docs / Sheets — it runs inside a browser, and we had no way to drive it and capture what it produced.
- Adobe Acrobat / PDF viewers — we had no PDF viewer here, and no way to read back what one puts on the clipboard.
- Windows Notepad — it has no scripting interface, so its output could not be captured automatically.
- macOS and Linux tooling — we had no second operating system to run them on.
The rows stay unwritten. What the site ships in their place is the instrument. The Show invisible characters toggle tells you what your paste contains, from your application, on your machine — which is a better answer than a table about somebody else's setup, and it is the reason the toggle exists at all.
Check it yourself, cell by cell
- The comparison tables. Take any cell, paste the input into the tool, select the mode named in the column header, and read the result. They will match, because the cell was produced by that call.
- The regex table. Open your browser's console, paste the pattern and the input, and look at the output. The patterns are real code, not paraphrases.
- The git table. Run the three settings in a scratch repository and read
the blob with
git cat-file. That is exactly what the measurement script does. - The hyphen score. Both word lists are printed in full, so your argument is with named words. There is no percentage standing in for them.
- The quotes. Every source above is free to read except where the table says otherwise. Follow them.
Privacy, in one line
Your text never leaves your browser. That is a structural fact and not something you have to take on trust: the site is a set of static files, so there is no address to send it to. The only thing that travels the other way is a file you save yourself. The privacy page spells out the rest, including third-party advertising cookies if and when ads are ever enabled.
Corrections
If a cell is wrong, it is wrong in the code that generated it, which makes it worth reporting and quick to fix. The contact page has the address. A report that names the input, the mode and the output you expected is one that can be turned into a test.