The greater-than marker

A blockquote is any line that begins with a greater-than sign. That is the entire rule:

> Markdown is intended to be as easy-to-read and
> easy-to-write as is feasible.
In short
  • One > at the start of a line makes a quote, and the space after it is optional.
  • A bare > keeps one quote running; a truly blank line splits it into two.
  • Each extra > adds a level of nesting, and two levels is the practical limit.
  • GitHub alerts and Obsidian callouts are plain quotes with a keyword such as [!NOTE] on the first line.

The parser emits an HTML <blockquote>. Most stylesheets draw that as indented text with a coloured bar down the left edge.

Markdown styles nothing itself. The look comes from the CSS around it. That is why one quote is a grey panel on GitHub, a serif pull-quote on a blog, and a plain indent in an email client. The Markdown versus HTML comparison shows what the parser hands over.

Is the space after the marker required?

No. >Quoted parses the same as > Quoted in CommonMark and on GitHub. Type the space anyway. It keeps the raw file readable, and a few older parsers insist on it.

How much space is too much

  • One space after the marker is the normal form and always safe.
  • Four or more extra spaces after it start an indented code block inside the quote.
  • Up to three spaces before the marker are ignored.
  • A fourth space before it turns the line into a code block, so keep quotes flush left.
Illustration of a plain paragraph gaining a greater-than sign and turning into an indented quote with a coloured left bar

Multi-line quotes and lazy continuation

Every line of a multi-line quote should carry its own marker:

> The best way to get the right answer on the internet
> is not to ask a question. It is to post the wrong answer.

Lazy continuation

Markdown lets you get away with less. When a quoted paragraph runs onto the next line, that line joins the quote even with no marker on it:

> The best way to get the right answer on the internet
is not to ask a question. It is to post the wrong answer.

Both versions render the same. This is lazy continuation. It exists because Markdown was written for people who wrap paragraphs by hand in a plain text editor. It applies only to the later lines of a paragraph that is already inside the quote.

Why being explicit is safer

Lazy continuation stops working the moment the unmarked line could start a block of its own. A bullet, a heading, a code fence or a table row escapes the quote with no warning at all:

> Keep pull requests small.
- Small changes get reviewed faster.

The first line is a quote. The second is an ordinary list outside it, and the raw text gives no hint of the split. Worse, any editor that re-wraps the paragraph can move the break and change the result.

Tip: Put a > on every line and this whole class of bug disappears. It is the same habit that keeps nested bullets stable in the lists reference: be explicit, and the parser has nothing to guess.

Blank lines split one quote into two

A blank line ends a blockquote. What looks like a single quote with two paragraphs is really two separate quotes:

> The first paragraph of the quotation.

> The second paragraph of the quotation.

You get two <blockquote> elements with a visible gap between them. On GitHub that is two grey panels instead of one.

The bare marker keeps a quote running

Quote the blank line as well. Write a > with nothing after it:

> The first paragraph of the quotation.
>
> The second paragraph of the same quotation.

That one character decides whether you get one quote or two. It also answers most "why is there a gap in my quote" questions.

The same marker separates any two blocks

Inside a quote, a bare > does the job that a blank line does in ordinary Markdown. Use it between:

  • two paragraphs of one quotation
  • a heading and the paragraph under it
  • a paragraph and the list that follows
  • a paragraph and an opening code fence

Nested quotes and email-style replies

Add one marker per level. Two markers is a quote inside a quote:

> > Should this endpoint be async?
>
> Yes, and it needs a timeout as well.

The space between markers is optional, so >> and > > mean the same thing. Each level wraps another <blockquote>, and most themes indent every level. Three or four levels leave a very narrow column, so two is the practical limit.

Email-style replies

Nesting earns its keep in threaded replies. Mailing lists and plain text email marked quoted material with > long before Markdown existed, and Markdown took the habit over whole. The oldest message sits deepest:

> > > Can we ship on Friday?
> >
> > Only if the migration has been reviewed.
>
> It was reviewed this morning.

Then let's ship it.

Where nested quotes collapse

Write the markers on every line here. Lazy continuation across levels is what breaks reply chains. A line with fewer markers than the one above it is pulled into the deeper paragraph. It does not start a shallower quote, which is what almost everyone expects.

Illustration of three stacked quote bars nested inside each other like a reply chain in an email thread

What you can put inside a quote

