Two editors, one format: fancy pants and Markdown mode
- Every post and comment is stored as Markdown, and the rich-text composer simply writes that Markdown for you.
- A single newline is the number one trap, because old.reddit folds it away. Leave a blank line instead.
- Indent code four spaces rather than fencing it, since old.reddit shows backtick fences as literal characters.
- Superscript with
^(text), spoilers with>!text!<and barer/links are Reddit's own additions.
Fancy pants and Markdown mode
Every post and comment on Reddit is stored and rendered as Markdown. What changes is how you type it. The default composer on new Reddit is the rich-text editor the community nicknamed fancy pants: a toolbar with bold and italic buttons that writes the Markdown for you. The alternative is Markdown mode, a plain textarea where you type the syntax yourself.
Reddit keeps your source, then renders it twice
Tools split into two groups. Some keep your Markdown as written. Others convert it on the way in and discard the characters, which is what Notion does with every shortcut you type. Reddit keeps it. That is good for you, and it also explains the site's biggest quirk: one stored source, two renderers, so the same comment can look different on old.reddit than on the new site.
How to switch editors
Look for the toggle in the corner of the composer. It is usually labelled "Markdown Mode", or shown as a small T or pencil icon. Clicking it swaps the box in place, and Reddit remembers the choice. On old.reddit.com there is nothing to switch, because the only editor there is a raw Markdown box.
Which editor to use
Fancy pants is fine for a sentence with a bold word in it. For a table, a code block or nested lists, switch to Markdown mode before you start typing.
Careful: Pasting Markdown source into fancy pants gives you a half-converted mess, because some constructs are recognised on paste and others stay literal. Switching mid-draft can lose formatting too, and Reddit warns you when it does.
The formatting that works everywhere on Reddit
Reddit's flavour is close to the original Markdown specification. It is far more capable than a chat app such as Discord, and noticeably narrower than GitHub Flavored Markdown. This is the reliable core:
# Heading 1
###### Heading 6
**bold** *italic* ***bold italic*** ~~strikethrough~~
[link text](https://example.com)
https://example.com (bare URLs link themselves)
- bullet item
- nested item
1. numbered item
> a quoted line
`inline code`
---
Small rules with big consequences
New Reddit follows the CommonMark rule that a heading needs a space after the hashes. So # Title is a heading and #Title is not. Old.reddit accepted either. That is why one line can be a heading in one place and a stray hash in the other, a split our headings guide traces back to the spec.
Two more rules earn their keep:
- Lists need a blank line before the first item, or they merge into the paragraph above.
- Numbered lists re-sequence themselves, so every line can safely start with
1..
Reddit also autolinks its own references. Write r/formatting or u/spez and it becomes a link with no bracket syntax at all. That is a house extension, so do not expect it in the links guide or anywhere off Reddit.
Code on Reddit: the four-space rule and fenced blocks
Inline code behaves the same as everywhere else: single backticks render monospace and switch off formatting inside. Blocks are where Reddit's history shows.
The historical four-space indent
For most of Reddit's life the only way to make a code block was to indent every line by four spaces. It still works, and it is still the most compatible option:
Here is a code block:
def total(items):
return sum(items)
Back to normal text.
The blank line before the indented block is required. The rule is also a trap in reverse. Any paragraph you indent by four spaces quietly becomes a code block, which is why pasted text sometimes turns into a grey monospace slab.
Fenced blocks
New Reddit and the official apps also accept three-backtick fences with an optional language name. The catch is blunt: old.reddit does not render fenced blocks. Readers there see literal backticks wrapped around unformatted code. Reddit never colourises code either way, so the language tag buys you nothing here, unlike the fenced blocks you write on GitHub.
```
def total(items):
return sum(items)
```
Tip: Choose the block style by audience. Indent four spaces for anything a stranger might read, and save fences for places where you know everybody is on the apps or new Reddit.
Reddit-only syntax: superscript, spoilers and tables
Superscript
A caret raises the text that follows it. A bare caret lifts a single word, while parentheses raise a whole phrase and behave more consistently. Prefer the parentheses form.
E = mc^2
Everyone knows this. ^(Source: trust me)
Stacked ^^carets go higher still on old.reddit
Superscript is Reddit's house style for asides and disclaimers. It is also an easy accident to have.
Careful: A caret in a maths expression lifts everything after it. Write 2\^10 with a backslash whenever you mean a power rather than a whisper.
Spoilers
Reddit's official spoiler syntax wraps text in >! and !<. The words hide behind a black bar until the reader clicks them.
The butler >!did it!< in the library.
This renders on new Reddit and in the official apps. Old.reddit support has been patchy, and some long-running subreddits still carry CSS spoiler hacks from before the official tag existed. Preview rather than trust it blind. Discord solves the same problem with double pipes, which is worth knowing if you cross-post.
Tables
Pipe tables work on Reddit, including alignment colons in the divider row. A header row and a divider row are both mandatory. Without them, the pipes stay pipes.
| Item | Qty | Price |
|:----------|:---:|------:|
| Keyboard | 1 | $89 |
| Mouse | 2 | $24 |
Reddit tables have no cell merging, no multi-line cells and no captions. Anything more elaborate belongs in a linked image or an external page. Our Markdown tables guide has the general rules, plus the trick for putting a literal pipe inside a cell.
Reddit Markdown support matrix
Behaviour below reflects the Markdown renderer used for posts and comments. Where old.reddit and new Reddit disagree, the note says so.
| Feature | Syntax | Works? | Notes |
|---|---|---|---|
| Headings | # to ###### | Yes | New Reddit needs the space after the hashes; old.reddit did not |
| Bold | **text** | Yes | Double underscores also work |
| Italic | *text* or _text_ | Yes | Escape underscores inside snake_case words |
| Bold italic | ***text*** | Yes | |
| Strikethrough | ~~text~~ | Yes | No spaces inside the tildes |
| Link | [text](url) | Yes | Reference-style links are unreliable; use inline |
| Bare URL | https://... | Yes | Autolinked |
| Subreddit and user | r/name, u/name | Yes | Reddit extension; no brackets needed |
| Bulleted list | - item | Yes | Blank line before the first item |
| Numbered list | 1. item | Yes | Numbers are re-sequenced automatically |
| Blockquote | > text | Yes | Nesting with >> is fragile; add blank lines |
| Inline code | `code` | Yes | Disables formatting inside |
| Indented code block | four spaces | Yes | The only block form old.reddit understands |
| Fenced code block | three backticks | Partly | New Reddit and the apps only; renders literally on old.reddit |
| Table | pipes and dashes | Yes | Header and divider rows required; no merged cells |
| Superscript | ^(text) | Yes | Reddit extension; parentheses form is safest |
| Spoiler | >!text!< | Mostly | Reddit extension; old.reddit support has been inconsistent |
| Horizontal rule | --- | Yes | Needs a blank line above or it makes a heading |
| Image by syntax |  | No | Upload instead; image comments only where mods enable them |
| Task list | - [ ] item | No | Renders as literal square brackets |
| Footnote | [^1] | No | Not supported; use superscript or a plain list |
| Raw HTML | <b>text</b> | No | Stripped for safety |
The line-break trap and the other things that break
Single newlines vanish
Take the fix first. Leave a blank line between blocks, or end a line with two trailing spaces to force a break inside one paragraph. The blank line is the safer habit, because trailing spaces are invisible and editors strip them.
Here is the cause. In classic Markdown a single newline counts as a space, so these three lines collapse into one paragraph:
Line one
Line two
Line three
New Reddit's renderer usually keeps the break, which is what makes the bug so confusing. Your address list looks right as you write it. Then it arrives as one run-on sentence for everyone reading on old.reddit.
Images, HTML and footnotes
Markdown image syntax does not render on Reddit at all. Upload an image as its own post, or post a link. Image comments do exist, but they are a per-subreddit setting moderators enable, and some subreddits allow Reddit's own GIF syntax. Neither is reliable site-wide, unlike the platforms covered in our images guide. Raw HTML is stripped, and footnotes have never been supported.
Quote and indent quirks
A blockquote swallows the line after it unless you leave a blank line. A reply typed directly beneath > quoted text ends up inside the quote. Nested >> quotes need a blank quoted line between levels, as our blockquotes guide shows. And because four spaces means "code", indenting a paragraph under a list item produces a code block.
Escaping
A backslash before a character prints it literally. The ones worth escaping on Reddit are *, _, ^, ~, #, >, [, ] and |.
\#1 problem keeps the hash instead of making a heading
5 \* 3 = 15 keeps the asterisk
2\^10 keeps the caret
Underscores deserve special care, because usernames, file paths and snake_case variables are full of them. Wrapping the whole string in backticks is quicker than escaping each one, the same shortcut our bold and italic guide recommends.
old.reddit versus new Reddit, and how to write for both
A large and vocal share of Reddit still browses old.reddit.com and its older renderer. Your words are read through both, so write for the stricter one. The differences that bite are short enough to memorise:
- Fenced code blocks render on new Reddit and show as literal backticks on old.reddit. Indent four spaces instead.
- Single line breaks often survive on new Reddit and collapse on old.reddit. Use a blank line.
- Headings without a space after the hash work on old.reddit and fail on new Reddit. Always add the space.
- Spoiler tags are dependable on new Reddit and the apps, less so elsewhere.
- Subreddit CSS only exists on old.reddit, so custom community styling changes nothing on new Reddit.
A two-minute check before you post
- Put a blank line between every block, including before lists and rules.
- Swap backtick fences for four-space indents.
- Add the missing space after each
#. - Preview it, then open the thread on old.reddit if the post is long.
Two habits cover almost all of it. Leave blank lines between everything, and prefer the older syntax when two forms exist. Comments cap at 10,000 characters, while self-post bodies allow 40,000.
Where Reddit sits among the rest
Reddit is one dialect among many, which is why the same text can look different in three places. Discord's chat subset is the tighter cousin, and Obsidian shows what changes once the file itself belongs to you. The platform hub lines every app up in one table.
Still deciding what to learn? Our explainer on which Markdown flavor to learn is the short answer. The complete Markdown guide and the cheat sheet are the long one.
Support data verified
Frequently Asked Questions
How do I switch to the Markdown editor on Reddit?
In the new Reddit composer, look for the toggle in the corner of the box, usually labelled "Markdown Mode" or shown as a small T or pencil icon. Clicking it replaces the rich-text editor with a plain text box, and Reddit remembers the setting. On old.reddit.com every box is already Markdown.
Why does Reddit ignore my line breaks?
Because a single newline counts as a space in classic Markdown, and old.reddit still does exactly that. Leave a blank line to make separate paragraphs, or two trailing spaces to force a break inside one. The blank line is safer, since trailing spaces are invisible and easily lost.
How do I make a code block in a Reddit comment?
Indent every line by four spaces and leave a blank line above it. That form renders everywhere, including old.reddit. Three-backtick fences also work on new Reddit and the apps, but old.reddit readers see literal backticks.
Can I post an image in a Reddit comment with Markdown?
No. The  syntax does not render anywhere on Reddit. You can upload an image in a comment only in subreddits where moderators turned image comments on; otherwise post it as its own submission or paste a link.
Does Reddit support tables?
Yes. Pipe tables render on both old.reddit and new Reddit, and colons in the divider row control alignment. A header row and a divider row are both required. There is no merged-cell, multi-line-cell or caption support.
Keep learning
Try the Editor
Try the Editor