MeshWorld India LogoMeshWorld.
MarkdownTutorial4 min read

Beyond GFM: Highlight, Subscript, Superscript & Emoji in Markdown

Vishnu
By Vishnu
|Updated: Jul 15, 2026
Beyond GFM: Highlight, Subscript, Superscript & Emoji in Markdown

This series has covered CommonMark’s core syntax and GitHub-Flavored Markdown’s most common extensions, like tables and task lists. Beyond those two standards, a handful of other syntax extensions have become common enough to expect on many platforms, even though none of them are officially part of GFM. This guide covers highlight, subscript, superscript, and emoji shortcode syntax, and is upfront about the fact that all four depend on plugin support rather than being guaranteed to work everywhere.

Key Takeaways

  • Highlight text with double equals signs: ==highlighted text==.
  • Subscript uses single tildes (~sub~) and superscript uses single carets (^sup^).
  • Emoji shortcodes like :tada: render as an emoji character on platforms that support them.
  • None of these four are part of core CommonMark or GFM; each requires a specific plugin or renderer feature.

How Do I Highlight Text in Markdown?

Wrap text in double equals signs (==) to mark it as highlighted, similar to how a highlighter pen would mark printed text.

markdown
This is ==highlighted text== in a sentence.

On a renderer that supports this extension, it displays with a highlight background:

html
This is <mark>highlighted text</mark> in a sentence.
Highlight Syntax Is Not Universal

This syntax comes from various Markdown flavors (like the one used by Obsidian and some remark plugins), not from CommonMark or GFM. Without plugin support, ==text== renders as literal equals signs.


How Do I Write Subscript and Superscript?

Wrap text in single tildes (~) for subscript, or single carets (^) for superscript.

markdown
Water is H~2~O.
The formula is E = mc^2^.

On a supporting renderer, this displays with the wrapped text shifted below or above the baseline:

html
Water is H<sub>2</sub>O.
The formula is E = mc<sup>2</sup>.
Don't Confuse This With Strikethrough

A single tilde (~sub~) is subscript, while GFM strikethrough uses double tildes (~~text~~). Mixing these up is an easy mistake since the markers look similar at a glance.


How Do I Write Emoji Shortcodes?

An emoji shortcode wraps a name in colons, like :tada: or :rocket:. Platforms that support shortcodes convert them into the matching emoji character.

markdown
Great work team! :tada: :rocket:

On GitHub and similar platforms, this renders as:

Great work team! 🎉 🚀

Shortcode Names Are Platform-Specific

Not every platform recognizes the same shortcode names, and some don’t support shortcodes at all, rendering the colons and text literally instead. Stick to typing the emoji character directly if you need guaranteed cross-platform behavior.


Why Do These Extensions Need Plugins?

CommonMark and GFM both define fixed, versioned specifications. Anything outside those specs, including all four features in this article, is implemented independently by whichever tool renders your Markdown: a static site generator’s remark/rehype plugin chain, an editor like Obsidian, or a platform like GitHub. That means the exact same source file can render differently depending on where it’s viewed.


Summary Checklist

  • ==text== highlights text, on renderers that support it.
  • ~sub~ is subscript; ^sup^ is superscript. Don’t confuse subscript with GFM’s double-tilde strikethrough.
  • :shortcode: renders as an emoji on platforms that recognize the name.
  • All four are non-standard extensions, not part of CommonMark or GFM.
  • Test on your actual target platform before relying on any of these in published content.

Frequently Asked Questions

Will these render correctly on GitHub?

Partially. GitHub supports emoji shortcodes in issues, pull requests, and README files, but does not support the highlight, subscript, or superscript syntax shown here.

What happens if my renderer doesn’t support one of these?

The raw syntax characters print literally. ==text== shows as ==text==, ~sub~ shows as ~sub~, and so on, since there’s no fallback behavior defined for unsupported extensions.

Is there a standard emoji list I should stick to?

Not universally. Different platforms maintain their own shortcode lists (GitHub’s set differs slightly from Slack’s or Discord’s), so a shortcode that works on one platform may not exist on another.


Share_This Twitter / X
Vishnu
Written By

Vishnu

Founder & Principal Architect at MeshWorld. Senior engineer and instructor specializing in AI agent systems, scalable web architecture, and modern development workflows.

Enjoyed this article?

Support MeshWorld and help us create more technical content