A blockquote holds any block content: paragraphs, headings, lists, code fences, tables, images, even other quotes. Two rules cover all of it.

  1. Every line of that content needs the > marker, including lines that look empty.
  2. Separate blocks with a bare >, never with a real blank line.
> ### Release checklist
>
> 1. Tag the release
> 2. Publish the notes
>
> ```bash
> git tag -s v2.1.0
> ```
>
> Both fences need the marker, not just the code.

Indentation inside a quote is measured after the marker is stripped, so a nested list behaves exactly as it does outside a quote. The lists reference has the space counts, and the code blocks reference has the fence rules.

Every block, and what to watch for

ElementWritten inside a quoteWatch out for
Paragraph> Some textNothing
Second paragraphBare > line between themA truly blank line ends the quote
Heading> ## TitleStill lands in the page outline on GitHub
Bullet list> - ItemMarker needed on every item
Numbered list> 1. ItemSame, including continuation lines
Nested list> - ChildIndent is counted after the >
Fenced code block> ``` on its own lineOpening and closing fence both need it
Indented code block> plus four spacesEasy to trigger by accident
Table> | A | B |Header, separator and every row
Image> ![Alt](cat.jpg)Inherits the quote's width, not the page's
Link> [Text](/page)Nothing
Horizontal rule> ---Directly under text it becomes a heading
Nested blockquote> > Quoted replySpace between markers is optional
Task list> - [ ] ItemGFM only, and never clickable

Watch out: a table inside a quote gets the quote's width, not the page's, so columns crush together fast. The tables reference covers when to pull one out into a section of its own.

Attribution lines

Markdown has no attribution syntax. Every convention below is a community habit rather than a rule. The most common one is a dash and a name on the last line of the quote:

> Simplicity is the ultimate sophistication.
>
> - Leonardo da Vinci

Print sets that leading dash as a long dash. In a source file a plain hyphen is safer. It survives copying between editors, and it never turns into a mangled character in a file saved with the wrong encoding.

Why the name turns into a bullet point

A hyphen followed by a space is list syntax, so the example above renders the name as a single bullet. Some themes make that look deliberate. Others make it look broken.

Three ways to keep it as plain text

  • Escape the hyphen with a backslash, which keeps the dash and drops the bullet.
  • Set the name in italics, which reads as a note rather than a list item.
  • Use a nested quote, which separates the source from the words themselves.
> Simplicity is the ultimate sophistication.
>
> \- Leonardo da Vinci
>
> *Leonardo da Vinci, attributed*

The nested-quote version reads as a note about the quotation rather than part of it:

> Simplicity is the ultimate sophistication.
>
> > Leonardo da Vinci, widely attributed

Where inline HTML is allowed, <cite> gives you real semantics. Where it is not, the italic form from the bold and italic reference gets you most of the way there.

GitHub alerts and Obsidian callouts

GitHub added alerts in late 2023, built straight on blockquote syntax. The first line of the quote is a keyword in square brackets with a leading exclamation mark. The body follows on the next line:

> [!NOTE]
> Useful information a reader should not skip.

> [!WARNING]
> Something that could cause a problem if ignored.

The three rules GitHub checks

  1. The keyword is uppercase: [!NOTE] works, [!note] does not.
  2. It sits alone on the first line of the quote, with the text below it.
  3. One quote holds one alert, and nested alerts are not supported.

Get all three right and GitHub draws a coloured border, an icon and a bold label. Get one wrong and you get a plain quote with visible brackets. The rest of the dialect is in the GitHub Flavored Markdown reference.

What happens on every other renderer

Alerts degrade rather than break. A renderer that has never heard of them sees an ordinary blockquote whose first line is the literal text [!NOTE]. The content stays readable, with one stray bracketed word on top. That trade-off is exactly why the syntax was built on quotes.

Obsidian callouts go further

Obsidian callouts start from the same base syntax and add four things:

  • a much longer keyword list, including [!BUG] and [!EXAMPLE]
  • lowercase keywords, so [!tip] is fine
  • an optional custom title on the same line
  • folding, with a trailing + or -
> [!tip] Faster than you think
> Callout titles are optional.

> [!warning]- Folded by default
> The minus sign starts this one collapsed.

The table below is the full keyword list, with the platforms that draw each one as a real callout.

Every keyword, and where it works

SyntaxRendered asWhere it works
> [!NOTE]Blue callout labelled NoteGitHub, GitLab, Obsidian
> [!TIP]Green callout, optional adviceGitHub, GitLab, Obsidian
> [!IMPORTANT]Purple callout, must-readGitHub, GitLab, Obsidian
> [!WARNING]Amber callout, risky stepGitHub, GitLab, Obsidian
> [!CAUTION]Red callout, negative outcomeGitHub, GitLab, Obsidian
> [!INFO]Neutral information calloutObsidian only
> [!SUCCESS]Green tick calloutObsidian only
> [!QUESTION]Question mark calloutObsidian only
> [!FAILURE]Red cross calloutObsidian only
> [!BUG]Bug icon calloutObsidian only
> [!EXAMPLE]List icon calloutObsidian only
> [!QUOTE]Quotation mark calloutObsidian only
> [!NOTE]- TitleCallout, collapsed on loadObsidian only
Anything unrecognisedPlain quote with literal bracket textEvery other renderer

Tip: Pick the keyword by the risk to the reader, not by the colour you like. [!WARNING] is for a step that can break something, [!NOTE] for context, [!TIP] for advice they can skip. Four alerts in a row teach people to skip all four.

Common mistakes and their fixes

Five failures cover nearly every broken quote, and each one has a one-line fix:

  1. No blank line before the quote, so the marker gets swallowed by the paragraph above.
  2. A blank line where a bare > belongs, which splits one quote into two.
  3. A list or fence that loses its marker and drags the rest of the block out of the quote.
  4. An alert keyword in lower case, or with body text beside it on the same line.
  5. Trailing spaces on a quoted line, which force a hard break and leave ragged short lines.

Fixing the two blank-line mistakes

CommonMark and GitHub let a quote interrupt a paragraph. Python-Markdown, which powers MkDocs, does not, and neither do Markdown.pl or many wikis. They print a literal > instead. Broken, then fixed:

Here is what the style guide says:
> Prefer short sentences.
Here is what the style guide says:

> Prefer short sentences.

The second mistake is the mirror image. A real blank line inside the quote gives you two quotes with a gap. Broken, then fixed:

> First paragraph.

> Second paragraph.
> First paragraph.
>
> Second paragraph.

Fixing a marker that goes missing

An unmarked line breaks out of the quote, and everything after it goes too. Broken, then fixed:

> Checklist:
> - Tag the release
- Publish the notes
> Checklist:
>
> - Tag the release
> - Publish the notes

Fixing an alert that renders as a plain quote

GitHub matches uppercase keywords on their own line only. Both of these fail, and both leave visible brackets:

> [!note] Rotate the signing key
> [!NOTE] Rotate the signing key
> [!NOTE]
> Rotate the signing key every 90 days.

Debugging anything else

The routine is the same everywhere in Markdown. Paste the quote into the editor and remove lines until it renders. The last line you removed is the culprit, and it is nearly always a missing marker or a stray blank line.

Blank lines carry a lot of meaning in this format, and what Markdown is for explains why. The cheat sheet keeps every quote form on one page, the complete guide puts quotes next to every other element, and the headings and footnotes references cover what people most often pair with a quotation.

Support data verified

Frequently Asked Questions

Do I need a space after the > in a markdown blockquote?

Not in CommonMark or on GitHub, where >Quoted and > Quoted parse identically. Write the space anyway for readability and for older parsers that require it. Avoid four or more extra spaces after the marker, because that is read as an indented code block inside the quote.

How do I write a quote with two paragraphs?

Put a bare > on the line between them. A truly blank line ends the quote, so you would get two separate blockquotes with a gap. The bare marker is also how you separate a heading, a list or a code fence from the paragraph above it inside the same quote.

How do I nest a blockquote inside another one?

Use one marker per level: > > Inner quote. The space between markers is optional. Write the markers explicitly on every line, since a line with fewer markers is usually absorbed into the deeper quote rather than starting a shallower one.

Do GitHub alerts like [!NOTE] work outside GitHub?

They render as coloured callouts on GitHub, GitLab and Obsidian. Everywhere else they degrade to a normal blockquote whose first line is the literal text [!NOTE], so nothing breaks and the content stays readable. Obsidian accepts many more keywords and allows lowercase.

Why did my attribution line turn into a bullet point?

Because a hyphen followed by a space is list syntax. Escape the hyphen with a backslash, set the name in italics, or put the attribution in a nested quote. Any of the three keeps it out of a list while staying readable in the raw file.

Keep learning

Try the Editor

Try the Editor