Bullet List Formatter – Turn Any Text Into a Clean List
Lists arrive broken. Meeting notes come back with half the lines already bulleted, a transcript has none at all, a spreadsheet column pastes in as one long comma-separated string, and a colleague's draft mixes *, - and 1. in the same block. The bullet list formatter normalises all of it: paste the text, choose what you want out, and every line comes back with the same marker, the same indentation and the same punctuation.
Strip first, then add
The order of operations is what separates this from a find-and-replace. Each line is measured for indentation, then any marker already present — a hyphen, asterisk, plus, bullet dot, arrow, check mark, a decimal index such as 3. or 3), an alphabetic c. or a Roman iii. — is removed before the new marker is attached. That is why re-formatting an already formatted list never produces - - item. The detection is deliberately conservative: a marker must be followed by whitespace or the end of the line, so a sentence beginning A cat sat keeps its first word instead of losing it to an imagined A. index.
Five modes for five jobs
Bullets puts one marker in front of every non-empty line — the everyday case for README files, tickets and slide notes. Numbered produces an ordered list in one of seven styles: 1., 1), (1), a., A), i. or I., starting from any index you like. Nested reads the leading spaces or tabs as list depth and re-emits them with a consistent indent and a different marker per level, which is how Markdown draws a sub-list. Split by delimiter turns one comma, semicolon, pipe, tab or custom-delimited line into one bullet per value. And Remove bullets runs the whole thing backwards, stripping markers and indentation to recover plain prose, optionally joined back into a single delimited line.
The cleanup pipeline
Between stripping and re-marking, each item passes through the options you enable: trim leading and trailing spaces, collapse runs of internal whitespace, drop blank lines, remove duplicates with a case-sensitivity toggle, and sort A→Z, Z→A, numerically, by length or randomly. Case conversion offers lowercase, UPPERCASE, Sentence case, Title Case with a stop-word list that leaves a, the, of and friends lowercase in the middle of an item, and a capitalise-first-letter pass that leaves the rest of the text alone.
Punctuation for specifications
Requirement documents, contracts and statutory lists follow a convention: every entry but the last two ends in a comma, the second-to-last ends in , and, and the final entry ends in a full stop. The end punctuation option applies exactly that pattern, with a semicolon variant for items that already contain commas, and a simpler mode that just puts a period on every line. Existing trailing punctuation is replaced rather than doubled.
Plain text, Markdown or HTML
The same list can leave in three shapes. Plain text keeps whatever marker you chose, including emoji. Markdown emits only what a renderer understands — -, *, + and decimal indexes — swapping anything else and saying so. HTML builds real <ul> and <ol> elements with child lists correctly nested inside their parent <li>, escaped and ready to paste into a CMS or an email template.
Everything stays local
Formatting is string processing, so it runs in your browser with no upload step. Notes, unreleased requirements and client material are safe to paste, files you drop on the page are read locally, and the share link carries your settings only. Statistics — items formatted, blanks and duplicates removed, markers stripped, nesting depth, word and character counts, byte size and the longest item — update as you type.