Markdown Underline Generator
Pick <u>, <ins> or inline CSS, then copy underline markup that survives your target platform. Everything runs locally in your browser.
How do you underline text in Markdown?
Markdown has no underline syntax of its own. CommonMark, GitHub Flavored Markdown and most dialects leave underlining to HTML, so wrap the text in <u>text</u> for a plain visual underline, or <ins>text</ins> when the text is genuinely an insertion. Both work anywhere inline HTML is allowed.
<u>This text is underlined</u>
<ins>This text is marked as inserted</ins>Both lines render with a line under the text. <ins> additionally tells browsers and screen readers that the content was added to the document.
Try the Markdown Underline Generator
Settings
Output
How to underline in Markdown: every working method
There is no asterisk-style operator for underline. John Gruber left it out on purpose, because underlined text is read as a hyperlink by almost everyone. So every method below reaches for HTML or for a platform-specific extension — pick the one your renderer actually supports.
The <u> tag (most reliable)
A purely presentational underline. It works everywhere inline HTML is allowed: GitHub, GitLab, Obsidian, the VS Code preview, Jupyter notebooks, Jekyll, Hugo and Docusaurus.
Read the <u>installation notes</u> before upgrading.Renders as: Read the installation notes before upgrading — with “installation notes” underlined.
The <ins> tag (semantic)
Browsers underline <ins> by default, but unlike <u> it carries meaning: this content was inserted. It also accepts datetime and cite attributes, which makes it the right choice for changelogs and tracked revisions.
The endpoint now accepts <ins>bearer tokens</ins> in the header.
<ins datetime="2026-02-01">Added in v2.4</ins>Both lines appear underlined. Assistive technology announces the run as inserted text rather than as generic decoration.
Inline CSS for styled underlines
A span with text-decoration gives you colour, thickness and dotted or wavy lines. The catch: many renderers sanitise HTML and strip the style attribute, so the text silently loses its underline instead of failing loudly.
<span style="text-decoration: underline dotted #dc2626;">verify this value</span>Underlined with a red dotted line in a full HTML renderer. On GitHub the style attribute is removed and the text renders plain.
Combining underline with bold or italic
Inline HTML does not switch Markdown parsing off, so ** and * still work inside the tags. Nest in whichever order reads better in the source.
<u>**Critical:**</u> restart the service after upgrading.
**<u>Bold and underlined</u>**Both lines produce text that is bold and underlined at the same time; the emphasis markers are still processed inside the tag.
Discord: __text__ means underline
Discord is the one common platform with a real underline shorthand. It reuses the double underscore that standard Markdown treats as bold, so the same string means two different things depending on where you paste it.
__underlined in Discord__
***__bold, italic and underlined__***In Discord both lines are underlined. In CommonMark or on GitHub the first line renders as bold text instead, and HTML tags are printed literally by Discord.
Pandoc: bracketed span
If you convert Markdown to DOCX, LaTeX or PDF with Pandoc, a bracketed span with the underline class produces a native underline in the output format instead of raw HTML.
Sign here: [your full name]{.underline}Pandoc emits a true underline in DOCX, LaTeX and HTML output. Other Markdown renderers show the brackets and the class literally.
Where underline actually renders
Underline is the least portable common formatting request in Markdown, because it depends entirely on how much raw HTML the renderer allows. Check your target before you publish.
| Platform | Support | Notes |
|---|---|---|
| GitHub / GitLab | Partial | <u> and <ins> render in READMEs, issues and PRs. The style attribute is stripped, so inline CSS fails silently. |
| Discord | Different syntax | __text__ underlines. HTML tags are shown literally, so <u> does not work. |
| Slack | None | No underline in messages at all. Use *bold* or _italic_ instead. |
| Obsidian | Full | <u> and <ins> render in reading and live preview. Ctrl/Cmd+U inserts the tags for you. |
| Notion | No syntax | Underline exists as Ctrl/Cmd+U formatting, but typed or imported <u> is not converted. |
| None | Reddit strips HTML and has no underline shorthand. Bold and italic are the only options. | |
| VS Code / Jupyter | Full | The built-in Markdown preview allows inline HTML, so both tags render as expected. |
How to underline text in Markdown with this tool
Pick a method
Choose the <u> tag for a plain underline, <ins> when the text is an insertion, or inline CSS when you need a custom line style.
Enter your text
Type or paste the words you want underlined into the input box. The output updates as you type.
Copy the markup
Use the Markdown tab for the snippet you paste into a .md file, or the HTML tab if you are writing HTML directly.
Check the preview
Open the preview tab to confirm the underline renders, then verify it again on the platform you are publishing to.
Frequently Asked Questions
Does Markdown support underline?
No. Standard Markdown and CommonMark have no underline syntax. The original specification deliberately covered only emphasis and strong emphasis, because underlined text is universally read as a hyperlink. Underlining therefore falls back to HTML tags such as <u> and <ins>.
How do I underline text in GitHub Markdown?
Use the HTML tag <u>underlined text</u> or <ins>underlined text</ins>. GitHub Flavored Markdown allows a safe subset of inline HTML, so both work in README files, issues, pull requests, comments and wikis. Inline CSS does not work, because GitHub removes the style attribute.
What is the difference between the u tag and the ins tag?
The u tag is purely visual: it draws a line and says nothing about meaning. The ins tag means the content was inserted into the document, is underlined by default, accepts datetime and cite attributes, and is announced as inserted text by screen readers. Prefer ins for changelogs and revisions.
How do I underline text in Discord?
Discord uses two underscores: __text__ produces underlined text, not bold. You can stack it with other markers, for example ***__text__*** for bold, italic and underlined at once. Discord ignores HTML, so <u> tags appear as literal characters in the message.
Why is my u tag showing as plain text instead of underlining?
The renderer is sanitising or disabling raw HTML. Reddit and Discord strip it entirely, some static site generators need HTML explicitly enabled in the Markdown configuration, and MDX requires valid JSX with a properly closed tag. Check the renderer's HTML settings before assuming the syntax is wrong.
Can I combine underline with bold or italic in Markdown?
Yes. Markdown formatting is still parsed inside inline HTML, so <u>**text**</u> is bold and underlined, and <u>*text*</u> is italic and underlined. You can also nest the other way round, such as **<u>text</u>**, with identical results.
Can I underline a heading or a table cell?
Yes. Headings and table cells accept inline HTML, so ## <u>Release notes</u> and a cell containing <u>pending</u> both render underlined. Keep the tag inside the cell, and do not break the tag across multiple lines or the table row will not parse.
Is underlined text bad for accessibility?
It can be. Sighted users associate underlines with links, so underlining plain text invites mistaken clicks and adds cognitive load. If the meaning is emphasis, use bold or italic, which map to strong and em. If the meaning is an insertion, use ins, which carries that meaning explicitly.
What should I use instead of underline in Markdown?
Use **bold** for strong emphasis, *italic* for mild emphasis, `code` for identifiers and commands, and blockquotes for callouts. These are native Markdown, render everywhere including Slack, Reddit and Discord, and convey meaning rather than decoration.