Convert Markdown to a list

Paste a Markdown list and get the items back without the bullets. Strips `- `, `* `, `+ `, `1. `, `2) `, and leading `> ` blockquote prefixes. Nested lists flatten into a single flat list - indentation is ignored.

Input
Ready
Output
Live

A Markdown list stripper

The parser walks line by line and strips a prefix matching `(^[\s>]*)(?:[-*+]|\d+[.)])\s+` - that catches every common Markdown list marker: dashes, asterisks, plusses, numbered with dot or paren, and blockquote-wrapped variants (`> - item`). Any leading indentation is eaten too, so a nested sublist flattens into the same flat output as its parent.

What it does not do: parse Markdown syntax beyond the list markers. Emphasis (`*bold*`), inline code, links, and headings all survive as literal text. Lines that do not match a list-marker pattern are dropped entirely - they do not pollute the output with non-list content.

Standard post-processing: Trim (default on) strips edge whitespace; Dedupe (default off) drops duplicates case-insensitively. Both apply after the marker strip, so you get the cleanest possible flat list out.

How to use convert markdown to a list

  1. 1Paste your Markdown list into the input panel
  2. 2Output is each list item with the marker removed, one per line
  3. 3Toggle Trim to control whitespace stripping (on by default)
  4. 4Toggle Dedupe to collapse duplicates
  5. 5Nested sublists flatten automatically - the output is a single flat list

Keyboard shortcuts

Drive ListShift without touching the mouse.

Shortcut Action
Ctrl ZUndo last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor
EscExit fullscreen
Ctrl KOpen the command palette to jump to any tool
Ctrl SSave current pipeline draft Plus
Ctrl PRun a saved pipeline Plus

What this parser actually does

Regex-based marker strip, no Markdown rendering.

Strips every common list marker

Matches `- `, `* `, `+ `, numbered `1. `, numbered `2) `, and any leading whitespace + blockquote `> ` wrappers. A line like ` > - item` becomes `item`.

Flattens nested lists

Indentation is consumed along with the marker, so a sublist item comes out at the same level as its parent. The output is always a flat list regardless of input nesting depth.

Drops non-list lines

Lines that do not match a list-marker pattern are filtered out entirely. Headings, paragraphs, horizontal rules, and blank lines do not land in the output.

Does not render Markdown syntax inside items

Bold (`**text**`), italics (`*text*`), inline code, links, and references survive as literal text - the parser only strips the leading list marker, it does not interpret inline Markdown. If you need actual HTML output with bold / italic / link tags, run the source through a dedicated Markdown renderer (pandoc, marked, a GitHub-flavored tool); ListShift's convert-a-list-to-html just wraps lines in `<li>` tags and does not render Markdown.

Trim + Dedupe post-processing

Trim (on by default) strips leading/trailing whitespace per item. Dedupe (off by default) drops duplicate items case-insensitively. Both run after the marker strip.

Worked example

Dashes, nested sub-items, a blockquote-wrapped item, and a numbered item all collapse into a flat list.

Input
- Apples
- Oranges
  - Valencia
  - Cara Cara
- Cherries
> - Quoted item
1. Plums
Output
Apples
Oranges
Valencia
Cara Cara
Cherries
Quoted item
Plums

Settings reference

How each option shapes the output using the sample above.

Setting What it does Effect on the sample
Marker strip (automatic) Removes `-`, `*`, `+`, `1.`, `2)`, blockquote `>` prefixes plus indentation Seven items emitted, none with a leading bullet
Non-matching lines (automatic) Lines without a list marker are dropped Headings, blanks, or stray paragraphs would not appear in the output
Trim: on (default) Strips leading/trailing whitespace per item No visible change on the sample
Dedupe: on Drops duplicates case-insensitively No duplicates in sample - no change

FAQ

Does the tool preserve nesting levels?
No - nested sublists flatten into the same level as their parents. The marker-stripping regex consumes the leading indentation, so a 3-deep sub-item comes out at the same level as a top-level item. If you need to preserve hierarchy, this is not the right tool.
What happens to `**bold**` or other inline Markdown inside items?
It is left as literal text. The parser only strips the list marker from the start of each line; the content of items is not interpreted. ListShift does not render inline Markdown anywhere - convert-a-list-to-html wraps lines in `<li>` tags and escapes `&`, `<`, `>`, but does NOT turn `**bold**` into `<strong>bold</strong>`. For true Markdown → HTML conversion, use a dedicated Markdown renderer (pandoc, marked, GitHub's API).
What does the tool do with non-list lines (headings, paragraphs)?
They are dropped entirely. Only lines matching a list-marker pattern are captured. That is deliberate - a Markdown document with mixed content produces a clean list of just the list items, no stray non-list content in the output.
Does it handle task list checkboxes (`- [ ] task`)?
The `- ` prefix is stripped; the `[ ] ` or `[x] ` stays as part of the item text. If you want clean task text without the checkbox, run the output through Replace to strip `[ ]` and `[x]`.
Can I build a Markdown list from a plain list?
Yes, use convert-a-list-to-markdown - it prepends your chosen bullet (`-`, `*`, `+`, or `1.`) to each line.