Markdown Arrows: How to Type Arrow Symbols (2026)
September 11, 2026 · 8 min read
Markdown Arrows: How to Type Arrow Symbols
A markdown arrow is just a character. Markdown has no arrow syntax, so you paste the Unicode symbol (→), write an HTML entity (→), or use a numeric reference (→). All three render as → in any CommonMark renderer. This post gives you a copy-paste table, the keyboard routes on Mac and Windows, and the reasons an arrow sometimes shows up as literal text.
Three Ways to Write a Markdown Arrow
Typing -> produces a hyphen and a greater-than sign, not an arrow. No Markdown flavour converts it. What you need is the real character, and there are three ways to get it into a file.
Raw Unicode: Click Save → Export → PDF
Named entity: Click Save → Export → PDF
Numeric reference: Click Save → Export → PDF
All three lines render identically: "Click Save → Export → PDF". The CommonMark spec requires renderers to decode named entities from the HTML5 list plus decimal (→) and hexadecimal (→) references. GitHub, GitLab, Obsidian, Jupyter, and our editor all follow that rule.
We prefer raw Unicode. It survives a copy into Slack, a plain-text email, or a commit message, where entities stay as →. Entities earn their place when a keyboard layout makes the symbol hard to type, or when a file must stay pure ASCII. The one route that never works is guessing a name: &arrow; is not on the HTML5 list, so it prints as typed.
Markdown Arrows Reference Table
Every arrow below has a Unicode code point. Only some have a named entity, so the numeric column is the one that works for all of them.
| Arrow | Unicode | Named entity | Numeric (hex) | Numeric (decimal) |
|---|---|---|---|---|
| → | U+2192 | → | → | → |
| ← | U+2190 | ← | ← | ← |
| ↑ | U+2191 | ↑ | ↑ | ↑ |
| ↓ | U+2193 | ↓ | ↓ | ↓ |
| ↔ | U+2194 | ↔ | ↔ | ↔ |
| ⇒ | U+21D2 | ⇒ | ⇒ | ⇒ |
| ⇐ | U+21D0 | ⇐ | ⇐ | ⇐ |
| ⇑ | U+21D1 | ⇑ | ⇑ | ⇑ |
| ⇓ | U+21D3 | ⇓ | ⇓ | ⇓ |
| ⇔ | U+21D4 | ⇔ | ⇔ | ⇔ |
| ↗ | U+2197 | ↗ | ↗ | ↗ |
| ↖ | U+2196 | ↖ | ↖ | ↖ |
| ↘ | U+2198 | ↘ | ↘ | ↘ |
| ↙ | U+2199 | ↙ | ↙ | ↙ |
| ↵ | U+21B5 | ↵ | ↵ | ↵ |
| ↦ | U+21A6 | ↦ | ↦ | ↦ |
| ↪ | U+21AA | ↪ | ↪ | ↪ |
| ↷ | U+21B7 | ↷ | ↷ | ↷ |
| ⟶ | U+27F6 | ⟶ | ⟶ | ⟶ |
| ➡ | U+27A1 | none | ➡ | ➡ |
The names and code points come from the WHATWG named character references table. Case matters: → is the single-line arrow and ⇒ is the double one. The heavy ➡ (U+27A1) sits in the Dingbats block and has no entity name at all, so write ➡ or paste it.
How Do I Type → on Mac and Windows?
On a Mac, press Fn-E (the Globe key plus E) or choose Edit, then Emoji & Symbols, per Apple's guide. Search "arrow" in the Character Viewer and double-click the one you want. Control-Command-Space also opens the same panel, which helps on older keyboards without a Globe key.
On Windows, press the Windows key and period to open the emoji panel, then pick the Symbols tab. Alt codes on the numeric keypad also work in most apps: Alt+26 gives →, Alt+27 gives ←, Alt+24 gives ↑, and Alt+25 gives ↓. Those four come from the old CP437 code page, which is why they need the keypad and not the top-row numbers.
Linux users on GTK desktops can press Ctrl+Shift+U, type the hex code 2192, and press Space. Or skip all of it and keep the entity table above bookmarked.
Try Markdown Arrows in the Editor
Paste any row from the table into the sample below. The left pane shows the raw text and the right pane shows every arrow decoded, including the entity inside the code span that stays literal on purpose.
Once the arrows look right, the Markdown to HTML converter gives you the HTML with the entities intact for a web page.
Why Is My Markdown Arrow Showing as Literal Text?
Four causes cover almost every case. Check them in this order.
The entity is inside code. CommonMark states that entities are not recognised in code spans or code blocks. → between backticks prints as →, which is correct behaviour. Paste the Unicode character instead if the arrow has to appear inside code.
An escaped ampersand. A backslash before the ampersand (\→) turns it into a plain &. Some converters that produce Markdown from HTML add this escape. Delete the backslash.
The platform doesn't render Markdown there. Slack messages, Discord messages, and commit subject lines are not passed through a CommonMark renderer, so entities never get decoded. In those places, paste the character.
You typed -> and expected a conversion. Nothing in Markdown does this, and it is a common request on the Obsidian forum. Use a font with ligatures (which only changes how -> is drawn, not the text), set up a text expander such as Espanso, or paste the real symbol. Pandoc's smart extension converts quotes, dashes, and ellipses but has no rule for arrows either.
Arrows on GitHub, Obsidian, and Jupyter
GitHub renders Unicode arrows and entities in READMEs, issues, and comments. It also allows the <kbd> tag, which is the answer to the common "show the arrow keys" question: <kbd>↑</kbd> <kbd>↓</kbd> <kbd>←</kbd> <kbd>→</kbd> draws four key caps. The GitHub Markdown cheat sheet lists the other HTML tags that survive sanitisation.
Obsidian renders both routes in Reading view and Live Preview. In our testing, -> stays as two characters unless your editor font has a ligature for it. The Obsidian Markdown cheat sheet covers the rest of its syntax.
Jupyter Markdown cells decode entities and show Unicode arrows in the rendered cell. For arrows in math output rather than prose, use the LaTeX route in the next section.
Arrows With Text: LaTeX, Mermaid, and Labels
A labelled arrow is a different job from a text arrow. In a math span, $A \xrightarrow{f} B$ puts the label above the arrow, and $\rightarrow$, $\Rightarrow$, and $\mapsto$ give the plain forms. That works wherever KaTeX or MathJax runs; the Markdown equation guide covers where that is.
In a Mermaid diagram, arrows are edges, not characters: A -->|label| B draws an arrow from node A to node B with the label on it. That syntax only renders inside a ```mermaid fence, which our Mermaid diagrams guide explains. For a plain sentence such as "File → Export", stick with the character.
Common Markdown Arrow Mistakes
Mixing up case. → and ⇒ are different arrows, and &RARR; is not an entity at all. Copy the name from the table rather than typing it from memory.
Forgetting the semicolon. &rarr without the closing ; is not a valid reference, so it prints literally. The spec is strict here.
Expecting --> in a table cell to become an arrow. It stays as three characters. Tables accept entities and Unicode like any other inline text, so | Step | → | is the fix.
Markdown Arrows FAQ
Pick the route that matches where the text will live. Raw Unicode travels anywhere, an entity keeps the file ASCII, and a numeric reference covers the arrows with no name. Whichever markdown arrow form you choose, test it in the editor first, and keep the Markdown cheat sheet nearby for the escaping rules that go with it.