How to normalize markers in nested markdown lists
- Step 1Load the nested list — Paste the Markdown or upload a
.md,.mdx,.markdown, or.txtfile. One document per run. - Step 2Understand the scope before you run — This pass changes marker characters and adds a leading blank line. It will not re-indent your sub-lists. If the nesting itself is broken (inconsistent spaces), plan a manual indentation fix afterward.
- Step 3Run the fixer — Click Run. Markers at every level are normalized to
-(orN.for ordered children) in one instant pass. - Step 4Check the markers, then the indentation — First confirm every level now uses
-. Then, separately, eyeball the indentation — if a child still renders as plain text, the indentation, not the marker, is the problem. - Step 5Fix indentation in your editor — Use your editor's convert-tabs-to-spaces and a consistent 2-space indent to repair the nesting. List Fixer has already done the marker half of the job.
- Step 6Copy or download — Copy the marker-normalized Markdown back, or Download a new file. The original is never modified in place.
What changes at each nesting level
Marker normalization runs the same at every level. The indentation column shows what is preserved.
| Level input | Marker after | Indentation after |
|---|---|---|
- parent | - parent | Unchanged |
* child (2-space) | - child | 2-space — unchanged |
* child (3-space) | - child | 3-space — unchanged (NOT fixed to 2 or 4) |
\t+ child (tab) | \t- child | Tab — unchanged (NOT converted to spaces) |
1) child | 1. child | 2-space — unchanged, number preserved |
• child (glyph) | - child | 2-space — unchanged |
Indentation problems and where to fix them
These are the real causes of nested lists rendering as plain text. List Fixer addresses none of them — handle them in your editor.
| Indentation problem | List Fixer behaviour | How to actually fix it |
|---|---|---|
3-space child under a - parent | Marker normalized, 3-space kept | Re-indent to 2 or 4 spaces in your editor |
| Mixed tabs and spaces in one list | Markers normalized, mix kept | Convert tabs to spaces (editor: 'Convert Indentation to Spaces') |
| Child indented less than the parent marker width | Marker normalized, indent kept | Indent the child to align under the parent's content |
| Over-indented child (8 spaces) | Marker normalized, 8-space kept | Reduce to a consistent step (2 or 4 spaces per level) |
| Nesting inside a blockquote | >-prefixed lines are prose; markers after > may not be at line start | Edit blockquote-nested lists by hand |
Cookbook
Nested-list fragments showing exactly which part changes (the marker) and which does not (the indentation).
Markers normalized at both levels, indentation kept
A two-level list using * everywhere becomes - everywhere, with the original 2-space indentation preserved.
Before: * parent * child * child After: - parent - child - child
Irregular 3-space indent is preserved, not repaired
A child indented with 3 spaces gets its marker normalized but keeps the 3-space indent. If your parser needs 2 or 4, you still must fix the indentation.
Before: - parent * three-space child After: - parent - three-space child (indentation unchanged — still 3 spaces)
Tab-indented child keeps its tab
A child indented with a tab has its + marker normalized to -, but the tab is re-emitted exactly. The tool never converts tabs to spaces.
Before: - parent + tab child After: - parent - tab child (still a tab, not spaces)
Mixed-marker, mixed-depth list
A deeper list mixes glyphs and ASCII markers across levels. Every marker is normalized; every indentation is preserved as found.
Before:
• top
▸ second
* third (6 spaces)
After:
- top
- second
- third (6 spaces)
(6-space indent unchanged)Ordered children keep their numbers
A nested ordered sub-list written with 1) gets the . form, but the original numbers and indentation are untouched.
Before: - parent 1) first 2) second After: - parent 1. first 2. second
Edge cases and what actually happens
Irregular indentation is preserved, not repaired
PreservedA 3-space or 5-space child is re-emitted with the same indentation after its marker is normalized. The tool does not snap indentation to 2 or 4 spaces. If the nesting renders as plain text, fix the indentation in your editor — that is the real cause.
Tabs are never converted to spaces
PreservedA tab-indented child keeps its tab. The leading-whitespace capture re-emits whatever it found, tab or space. Use your editor's 'Convert Indentation to Spaces' command for consistent rendering across parsers.
Mixed tabs and spaces in one list
PreservedIf some children use tabs and others use spaces, the mix survives — each line keeps its own indentation. Markers are still normalized to -. Standardize the whitespace separately.
Child indented less than the parent marker width
PreservedA child that is not indented enough to nest under the parent will still render flat. The tool normalizes the marker but cannot infer that you meant it to nest, so it leaves the indentation as written.
Deeply nested lists
SupportedThere is no depth limit — every line is processed independently, so a four- or five-level list has its markers normalized at all levels. Indentation at each level is, as always, preserved.
Lists inside blockquotes
Possible no-opLines inside a blockquote start with >. A marker after > is not at the matched line-start position, so blockquote-nested list items may not be normalized. Edit lists inside blockquotes by hand.
Nested list inside a fenced code block
PreservedA nested-list example inside a triple-backtick fence is passed through verbatim — markers and indentation alike. This keeps documentation that demonstrates nesting accurate.
A `1)` numeric child keeps its number
PreservedOrdered children are converted from 1) to 1. but the original number is kept — no resequencing. Renderers count by position, so the rendered list is still 1, 2, 3.
Multi-letter ordinal child like `iv)`
PreservedOnly single-letter a) style children are converted. iv), ii), and similar are left unchanged because the rule matches a single [a-zA-Z] only.
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 before processing. Split a large reference with md-splitter.
Frequently asked questions
Does this tool repair broken nested-list indentation?
No, and that is the key thing to know. It normalizes the marker character at every level but re-emits your leading whitespace exactly as found. It does not snap 3-space to 2-space, does not convert tabs to spaces, and does not infer intended nesting depth. Fix indentation in your editor.
Will tabs be converted to spaces?
No. A tab-indented item keeps its tab — only the marker changes. For consistent cross-parser rendering, use your editor's 'Convert Indentation to Spaces' command after running.
What about deep nesting — is there a level limit?
There is no depth limit. Each line is processed independently, so markers are normalized at every level no matter how deep. Indentation at each level is preserved as written.
Does it fix lists inside blockquotes?
Usually not. Blockquote lines start with >, so a list marker after > is not at the line-start position the rules match. Blockquote-nested lists need a manual edit.
If it doesn't re-indent, what does it actually do for nested lists?
It normalizes every marker to - (or N. for ordered children), keeps your indentation untouched, and inserts the blank line before a top-level list that follows a paragraph. That covers the marker half of nested-list cleanup; the indentation half is yours to do.
Why not just auto-fix the indentation too?
Because guessing intended nesting depth is risky — an aggressive re-indent can silently flatten or deepen a list and corrupt meaning. A deterministic marker-only pass keeps diffs small and reviewable, which technical writers prefer.
Are ordered sub-lists renumbered?
No. A 1) child becomes 1. but the original number is kept; there is no resequencing. Renderers count by position, so the output still reads 1, 2, 3.
Does it touch code blocks that contain nested lists?
No. Anything inside a triple-backtick fence is passed through verbatim, markers and indentation alike, so a nesting example in your docs stays exact.
Will a child indented with 3 spaces render correctly after running?
Only if your parser already accepts 3-space nesting. The tool will not change the 3 spaces, so if a strict CommonMark renderer needs 2 or 4, you must re-indent it yourself.
Is my document uploaded?
No. Processing runs entirely in the browser, so internal technical references never leave your machine.
How big a file can I process?
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. Dense Markdown usually hits the character limit first.
What other cleanup tools pair well with this?
Run md-prettifier for whole-document whitespace reflow, md-lint for a broader rule check, and md-table-repair if your nested content includes tables.
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.