How to merge mixed bullet styles to a single standard
- Step 1Load a document from the set — Paste the Markdown or upload a
.md,.mdx,.markdown, or.txtfile. The tool consolidates one document per run. - Step 2Accept the fixed `-` target — There is no marker option. Every unordered marker becomes
-. For a content-ops standard, a fixed target is the feature — it guarantees every file ends up identical in style. - Step 3Run the consolidation — Click Run. All marker styles collapse to
-(with ordered prefixes converted toN.) in one instant pass. - Step 4Review against your house style — Confirm every bullet is now
-. Spot-check that no inline*emphasis at a line start was caught, and that any roman-numeral ordinals you use were left for manual handling. - Step 5Copy or download, then repeat — Copy the consolidated Markdown back into the file or Download it, then move to the next document in the set.
- Step 6Batch a large set efficiently — For many files, merge them with md-merger, consolidate the combined file, then split back out with md-splitter.
Marker styles a sweep consolidates
Every unordered marker collapses to -; ordered prefixes get the . form. All matched only at a line start outside code fences.
| Author's marker | After consolidation | Where it usually comes from |
|---|---|---|
* item | - item | Writers who default to asterisk bullets |
+ item | - item | Less common, but in every large corpus |
• item / ▸ item | - item | Pasted from Google Docs, Word, or slide decks |
∙ item / · item / ◦ item | - item | Middle-dot and hollow-bullet glyphs from PDFs |
1) item | 1. item | AI drafts and migrated wikis (number preserved) |
a) item | a. item | Lettered outlines (literal swap — see edge cases) |
What a sweep leaves for manual review
Knowing the gaps keeps a content-ops cleanup honest — the tool consolidates markers, not structure.
| Case | Behaviour | Action for the content-ops lead |
|---|---|---|
| Ordered-list numbers | Kept verbatim — never resequenced | Renumber source by hand only if you want clean diffs |
| Indentation of nested bullets | Preserved exactly | Standardize indent in-editor if your style mandates it |
Roman/multi-letter ordinals (iv)) | Unchanged | Convert by hand or with editor find-replace |
| Existing extra blank lines | Kept | Use md-prettifier for whitespace reflow |
| Bullets inside code fences | Untouched | By design — keep code examples exact |
Cookbook
Consolidation fragments from real multi-author knowledge-base sweeps, showing exactly which markers collapse.
Four authors, one standard
A page assembled from four contributors mixes every ASCII marker plus a pasted glyph. The sweep collapses all of them to -.
Before: - Author A's item * Author B's item + Author C's item • Author D's pasted item After: - Author A's item - Author B's item - Author C's item - Author D's item
AI-draft prefixes normalized
An LLM-assisted section used 1) and •. Consolidation converts the numeric prefix to 1. and folds the glyph to -.
Before: Onboarding outline: 1) Send welcome email • Add to Slack 2) Schedule intro call After: Onboarding outline: 1. Send welcome email - Add to Slack 2. Schedule intro call
Glyphs from a pasted Google Doc
Bullets carried over from a Google Doc arrive as ▸ and ◦. The Unicode set is consolidated to -.
Before: ▸ Top priority ◦ Sub-task After: - Top priority - Sub-task
Code examples stay exact
A page documenting bullet syntax keeps its fenced example verbatim while the surrounding prose is consolidated.
Before and after (fence identical): Use a dash: \`\`\`markdown * keep this star \`\`\` - and consolidate this one
Ordered numbers are preserved, not resequenced
A list with gapped numbers keeps its gaps after the prefix is converted — the sweep does not renumber.
Before: 1) first 5) fifth 9) ninth After: 1. first 5. fifth 9. ninth
Edge cases and what actually happens
There is no choice of target marker
By designThe consolidation target is fixed at -. For a content-ops standard this is the point — a fixed, non-configurable target guarantees every file lands on the same style. If your house standard is *, run a find/replace afterward.
Ordered-list numbers are not resequenced
PreservedA 1) 5) 9) list becomes 1. 5. 9., keeping the gaps. The sweep converts the marker syntax but never renumbers. Renderers count by position, so the rendered list is still sequential.
Roman-numeral and multi-letter ordinals
PreservedOnly single-letter a) prefixes are converted. iv), ii), and ab) are left unchanged because the rule matches a single [a-zA-Z]. Convert these by hand during the sweep.
`a)` becomes `a.`, which is not true ordered Markdown
ExpectedMarkdown ordered lists are numeric only, so a. item typically renders as a paragraph, not a list. The literal a) → a. swap is what the rule does; convert lettered outlines to digits if you need ordered rendering.
Indentation is preserved across the sweep
PreservedMarkers are consolidated but leading whitespace is re-emitted unchanged. The tool does not standardize nested indentation; handle that separately in-editor if your style requires a fixed indent.
Extra blank lines are not removed
PreservedThe tool only inserts a blank line before a list that follows a paragraph; it never deletes blank lines. For document-wide whitespace cleanup, run the output through md-prettifier.
Inline `*` emphasis at line start
Possible changeA line starting * emphasized * will have its leading * rewritten to - . During a sweep, scan for emphasis that begins a line; mid-line emphasis is never affected.
Bullets inside fenced code blocks
PreservedCode examples using * or + as bullets are passed through verbatim, so documentation that teaches marker syntax stays accurate after the sweep.
How do I revert a sweep?
ManualThere is no undo inside the tool. The original file is never modified in place, and your version control (git) holds the prior state — revert there if a sweep produced something unexpected.
File over the tier character limit
RejectedInputs above the per-tier character cap (Free 500,000, Pro 5,000,000, Pro-media 20,000,000, Developer unlimited) are rejected. For a large knowledge base, split with md-splitter or use a higher tier.
Frequently asked questions
Will this damage code samples?
No. Triple-backtick fenced code blocks are detected and passed through verbatim, so any * or + bullets inside a code example stay exactly as written. Only prose outside fences is consolidated.
What about lists inside tables?
Table rows start with |, so a cell like | * item | never has a marker at the matched line-start position — it is left unchanged. Tables are effectively immune to the bullet rules, so a sweep will not touch list-like content inside table cells.
How do I revert if a sweep goes wrong?
There is no in-tool undo, but the tool never modifies your file in place — it produces new output you choose to copy or download. Keep your files in version control; a git checkout restores the prior state instantly.
Can I consolidate to `*` instead of `-`?
No. The target is fixed at - with no option to change it. For content ops this is a feature: a non-configurable target guarantees uniformity across every file. Run a find/replace afterward if your standard differs.
Does it renumber ordered lists during the sweep?
No. A 1) prefix becomes 1. but the original number is kept; gapped lists like 1) 5) 9) stay 1. 5. 9.. Renderers count by position, so the output renders sequentially regardless.
Does it standardize indentation too?
No. It consolidates the marker character but re-emits leading whitespace unchanged. If your house style mandates a fixed indent, standardize that separately in your editor.
Can I sweep a whole folder at once?
Not in one run — it processes one document at a time. For a batch, merge files with md-merger, consolidate the combined file, then split back out with md-splitter.
Will it catch a `*` I use for emphasis?
Only at the start of a line. Mid-line emphasis like text *word* text is never touched. During a sweep, just scan for any emphasis that begins a line.
Is the result the same every time?
Yes — the tool is zero-config and deterministic, so identical input always produces identical output. That is what makes a fleet-wide consistency sweep reviewable.
Is my content uploaded?
No. Processing runs entirely in the browser, so an entire internal knowledge base — including unpublished drafts — can be cleaned without anything leaving your machine.
What sizes and formats are supported?
Paste Markdown or upload .md, .mdx, .markdown, or .txt. The character cap is Free 500,000, Pro 5,000,000, Pro-media 20,000,000, Developer unlimited, with file-size caps of 1 MB / 10 MB / 50 MB / 500 MB.
What other tools help with a content-ops sweep?
Pair this with md-bold-italic-cleaner for emphasis consistency, md-prettifier for whitespace, md-table-repair for tables, and md-lint for a broader rule check.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.