DedupeLines
By the DedupeLines engineering team · Published 2026-05-16 · Updated 2026-05-17 · 8 min read · release

Introducing DedupeLines — a browser-local line cleaner

DedupeLines is a focused toolbox for cleaning line-oriented text — emails, SKUs, URLs, log lines, CSV columns — without ever uploading them. The whole engine runs in your browser tab. Pull the Ethernet cable after the page loads and every tool still works.

This post is the v1.0 launch note: why we built it, what shipped, and where it sits next to the existing PDF-converter-shaped industry. If you just want the tool, open the homepage.

Why a browser-local deduper

Every data person has hit the same wall:

That last one is the killer. Most “dedupe online” tools work by accepting your file on a backend. For a personal todo list that’s fine. For a B2B exported customer list, an internal SKU set, or a production log dump, that’s a compliance conversation you don’t want to have.

DedupeLines runs 100% in the browser tab. There is no server endpoint that accepts your text. Open DevTools → Network, paste 80 MB of input, click Run, and watch: not a single new request fires. The engine ships as a static /static/js/dedupe.js file (no minify, no source map needed) and runs as a Web Worker for any input above 2 MB or 100K lines.

What ships in v1.0

Six tools, all sharing the same engine, all browser-local, all free:

Plus the toolbox is shipped in 6 languages (English, Deutsch, Español, Français, 日本語, 中文) so the tools themselves are accessible in your team’s native language. (This blog stays English — see “What we deliberately don’t do” below for why.)

How the engine works

The whole thing is one file: dedupe.js. Roughly 350 lines of vanilla JavaScript. Same engine handles dedupe, frequency counting, regex line filtering, reverse, shuffle, blank-line removal, trim, and line numbering — selected via a mode option.

The dedupe path is an O(n) hash table built on a prototype-free Object.create(null) map. Total complexity is O(n + u log u + s log s) where n = input lines, u = unique lines, s = output length. On a 2024 M3 MacBook Air it processes 100K lines in ~380 ms.

For inputs above 2 MB (or 100K lines) on desktop, or 300 KB (5K lines) on mobile, the tool skips the <textarea> entirely (browser native word-wrap is O(n) on insert and locks the tab on multi-megabyte text) and routes processing to a Web Worker. The result downloads as .txt instead of rendering inline. The hard ceiling is 80 MB per run — large enough for a multi-million-row log, conservative enough that a stray gigabyte input doesn’t crash the tab.

How it compares to existing tools

The closest comparisons:

What we won’t do

Where this is going

The shortlist for the next few months:

What we are deliberately not adding: an account system, a paid tier, or anything that asks you to upload your data. If you need to pipe data through this engine programmatically, the source is right there — /static/js/dedupe.js — fork it.

Get involved

Bug reports, feature suggestions, blog topic requests, translation corrections, or just a hello: [email protected].

Frequently asked questions

Is DedupeLines really free, with no signup or paid tier?

Yes. Six tools, six languages, no account system, no “upgrade for more” gate. Operating costs are covered by anonymous display advertising (Google AdSense, when enabled) and keeping the infrastructure as simple as a static HTML/JS site behind a CDN. We chose ads over a paid tier because we want everyone — including students, hobbyists, and people doing one-off list cleanups — to use the full toolbox without a signup wall. Your text never reaches the ad network; the ads target page content and country, not your input.

Can I use DedupeLines offline?

Mostly yes. Load the homepage once with a connection, then disconnect — every tool still works for the rest of the session. The browser holds the JavaScript engine and the CSS in memory. Closing the tab loses the offline state; reopening with no connection won’t load the page. We don’t ship a service worker for full PWA offline-first behaviour, but it’s on the shortlist if there’s real demand.

How does DedupeLines compare to SmallPDF or iLovePDF for text files?

Different categories — SmallPDF and iLovePDF are PDF utilities, not line-of-text utilities. The relevant comparison is the architecture: both upload your file to a server, process it there, then return a download. DedupeLines never has an upload step. If your input contains anything you wouldn’t willingly hand to a third-party SaaS (customer lists, internal SKUs, raw logs), the architectural difference matters more than the feature comparison.

What languages does DedupeLines support?

The tools and homepage ship in English, Deutsch, Español, Français, 日本語, and 中文. Six languages, full UI localisation. The blog (this one and the others on /updates) is English-only by design — small tool sites overwhelmingly do this because per-language blog maintenance scales badly and the ROI on translating engineering blog posts is low.

Where can I read the engine source?

It ships as plain JavaScript at /static/js/dedupe.js. No minifier, no source map. We’ve also written a walkthrough of how it works: Six tools, one engine — a tour of dedupe.js.

Related guides

The fastest way to see what this is about: paste a list, hit Run, copy the output back. No upload, no signup, ~380 ms for 100K lines.

Open the tool