Skip to main content

Markdown Design Tests

designmarkdown

This post is a living design reference. Every element below is rendered exactly as it will appear in production — useful for catching contrast issues, spacing problems, or typography quirks before they appear in real posts.


Headings

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Inline Typography

Regular paragraph text. The quick brown fox jumps over the lazy dog.

Bold text and italic text and bold italic text.

Strikethrough text for things that no longer apply.

Inline code snippet within a sentence.

A link to an external site and a link to another post.


Blockquotes

A single-level blockquote. Useful for callouts, epigraphs, and pulled quotes.

Nested blockquotes work too.

This is one level deeper.

And one level deeper still.


Lists

Unordered:

  • First item
  • Second item
    • Nested item
    • Another nested item
      • Deeply nested item
  • Third item

Ordered:

  1. First step
  2. Second step
    1. Sub-step A
    2. Sub-step B
  3. Third step

Task list:

  • Completed task
  • Another completed task
  • Incomplete task
  • Another incomplete task
    • Completed subtask
    • Incomplete subtask

Code Blocks

Plain block with no language:

plain text code block
no syntax highlighting applied

JavaScript:

function greet(name) {
  const message = `Hello, ${name}!`;
  console.log(message);
  return message;
}
 
greet("world");

TypeScript:

interface Post {
  title: string;
  date: string;
  published: boolean;
}
 
function getPost(slug: string): Promise<Post> {
  return fetch(`/api/posts/${slug}`).then((r) => r.json());
}

HTML:

<article class="prose">
  <h1>Title</h1>
  <p>A paragraph with <strong>bold</strong> and <em>italic</em> text.</p>
</article>

Ruby:

def palindrome?(str)
  str == str.reverse
end
 
puts palindrome?("racecar") # => true

CSS:

.prose {
  max-width: 65ch;
  line-height: 1.75;
  color: var(--foreground);
}

Unicode Text

  • Normal:

    0123456789; abcdefghijklmnopqrstuvwxyz; ABCDEFGHIJKLMNOPQRSTUVWXYZ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, pingüino 🐧

  • Circled:

    0①②③④⑤⑥⑦⑧⑨; ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ; ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ⓟⓘⓝⓖüⓘⓝⓞ 🐧

  • Circled:

    (neg) ⓿123456789; 🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩; 🅐🅑🅒🅓🅔🅕🅖🅗🅘🅙🅚🅛🅜🅝🅞🅟🅠🅡🅢🅣🅤🅥🅦🅧🅨🅩; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 🅟🅘🅝🅖ü🅘🅝🅞 🐧

  • Fullwidth:

    0123456789; abcdefghijklmnopqrstuvwxyz; ABCDEFGHIJKLMNOPQRSTUVWXYZ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, pingüino 🐧

  • Math bold :

    𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗; 𝐚𝐛𝐜𝐝𝐞𝐟𝐠𝐡𝐢𝐣𝐤𝐥𝐦𝐧𝐨𝐩𝐪𝐫𝐬𝐭𝐮𝐯𝐰𝐱𝐲𝐳; 𝐀𝐁𝐂𝐃𝐄𝐅𝐆𝐇𝐈𝐉𝐊𝐋𝐌𝐍𝐎𝐏𝐐𝐑𝐒𝐓𝐔𝐕𝐖𝐗𝐘𝐙; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝐩𝐢𝐧𝐠ü𝐢𝐧𝐨 🐧

  • Math bold Fraktur:

    0123456789; 𝖆𝖇𝖈𝖉𝖊𝖋𝖌𝖍𝖎𝖏𝖐𝖑𝖒𝖓𝖔𝖕𝖖𝖗𝖘𝖙𝖚𝖛𝖜𝖝𝖞𝖟; 𝕬𝕭𝕮𝕯𝕰𝕱𝕲𝕳𝕴𝕵𝕶𝕷𝕸𝕹𝕺𝕻𝕼𝕽𝕾𝕿𝖀𝖁𝖂𝖃𝖄𝖅; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝖕𝖎𝖓𝖌ü𝖎𝖓𝖔 🐧

  • Math bold italic:

    0123456789; 𝒂𝒃𝒄𝒅𝒆𝒇𝒈𝒉𝒊𝒋𝒌𝒍𝒎𝒏𝒐𝒑𝒒𝒓𝒔𝒕𝒖𝒗𝒘𝒙𝒚𝒛; 𝑨𝑩𝑪𝑫𝑬𝑭𝑮𝑯𝑰𝑱𝑲𝑳𝑴𝑵𝑶𝑷𝑸𝑹𝑺𝑻𝑼𝑽𝑾𝑿𝒀𝒁; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝒑𝒊𝒏𝒈ü𝒊𝒏𝒐 🐧

  • Math bold script:

    0123456789; 𝓪𝓫𝓬𝓭𝓮𝓯𝓰𝓱𝓲𝓳𝓴𝓵𝓶𝓷𝓸𝓹𝓺𝓻𝓼𝓽𝓾𝓿𝔀𝔁𝔂𝔃; 𝓐𝓑𝓒𝓓𝓔𝓕𝓖𝓗𝓘𝓙𝓚𝓛𝓜𝓝𝓞𝓟𝓠𝓡𝓢𝓣𝓤𝓥𝓦𝓧𝓨𝓩; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝓹𝓲𝓷𝓰ü𝓲𝓷𝓸 🐧

  • Math double-struck:

    𝟘𝟙𝟚𝟛𝟜𝟝𝟞𝟟𝟠𝟡; 𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫; 𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝕡𝕚𝕟𝕘ü𝕚𝕟𝕠 🐧

  • Math monospace:

    𝟶𝟷𝟸𝟹𝟺𝟻𝟼𝟽𝟾𝟿; 𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝚒𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣; 𝙰𝙱𝙲𝙳𝙴𝙵𝙶𝙷𝙸𝙹𝙺𝙻𝙼𝙽𝙾𝙿𝚀𝚁𝚂𝚃𝚄𝚅𝚆𝚇𝚈𝚉; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝚙𝚒𝚗𝚐ü𝚒𝚗𝚘 🐧

  • Math sans:

    𝟢𝟣𝟤𝟥𝟦𝟧𝟨𝟩𝟪𝟫; 𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓; 𝖠𝖡𝖢𝖣𝖤𝖥𝖦𝖧𝖨𝖩𝖪𝖫𝖬𝖭𝖮𝖯𝖰𝖱𝖲𝖳𝖴𝖵𝖶𝖷𝖸𝖹; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝗉𝗂𝗇𝗀ü𝗂𝗇𝗈 🐧

  • Math sans bold:

    𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵; 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇; 𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝗽𝗶𝗻𝗴ü𝗶𝗻𝗼 🐧

  • Math sans bold italic:

    0123456789; 𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯; 𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝙥𝙞𝙣𝙜ü𝙞𝙣𝙤 🐧

  • Math sans italic:

    0123456789; 𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻; 𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝘱𝘪𝘯𝘨ü𝘪𝘯𝘰 🐧

  • Parenthesized:

    0⑴⑵⑶⑷⑸⑹⑺⑻⑼; ⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵; ⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ⒫⒤⒩⒢ü⒤⒩⒪ 🐧

  • Regional Indicator:

    0123456789; 🇦🇧🇨🇩🇪🇫🇬🇭🇮🇯🇰🇱🇲🇳🇴🇵🇶🇷🇸🇹🇺🇻🇼🇽🇾🇿; 🇦🇧🇨🇩🇪🇫🇬🇭🇮🇯🇰🇱🇲🇳🇴🇵🇶🇷🇸🇹🇺🇻🇼🇽🇾🇿; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 🇵🇮🇳🇬ü🇮🇳🇴 🐧

  • Squared:

    0123456789; 🄰🄱🄲🄳🄴🄵🄶🄷🄸🄹🄺🄻🄼🄽🄾🄿🅀🅁🅂🅃🅄🅅🅆🅇🅈🅉; 🄰🄱🄲🄳🄴🄵🄶🄷🄸🄹🄺🄻🄼🄽🄾🄿🅀🅁🅂🅃🅄🅅🅆🅇🅈🅉; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 🄿🄸🄽🄶ü🄸🄽🄾 🐧

  • Squared (neg):

    0123456789; 🅰🅱🅲🅳🅴🅵🅶🅷🅸🅹🅺🅻🅼🅽🅾🅿🆀🆁🆂🆃🆄🆅🆆🆇🆈🆉; 🅰🅱🅲🅳🅴🅵🅶🅷🅸🅹🅺🅻🅼🅽🅾🅿🆀🆁🆂🆃🆄🆅🆆🆇🆈🆉; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 🅿🅸🅽🅶ü🅸🅽🅾 🐧

  • Tag󠀰󠀱󠀲󠀳󠀴󠀵󠀶󠀷󠀸󠀹󠀻󠀠󠁡󠁢󠁣󠁤󠁥󠁦󠁧󠁨󠁩󠁪󠁫󠁬󠁭󠁮󠁯󠁰󠁱󠁲󠁳󠁴󠁵󠁶󠁷󠁸󠁹󠁺󠀻󠀠󠁁:

    á󠀬󠀠é󠀬󠀠í󠀬󠀠ó󠀬󠀠ú󠀬󠀠ñ󠀻󠀠Á󠀬󠀠É󠀬󠀠Í󠀬󠀠Ó󠀬󠀠Ú󠀬󠀠Ñ󠀬󠀠󠁰󠁩󠁮󠁧ü󠁩󠁮󠁯󠀠🐧󠀠

  • A-cute pseudoalphabet:

    0123456789; ábćdéfǵhíjḱĺḿńőṕqŕśtúvẃxӳź; ÁBĆDÉFǴHíJḰĹḾŃŐṔQŔśTŰVẂXӲŹ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ṕíńǵüíńő 🐧

  • CJK+Thai pseudoalphabet:

    0123456789; ム乃cd乇キgんノフズレᄊ刀oアq尺丂イu√wメリ乙; ム乃cd乇キgんノフズレᄊ刀oアq尺丂イu√wメリ乙; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, アノ刀güノ刀o 🐧

  • Curvy 1 pseudoalphabet:

    0123456789; ค๒ƈɗﻉिﻭɦٱﻝᛕɭ๓กѻρ۹ɼรՇપ۷ฝซץչ; ค๒ƈɗﻉिﻭɦٱﻝᛕɭ๓กѻρ۹ɼรՇપ۷ฝซץչ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ρٱกﻭüٱกѻ 🐧

  • Curvy 2 pseudoalphabet:

    0123456789; αв¢∂єƒﻭнιנкℓмησρ۹яѕтυνωχуչ; αв¢∂єƒﻭнιנкℓмησρ۹яѕтυνωχуչ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ριηﻭüιησ 🐧

  • Curvy 3 pseudoalphabet:

    0123456789; ค๒ς๔єŦﻮђเןкɭ๓ภ๏קợгรՇยשฬאץչ; ค๒ς๔єŦﻮђเןкɭ๓ภ๏קợгรՇยשฬאץչ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, קเภﻮüเภ๏ 🐧

  • Faux Cyrillic pseudoalphabet:

    0123456789; аъсↁэfБЂіјкlмиорqѓѕтцvшхЎz; ДБҀↁЄFБНІЈЌLМИФРQЯЅГЦVЩЖЧZ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ріиБüіио 🐧

  • Faux Ethiopic pseudoalphabet:

    0123456789; ልጌርዕቿቻኗዘጎጋጕረጠክዐየዒዪነፕሁሀሠሸሃጊ; ልጌርዕቿቻኗዘጎጋጕረጠክዐየዒዪነፕሁሀሠሸሃጊ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, የጎክኗüጎክዐ 🐧

  • Math Fraktur pseudoalphabet:

    0123456789; 𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷; 𝔄𝔅ℭ𝔇𝔈𝔉𝔊ℌℑ𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔ℜ𝔖𝔗𝔘𝔙𝔚𝔛𝔜ℨ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, 𝔭𝔦𝔫𝔤ü𝔦𝔫𝔬 🐧

  • Rock Dots pseudoalphabet:

    012ӟ456789; äḅċḋëḟġḧïjḳḷṁṅöṗqṛṡẗüṿẅẍÿż; ÄḄĊḊЁḞĠḦЇJḲḶṀṄÖṖQṚṠṪÜṾẄẌŸŻ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ṗïṅġüïṅö 🐧

  • Small Caps pseudoalphabet:

    0123456789; ᴀʙᴄᴅᴇꜰɢʜɪᴊᴋʟᴍɴᴏᴩqʀꜱᴛᴜᴠᴡxyᴢ; ᴀʙᴄᴅᴇꜰɢʜɪᴊᴋʟᴍɴᴏᴩQʀꜱᴛᴜᴠᴡxYᴢ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ᴩɪɴɢüɪɴᴏ 🐧

  • Stroked pseudoalphabet:

    01ƻ3456789; Ⱥƀȼđɇfǥħɨɉꝁłmnøᵽꝗɍsŧᵾvwxɏƶ; ȺɃȻĐɆFǤĦƗɈꝀŁMNØⱣꝖɌSŦᵾVWXɎƵ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ᵽɨnǥüɨnø 🐧

  • Subscript pseudoalphabet:

    ₀₁₂₃₄₅₆₇₈₉; ₐbcdₑfgₕᵢⱼₖₗₘₙₒₚqᵣₛₜᵤᵥwₓyz; ₐBCDₑFGₕᵢⱼₖₗₘₙₒₚQᵣₛₜᵤᵥWₓYZ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ₚᵢₙgüᵢₙₒ 🐧

  • Superscript pseudoalphabet:

    ⁰¹²³⁴⁵⁶⁷⁸⁹; ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖqʳˢᵗᵘᵛʷˣʸᶻ; ᴬᴮᶜᴰᴱᶠᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾQᴿˢᵀᵁⱽᵂˣʸᶻ; á, é, í, ó, ú, ñ; Á, É, Í, Ó, Ú, Ñ, ᵖⁱⁿᵍüⁱⁿᵒ 🐧

  • Inverted pseudoalphabet:

    0Ɩ↊↋Һꞔ9∠86⸵ ɐqɔpǝɟƃɥıɾʞןɯuodbɹsʇnʌʍxʎz⸵ ꓯꓭↃꓷƎℲ⅁ɥıᒋꓘ⅂WuOꓒÒꓤSꓕꓵ𐌡MX⅄Z⸵ á’ é’ í’ ó’ ú’ ñ⸵ Á’ É’ Í’ Ó’ Ú’ Ñ’ dıuƃüıuo 🐧

  • Inverted pseudoalphabet (backwards):

    ���� ouı��ƃuıd ’�� ’�� ’�� ’�� ’�� ’�� ⸵�� ’�� ’�� ’�� ’�� ’�� ⸵Z⅄XM𐌡ꓵꓕSꓤÒꓒOuW⅂ꓘᒋıɥ⅁ℲƎꓷↃꓭꓯ ⸵zʎxʍʌnʇsɹbdouɯןʞɾıɥƃɟǝpɔqɐ ⸵68∠9ꞔҺ↋↊Ɩ0

  • Reversed pseudoalphabet:

    0߁23456789⁏ AdↄbɘꟻgHijklmᴎoqpᴙꙅTUvwxYz⁏ AdↃbƎꟻGHIJK⅃MᴎOꟼpᴙꙄTUVWXYZ⁏ á, é, í, ó, ú, ñ⁏ Á, É, Í, Ó, Ú, Ñ, qiᴎgüiᴎo 🐧

  • Reversed pseudoalphabet (backwards):

    ���� oᴎi��gᴎiq ,�� ,�� ,�� ,�� ,�� ,�� ⁏�� ,�� ,�� ,�� ,�� ,�� ⁏ZYXWVUTꙄᴙpꟼOᴎM⅃KJIHGꟻƎbↃdA ⁏zYxwvUTꙅᴙpqoᴎmlkjiHgꟻɘbↄdA ⁏98765432߁0


Emojis

Smiley Face Emojis

EmojiDescriptionCopy
🙂Slightly smiling face
☺️Smiling face
😃Smiling face with big eyes
😄Smiling face with smiling eyes
😁Beaming face with smiling eyes
😅Smiling face with tears
😆Grinning face
🤣Rolling on the floor laughing
😂Lauging with tears
🙃Upside down face
😉Winking face
😊Smiling face with smiling eyes
😇Smiling face with halo
😎Smiling face with sunglasses
🤓Nerdy face
🧐Face with monocle
🥳Partying face

Emotional Faces Emojis

EmojiDescriptionCopy
🥰Smiling face with hearts
😍Smiling face with heart eyes
🤩Star-struck
😘Face blowing kiss
😗Kissing face
☺️Smiling face
😚Kissing face with closed eyes
😙Kissng face with smiling eyes
🥲Smiling face with tears

Faces with Tongue Emojis

EmojiDescriptionCopy
😋Yummy face
😛Face with tongue
😜WInking face with tongue
🤪Zany face
😝Squinting face with tongue
🤑Money face with money tongue

Faces with Hands Emojis

EmojiDescriptionCopy
🤗Hugs
🤭Face with hand in mouth
🤫Shushing face
🤔Thinking face

Neutral Faces Emojis

EmojiDescriptionCopy
😐Neutral face
🤐Zipped mouth
🤨Face with raised eyebrow
😑Expressionless face
😶Face with no mouth
😏Smirking face
😒Unamused face
🙄Face with rolling eyes
😬Grimacing face
🤥Lying face

Sleepy Faces Emojis

EmojiDescriptionCopy
😪Sleepy face
😴Sleeping face
😌Relieved face
😔Pensive face
🤤Drooling face

Sick Faces Emojis

EmojiDescriptionCopy
😷Face with mask
🤒Face with thermometer
🤕Face with bandage
🤢Nauseous face
🤮Vomiting face
🤧Sneezing face
🥵Hot face
🥶Cold face
🥴Woozy face
😵Face with crossed-out eyes
🤯Face with exploding head

Concerned Faces Emojis

EmojiDescriptionCopy
😕Confused face
😟Worried face
🙁Slightly frowning face
☹️Frowning face
😮Face with open mouth
😯Hushed face
😲Astonished face
😳Flushed face
🥺Begging face
😦Frowning face with open mouth
😧Angushed face
😨Fearful face
😰Anxious face with sweat
😥Sad but relieved face
😢Crying face
😭Loudly crying face
😱Screaming face
😖Confounded face
😣Persevering face
😞Disappointed face
😓Downcast face with sweat
😩Weary face
😫Tired face
🥱Yawning face

Negative Faces Emojis

EmojiDescriptionCopy
😤Face with steam
😡Pouting face
😠Angry face
🤬Face with symbols on mouth
😈Smiling face with horns
👿Angry face with horns
💀Skull
☠️Skull and cross-bone

Costume Faces Emojis

EmojiDescriptionCopy
💩Pile of poo
🤡Clown
👹Ogre
👺Goblin
👻Ghost
👽Alien
👾Alien monster
🤖Robot

Faces that require more than one unicode character

😶‍🌫️ Face in clouds

EmojiDescriptionCopy
😮‍💨Face exhaling
😵‍💫Face with spiral eyes
❤️‍🔥Heart on fire
❤️‍🩹Mending heart
👁️‍🗨️Eye in speech bubble
🧔‍♂️Man with beard
🧔‍♀️Woman with beard
👨‍🦰Man with red hair
👨‍🦱Man with curly hair
👨‍🦳Man with white hair
👨‍🦲Man with bald head
👩‍🦰Woman with red hair
🧑‍🦰Person with red hair
👩‍🦱Woman with curly hair
🧑‍🦱Person with curly hair
👩‍🦳Woman with white hair
🧑‍🦳Person with white hair
👩‍🦲Woman with bald head
🧑‍🦲Person with bald head
👱‍♀️Woman with blond hair
👱‍♂️Man with blond hair

Cat Faces Emojis

EmojiDescriptionCopy
😺Grinnig cat
😸Grinning cat with smiling eyes
😹Grinning cat with tears
😻Smiling cat with heart eyes
😼Cat with wry smile
😽Kissing cat
🙀Weary cat
😿Crying cat
😾Pouting cat

Monkey Faces Emojis

EmojiDescriptionCopy
🙈See no evil monkey
🙉Hear no evil monkey
🙊Speak no evil monkey

Emotion Emojis

EmojiDescriptionCopy
💋Kiss
💌Love letter
💘Heart with arrow
💝Heart with ribbon
💖Sparking heart
💗Growing heart
💓Beating heart
💞Revolving heart
💕Two hearts
💟Heart decoration
❣️Heart exclamation
💔Broken heart
❤️‍🔥Heart on fire
❤️‍🩹Mending heart
❤️Red heart
🧡Orange heart
💛Yellow heart
💚Green heart
💙Blue heart
💜Purple heart
🤎Brown heart
🖤Black heart
🤍White heart
💯Hundred(correct)
💢Anger
💥Collision
💫Dizzy
💦Sweat droplets
💨Dashing away
🕳️Hole
💣Bomb
💬Message balloon
👁️‍🗨️Eye in speech bubble
🗨️Left speech bubble
🗯️Anger bubble
💭Thought balloon
💤zzz

Hands and other Body Parts Emojis

EmojiDescriptionCopy
👋Waving hand
🤚Raised back of hand
🖐️Hands with splayed finger
✋️Raised hand
🖖Vulcan salute
👌Ok
🤌Pinched fingers
🤏Pinched hand
✌️Victory hand
🤞Crossed fingers
🤟Love you
🤘Horn sign
🤙Call me hand
👈Index finger pointing left
👉Index finger pointing right
👆Index finger pointing up
👇Index finger pointing down
🖕Middle finger
☝️Forehand Index finger pointing up
🫵Index finger pointing at viewer
👍Thumbs up
👎Thumbs down
✊️Raised fist
👊Fist
🤛Left facing fist
🤜Right facing fist
👏Clapping hands
🙌Raised hands
👐Open hands
🤲Palms together hands
🤝Handshake
🙏Praying hands
✍️Writing hands
💅Nail polish
🤳Selfie hand
💪Flexed biceps
🦾Mechanical arm
🦵Leg
🦿Mechanical leg
🦶Foot
👂Ear
🦻Ear with earing aid
👃Nose
🧠Brain
👣Footprint
🫀Mechanical heart
🫁Lungs
🦷Tooth
🦴Bone
👀Eyes
👁️Eye
👅Nose
👄Mouth

Person Emojis

EmojiDescriptionCopy
🧑Person
👶Baby
🧒Child
👦Boy
👧Girl
👱Person with blonde hair
👨Man
🧔Bearded person
🧔‍♂️‍Bearded man
🧔‍♀️‍Bearded woman
👨‍🦰Man with red hair
👨‍🦱Man with curly hair
👨‍🦳Man with white hair
👨‍🦲Bald man
👩Woman
👩‍🦰Woman with red hair
👩‍🦱Woman with curly hair
👩‍🦳Woman with white hair
👩‍🦲Bald woman
👱‍♀️‍Woman with blonde hair
👱‍♂️‍Man with blonde hair
🧓Old person
👴Old man
👵Old woman
🙍Person frowning
🙍‍♂️Man frowning
🙍‍♀️Woman frowning
🙎‍♂️Man pouting
🙎‍♀️Woman pouting
🙅‍♂️Man gesturing no
🙅‍♀️Woman gesturing no
🙆‍♂️Man gesturing ok
🙆‍♀️Woman gesturing ok
💁‍♂️Man tipping hand
💁‍♀️Woman tipping hand
🙋‍♂️Man raising hand
🙋‍♀️Woman raising hand
🧏‍♂️Deaf man
🧏‍♀️Deaf woman
🙇‍♂️Man bowing
🙇‍♀️Woman bowing
🤦‍♂️Man facepalming
🤦‍♀️Woman facepalming
🤷‍♂️Man shrugging
🤷‍♀️Woman shrugging
🧑‍⚕️Health worker
👨‍⚕️Man health worker
👩‍⚕️Woman health worker
🧑‍🎓Student
👨‍🎓Man student
👩‍🎓Woman student
🧑‍🏫Teacher
👨‍🏫Man teacher
👩‍🏫Woman teacher
🧑‍⚖️Judge
👩‍⚖️Woman judge
🧑‍🌾Farmer
👨‍🌾Man farmer
👩‍🌾Woman farmer
🧑‍🍳Cook
👨‍🍳Man cook
👩‍🍳Woman cook
🧑‍🔧Mechanic
👨‍🔧Man mechanic
👩‍🔧Woman mechanic
🧑‍🏭Factory worker
👨‍🏭Man factory worker
👩‍🏭Woman factory worker
🧑‍💼Office worker
👨‍💼Man office worker
👩‍💼Woman factory worker
🧑‍🔬Scientist
👨‍🔬Man scientist
👩‍🔬Woman scientist
🧑‍💻Technologist
👨‍💻Man technologist
👩‍💻Woman technologist
🧑‍🎤Singer
👨‍🎤Man singer
👩‍🎤Woman singer
🧑‍🎨Artist
👨‍🎨Man artist
👩‍🎨Woman artist
🧑‍✈️Pilot
👨‍✈️Man pilot
👩‍✈️Woman pilot
🧑‍🚀Astronaut
👨‍🚀Man astronaut
👩‍🚀Womanh astronaut
🧑‍🚒Firefighter
👨‍🚒Man firefighter
👩‍🚒Woman firefighter
👮‍♂️Man police
👮‍♀️Woman police
🕵️‍♂️Man detective
🕵️‍♀️Woman detective
💂‍♂️Man guard
💂‍♀️Woman guard
👷‍♂️Man construction worker
👷‍♀️Woman construction worker
👳‍♂️Man wearing turban
👳‍♀️Woman wearing turban
🤵‍♂️Man in tuxedo
🤵‍♀️Woman in tuxedo
👰‍♂️Man with veil
👰‍♀️Woman with veil
🧑‍🍼Person feeding baby
👩‍🍼Woman feeding baby
👨‍🍼Man feeding baby
🧑‍🎄Mx Claus
🦸‍♂️Man superhero
🦸‍♀️Woman superhero
🦹‍♂️Man supervillain
🦹‍♀️Woman supervillain
🧙‍♂️Man mage
🧙‍♀️Woman mage
🧚‍♂️Man fairy
🧚‍♀️Woman fairy
🧛‍♂️Man vampire
🧛‍♀️Woman vampire
🧜‍♂️Merman
🧜‍♀️Mermaid
🧝‍♂️Man elf
🧝‍♀️Woman elf
🧞‍♂️Man genie
🧞‍♀️Woman genie
🧟‍♂️Man zombie
🧟‍♀️Woman zombie
💆‍♂️Man getting massage
💆‍♀️Woman getting massage
💇‍♂️Man getting haircut
💇‍♀️Woman getting haircut
🚶‍♂️Man walking
🚶‍♀️Woman walking
🧍‍♂️Man standing
🧍‍♀️Woman standing
🧎‍♂️Man kneeling
🧎‍♀️Woman kneeling
🧑‍🦯Person with white cane
👨‍🦯Man with white cane
👩‍🦯Woman with white cane
🧑‍🦼Person with motorized wheelchair
👨‍🦼Man in motorized wheelchair
👩‍🦼Woman in motorized wheelchair
🧑‍🦽Person in manual wheelchair
👨‍🦽Man in manual wheelchair
👩‍🦽Woman in manual wheelchair
🏃‍♂️Man running
🏃‍♀️Woman running
👯‍♂️Men with bunny ears
👯‍♀️Women with bunny ears
🧖‍♂️Man in steamy room
🧖‍♀️Woman in steamy room
🧗‍♂️Man climbing
🧗‍♀️Woman climbing
🏌️‍♂️Man golfing
🏌️‍♀️Woman golfing
🧗Person climbing
🧗‍♂️‍Man climbing
🧗‍♀️‍Woman climbing
🤺Person fencing
🏇Horse racing
⛷️Skier
🏂Snowboarder
🏌️Person playing golf
🏌️‍♂️‍Man playing golf
🏌️‍♀️‍Woman playing golf
🏄Person surfing
🏄‍♂️Man sufing
🏄‍♀️Woman surfing
🚣Person rowing boat
🚣‍♂️Man rowing boat
🚣‍♀️Woman rowing boat
🏊Person swimming
🏊‍♂️Man swimming
🏊‍♀️Woman swimming
⛹️Person bouncing ball
⛹️‍♂️Man bouncing ball
⛹️‍♀️Woman bouncing ball
🏋️Person lifting weight
🏋️‍♂️Man lifting weights
🏋️‍♀️Woman lifting weights
🚴Person cycling
🚴‍♂️Man cycling
🚴‍♀️Woman cycling
🚵Person mountain biking
🚵‍♂️Man mountain biking
🚵‍♀️Woman mountain biking
🤸Person cartwheeling
🤸‍♂️Man cartwheeling
🤸‍♀️Woman cartwheeling
🤼People wrestling
🤼‍♂️Men wrestling
🤼‍♀️Women wrestling
🤽Person playing water polo
🤽‍♂️Man playing water polo
🤽‍♀️Woman playing water polo
🤾Person playing handball
🤾‍♂️Man playing handball
🤾‍♀️Woman playing handblall
🤹Person juggling
🤹‍♂️Man juggling
🤹‍♀️Woman juggling
🧘Person lotus position
🧘‍♂️Man in lotus position
🧘‍♀️Woman in lotus position
🛀Person bathing
🛌Person in bed

Family Emojis

EmojiDescriptionCopy
👪Family
👨‍👩‍👦Family of man, woman and boy
👨‍👩‍👧Family of man, woman and girl
👨‍👩‍👧‍👦Family of man, woman, boy, and girl
👨‍👩‍👦‍👦Family of man, woman, boy, and boy
👨‍👩‍👧‍👧Family of man, woman, girl, and girl
👨‍👨‍👦Family of man, man, and boy
👨‍👨‍👧Family of man, man, and girl
👨‍👨‍👧‍👦Family of man, man, girl, and boy
👨‍👨‍👦‍👦Family of man, man, boy, and boy
👨‍👨‍👧‍👧Family of man, man, girl, and girl
👩‍👩‍👦Family of woman, woman, and boy
👩‍👩‍👧Family of woman, woman, and girl
👩‍👩‍👧‍👦Family of woman, woman, girl, and boy
👩‍👩‍👦‍👦Family of woman, woman, boy, and boy
👩‍👩‍👧‍👧Family of woman, woman, girl, and girl
👨‍👦Family of man and boy
👨‍👦‍👦Family of man, boy, and boy
👨‍👧Family of man and girl
👨‍👧‍👦Family of man, girl, and boy
👨‍👧‍👧Family of man, girl, and girl
👩‍👦Family of woman, and boy
👩‍👦‍👦Family of woman, boy, and boy
👩‍👧Family of woman, and girl
👩‍👧‍👦Family of woman, girl, and boy
👩‍👧‍👧Family of woman, girl, and girl
🧑‍🤝‍🧑People holding hands
👭Women holding hands
👫Woman and man holding hands
👬Men holding hands
💏Kiss
👩‍❤️‍💋‍👨Woman and man kissing
👨‍❤️‍💋‍👨Man and man kissing
👩‍❤️‍💋‍👩Woman and woman kissing
👩‍❤️‍👨Woman and man couple
👨‍❤️‍👨Man and man couple
👩‍❤️‍👩Woman and woman couple
💑Couple with heart
🗣️Person speaking
👤Bust in silhouhette
👥Busts in silhouette
🫂People hugging

Animals and Nature Emojis

EmojiDescriptionCopy
🐵Monkey face
🐒Monkey
🦍Gorilla
🦧Orangutan
🐶Dog face
🐕Dog
🦮Guide dog
🐕‍🦺Service dog
🐩Poodle
🐺Wolf
🦊Fox
🦝Racoon
🐱Cat face
🐈Cat
🐈‍⬛️Black Cat
🦁Lion
🐯Tiger face
🐅Tiger
🐆Leopard
🐴Horse face
🐎Horse
🦄Unicorn
🦓Zebra
🦌Deer
🦬Bison
🐮Cow face
🐄Cow
🐂Ox
🐃Water buffalo
🐷Pig face
🐖Pig
🐗Boar
🐽Pig nose
🐏Ram
🐑Ewe
🐐Goat
🐪Camel
🐫Two hump camel
🦙Llama
🦒Giraffe
🐘Elephant
🦣Mammoth
🦏Rhinoceros
🦛Hippopotamus
🐭Mouse face
🐁Mouse
🐀Rat
🐹Hamster
🐰Rabbit face
🐇Rabbit
🐿️Chipmunk
🦫Beaver
🦔Hedgehog
🦇Bat
🐻Bear
🐻‍❄️Polar bear
🐨Koala
🐼Panda
🦥Sloth
🦦Otter
🦨Skunk
🦘Kangaroo
🦡Badger
🐾Paw prints
🦃Turkey
🐔Chicken
🐓Rooster
🐣Hatching
🐤Baby chick
🐥Front-facing chick
🐦Bird
🐦‍⬛️Black bird
🐧Penguin
🕊️Dove
🦅Eagle
🦆Duck
🦢Swan
🦉Owl
🦤Dodo
🪶Feather
🦩Flamingo
🦜Peacock
🐸Frog
🐊Crocodile
🐢Turtle
🦎Lizard
🐍Snake
🐲Dragon face
🐉Dragon
🦕Sauropod
🦖Tyrannosaurus
🐳Spouting whale
🐋Whale
🐬Dolphin
🦭Seal
🐟Fish
🐠Tropical fish
🐡Blowfish
🦈Shark
🐙Octopus
🐚Spiral shell
🐌Snail
🦋Butterfly
🐛Bug
🐜Ant
🐝Honeybee
🪲Beetle
🐞Lady Beetle
🦗Cricket
🪳Cockroach
🕷️Spider
🕸️Spider web
🦂Scorpion
🦟Mosquito
🪰Fly
🪱Worm
🦠Microbe
💐Bouquet
🌸Cherry blossom
💮White flower
🏵️Rosette
🌹Rose
🥀Wilted flower
🌺Hibiscus
🌻Sunflower
🌼Blossom
🌷Tulip
🌱Seedling
🪴Potted plant
🌲Evergreen tree
🌳Deciduous plant
🌴Palm tree
🌵Cactus
🌾Sheaf of rice
🌿Herb
☘️Shamrock
🍀Four leaf clover
🍁Maple leaf
🍂Fallen leaf
🍃Leaf fluttering in wind
🪹Empty nest
🪺Nest with eggs

Food and Drinks Emojis

EmojiDescriptionCopy
🍇Grapes
🍈Melon
🍉Water melon
🍊Tangerine
🍋Lime
🍌Banana
🍍Pineapple
🥭Mango
🍎Red apple
🍏Green apple
🍐Pear
🍑Peach
🍒Cherries
🍓Strawberries
🫐Blueberries
🥝Kiwi fruit
🍅Tomato
🫒Olive
🥥Coconut
🥑Avocado
🍆Eggplant
🥔Potato
🥕Carrot
🌽Corn
🌶️Pepper
🫑Bell pepper
🥒Cucumber
🥬Leafy green
🥦Broccoli
🧄Garlic
🧅Onion
🍄Mushroom
🥜Peanuts
🫑Beans
🌰Chestnut
🍞Bread
🥐Croissant
🥖Baguette bread
🫓Flat bread
🥨Pretzel
🥯Bagel
🥞Pancake
🧇Waffle
🧀Cheese wedge
🍖Meat with bone
🍗Poultry leg
🥩Cut of meat
🥓Bacon
🍔Hamburger
🍟French fries
🍕Pizza
🌭Hot dog
🥪Sandwich
🌮Taco
🌯Burrito
🫔Tamale
🥙Stuffed flatbread
🧆Falafel
🥚Egg
🍳Cooking
🥘Shallow pan of food
🍲Pot of food
🫕Fondue
🥣Bowl with food
🥗Green salad
🍿Popcorn
🧈Butter
🧂Salt
🥫Canned food
🍱Bento box
🍘RIce cracker
🍙Rice ball
🍚Cooked rice
🍛Curry rice
🍜Steaming bowl
🍝Spaghetti
🍠Roasted sweet potato
🍢Oden
🍣Sushi
🍤Fried shrimp
🍥Fish cake with swiri
🥮Moon cake
🍡Dango
🥟Dumpling
🥠Fortune cookie
🥡Take out box
🦀Crab
🦞Lobster
🦐Shrimp
🦑Squid
🦪Oyster
🍨Ice cream
🍧Shaved ice cream
🍦Soft ice cream
🍩Doughnut
🍪Cookie
🎂Birthday cake
🍰Short cake
🧁Cup cake
🥧Pie
🍫Chocolate
🍬Candy
🍭Lollipop
🍮Custard
🍯Honey pot
🍼Baby bottle
🥛Glass of milk
☕️Hot beverage
🫖Teapot
🍵Teacup without handle
🍶Sake
🍾Bottle with popping cork
🍷Wine glass
🍸Cocktail glass
🍹Tropical drink
🍺Beer mug
🍻Clinking beer mug
🥂Clinking glasses
🥃Tumbler glass
🥤Cup with strawberry
🧋Bubble tea
🧃Beverage box
🧉Mate drink
🧊Ice
🥢Chopsticks
🍽️Fork and knife with plate
🍴Fork and knife
🥄Spoon
🔪Kitchen knife
🧋Jar
🏺Amphora

Travel and Places Emojis

EmojiDescriptionCopy
🌍️Globe showing Africa and Europe
🌎️Globe showing Americas
🌏️Globe showing Asia and Australia
🌐Globe with meridians
🗺️World map
🧭Compass
⛰️Mountain
🏔️Snowcap mountain
🌋Volcanic mountain
🗻Fuji mountain
🏕️Camping
🏖️Beach with umbrella
🏜️Desert
🏝️Desert island
🏞️National park
🏟️Stadium
🏛️Classical building
🏗️Building construction
🧱Brick
🪨Rock
🪵Wood
🛖Hut
🏘️Houses
🏚️Derelict house
🏠House
🏡House with garden
🏢Office building
🏣Japanese office
🏤Post office
🏥Hospital
🏦Bank
🏨Hotel
🏩Love hotel
🏪Convenience store
🏫School
🏬Department
🏭Factory
🏯Japanese castle
🏰Castle
💒Wedding house
🗼Tokyo tower
🗽Statue of liberty
⛪️Church
🕌Mosque
🛕Hindu temple
🕍Synagogue
⛩️Shinto shrine
🕋Kaaba
⛲️Fountain
⛺️Tent
🌁Foggy
🌃Night with stars
🏙️Citscape
🌅Sunrise
🌄Sunrise over mountains
🌆Cityscape at dusk
🌇Sunset
🌉Bridge at night
♨️Hot springs
🎠Carousel horse
🎡Ferris wheel
🎢Roller coaster
💈Barber poll
🎪Circus tent

Transport Emojis

EmojiDescriptionCopy
🚂Locomotive
🚃Railway car
🚄High speed train
🚅Bullet train
🚆Train
🚇Metro
🚈Light rail
🚉Station
🚊Tram
🚝Monorail
🚞Mountain railway
🚋Tram car
🚌us
🚍Oncoming bus
🚎Trolley bus
🚐Minibus
🚑Ambulance
🚒Fire engine
🚓Police car
🚔Oncoming police car
🚕Taxi
🚖Oncoming taxi
🚗Automobile
🚘Oncoming automobile
🚙Sport utility vehicle
🛻Pickup truck
🚚Delivery truck
🚛Articulated lorry
🚜Tractor
🏎️Racing car
🏍️Motorcycle
🛵Scooter
🦽Manual wheelchair
🦼Motorized wheelchair

Time Emojis

EmojiDescriptionCopy
⌛️Hourglass done
⏳️Hourglass starting
⌚️Watch
⏰️Alarm
⏱️Stopwatch
⏱️Timer clock
🕰️Mantelpiece clock
🕛Twelve O’clock
🕧Twelve-thirty
🕐One O’clock
🕜One-thirty
🕑Two O’clock
🕝Two-thirty
🕒Three O’clock
🕞Three-thirty
🕓Four O’clock
🕟Four-thirty
🕔Five O’clock
🕠Five-thirty
🕕Six O’clock
🕡Six-thirty
🕖Seven O’clock
🕢Seven-thirty
🕗Eight O’clock
🕣Eight-thirty
🕘Nine O’clock
🕤Nine-thirty
🕙Ten O’clock
🕥Ten-thirty
🕚Eleven O’clock
🕦Eleven-thirty

Sky and Weather Emojis

EmojiDescriptionCopy
🌑New moon
🌒Waxing crescent moon
🌓First quarter moon
🌔Waxing gibbous moon
🌕️Full moon
🌖Waning gibbous moon
🌗Last quarter moon
🌘Waning crescent moon
🌙Crescent moon
🌚New moon face
🌛First quarter moon face
🌜️Last quartermoon face
🌡️Thermometer
☀️Sun
🌝Full moon face
🌞Sun with face
🪐Ringed planet
⭐️Star
🌟Glowing star
🌠Shooting star
🌌Milky way
☁️Cloud
⛅️Sun behind cloud
⛈️Cloud with lighting and rain
🌤️Sun behind small cloud
🌥️Sun behind large cloud
🌦️Sun behind rain cloud
🌧️Cloud with rain
🌨️Cloud with snow
🌩️Cloud with lighting
🌪️Tornado
🌫️Fog
🌬️Wind face
🌀Cyclone
🌈Rainbow
🌂Closed umbrella
☂️Umbrella
☔️Umbrella with raindrops
⛱️Umbrella on ground
⚡️High voltage
❄️Snowflake
☃️Snowman
⛄️Snowman without snow
☄️Comet
🔥Fire
💧Droplet
🌊Water wave

Activity Emojis

EmojiDescriptionCopy
🎃Jack-o-lantern
🎄Christmas tree
🎆Fireworks
🎇Sparkler
🧨Firecracker
✨️Sparkles
🎈Balloon
🎉Party popper
🎊Confetti ball
🎋Tanabata tree
🎍Pine decoration
🎎Japanese dolls
🎏Carp streamer
🎑Moon viewing ceremony
🧧Red envelope
🎀Ribbon
🎁Wrapped gift
🎗️Reminder ribbon
🎟️Admission ticket
🎫Ticket

Award Medals Emojis

EmojiDescriptionCopy
🎖️Military medal
🏆Trophy
🏅Sports medal
🥇Gold medal - first position
🥈Silver medal - second position
🥉Bronze medal - third position

Sport Emojis

EmojiDescriptionCopy
⚽️Soccer ball
⚾️Baseball
🥎Softball
🏀Basketball
🏐Volleyball
🏈American football
🏉Rugby
🎾Tennis
🥏Flying disk
🎳Bowling
🏏Cricket
🏑Field hockey
🏒Ice hockey
🥍Lacrosse
🏓Ping pong
🏸Badminton
🥊Boxing glove
🥋Martial arts uniform
🥅Goal net
⛳️Flag in a hole
⛸️Ice skate
🎣Fishing pole
🤿Diving mask
🎽Running shirt
🎿Skis
🛷Sled
🥌Curling stone

Games Emojis

EmojiDescriptionCopy
🎯Bullseye
🪀Yo-yo
🪁Kite
🎱8 ball
🔮Crystal ball
🪄Magic wand
🧿Nazar amulet
🪬Hamsa
🎮Video game pad
🕹️Joystick
🎰Slot machine
🎲Game die
🧩Puzzle piece
🧸Teddy bear
🪅Piñata
🪆Nesting doll
♠️Spade suit
♥️Heart suit
♣️Club suit
♟️Chess pawn
🃏Joker
🀄️Mahjong red dragon
🎴Flower playing cards

Arts and Crafts Emojis

EmojiDescriptionCopy
🎭Performing arts
🖼️Framed picture
🎨Artist palette
🧵Thread
🪡Sewing needle with thread
🧶Yarn
🪢Knot

Clothing Objects Emojis

EmojiDescriptionCopy
👓Glasses
🕶️Sunglasses
🥽Goggles
🥼Lab coat
🦺Safety vest
👔Necktie
👕T-shirt
👖Jeans
🧣Scarf
🧤Gloves
🧥Coat
🧦Socks
👗Dress
👘Kimono
🥻Sari
🩱One piece suit
🩲Briefs
🩳Shorts
👙Bikini
👚Woman’s shirt
👛Purse
👜Handbag
👝Clutch bag
🛍️Shopping bags
🎒Backpack
🩴Thong sandals
👞Man’s shoe
👟Running shoe
🥾Hiking boot
🥿Flat shoe
👠High-heeled shoe
👡Woman’s sandal
🩰Ballet shoes
👢Woman’s boot
👑Crown
👒Woman’s hat
🎩Top hat
🎓Graduation cap
🧢Billed cap
🪖Military helmet
⛑️Rescue worker’s helmet
📿Prayer beads
💄Lipstick
💍Ring
💎Gemstone

Sound Emojis

EmojiDescriptionCopy
🔇Muted speaker
🔈Low volume speaker
🔉Mid volume speaker
🔊High volume speaker
📢Loudspeaker
📣Megaphone
📯Postal horn
🔔Bell
🔕Bell with slash
🎼Musical score
🎵Musical note
🎶Musical notes
🎙️Studio microphone
🎚️Level slider
🎛️Control knobs
🎤Microphone
🎧Headphone
📻Radio

Musical Instrument Emojis

EmojiDescriptionCopy
🎷Saxophone
🪗Accordion
🎸Guitar
🎹Musical keyboard
🎺Trumpet
🎻Violin
🪕Banjo
🥁Drum
🪘Long drum

Phone Emojis

EmojiDescriptionCopy
📱Mobile phone
📲Mobile phone with arrow
☎️Telephone
📞Telephone receiver
📟Pager
📠Fax machine

Computer Emojis

EmojiDescriptionCopy
🔋Full battery
🪫Low battery
🔌Electric plug
💻Laptop
🖥️Desktop computer
🖨️Printer
⌨️Keyboard
🖱️Mouse
🖲️Trackball
💽Computer disk
💾Floppy disk
💿Optical disk
📀DVD
🧮Abacus

Light and Video Emojis

EmojiDescriptionCopy
🎥Movie camera
🎞️Film frames
📽️Film Projector
🎬Clapper board
📺Television
📷Camera
📸Camera with flash
📹Video camera
📼Video cassette
🔍Magnifying glass tilted left
🔎Magnifying glass tilted right
🕯️Candle
💡Light bulb
🔦Flashlight
🏮Red pepper lantern
🪔Diya lamp

Book and Paper Emojis

EmojiDescriptionCopy
📔Notebook with decorative cover
📕Closed notebook
📖Opened notebook
📗Green book
📘Blue book
📙Orange book
📚Orange books
📓Notebook
📒Ledger
📃Page with curl
📜Scroll
📄Page facing up
📰Newspaper
🗞️Rolled-up newspaper
📑Bookmark tabs
🔖Bookmark
🏷️Label
💰Money bag
🪙Coin
💴Yen banknote
💵Dollar banknote
💶Euro banknote
💷Pound banknote
💸Money with wings
💳Credit card
🧾Receipt
💹Chart increase with Yen

Mail Emojis

EmojiDescriptionCopy
✉️Envelope
📧e-mail
📩Envelope with arrow
📤Outbox tray
📥Inbox tray
📦Package
📫Closed mailbox with raised flag
📪Closed mailbox with lowered flag
📬Open mailbox with raised flag
📭Open mailbox with lowered flag
📮Postbox
🗳️Ballot box with ballot

Writing Emojis

EmojiDescriptionCopy
✏️Pencil
✒️Black nib
🖋️Fountain pen
🖊️Pen
🖌️Paintbrush
🖍️Crayon
📝Memo

Office Emojis

EmojiDescriptionCopy
💼Briefcase
📁File folder
📂Open the folder
🗂️Card index dividers
📅Calender
📆Tear off calender
📇Card index
📈Increasing chart
📉Decreasing chart
📊Bar chart
📋Clipboard
📌Pushpin
📍Round pushpin
📎Paperclip
🖇️Linked paperclips
📏Straight ruler
📐Triangular ruler
✂️Scissors
🗃️Card file box
🗄️File cabinet
🗑️Waste basket

Lock Emojis

EmojiDescriptionCopy
🔒Locked
🔓Unlocked
🔏Locked with pen
🔐Locked with key
🔑Key
🗝️Old key

Tools Emojis

EmojiDescriptionCopy
🔨Hammer
🪓Axe
⛏️Pick
⚒️Hammer and pick
🛠️Hammer and wrench
🗡️Sword
⚔️Crossed swords
🔫Water gun
🪃Boomerang
🏹Bow and arrow
🛡️Shield
🪚Carpentry saw
🔧Wrench
🪛Screwdriver
🔩Bolt and nut
⚙️Wheel
🗜️Clamp
⚖️Balance scale
🦯White cane
🔗Link
⛓️Chains
🪝Hook
🧰Toolbox
🧲Magnet
🪜Ladder

Science Emojis

EmojiDescriptionCopy
⚗️Alembic
🧪Test tube
🧫Petri dish
🧬DNA
🔬Microscope
🔭Telescope
📡Satellite antenna

Medical Emojis

EmojiDescriptionCopy
💉Syringe
🩸A droplet of blood
💊Pill
🩹Adhesive bandage
🩼Crutch
🩺Stethoscope
🩻X-ray

Household Emojis

EmojiDescriptionCopy
🚪Door
🛗Elevator
🪞Mirror
🪟Window
🛏️Bed
🛋️Couch and lamp
🪑Chair
🚽Toilet
🪠Plunger
🚿Shower
🛁Bathtub
🪤Mouse trap
🪒Razor
🧴Lotion bottle
🧷Safety pin
🧹Broom
🧺Basket
🧻Roll of paper
🪣Bucket
🧼Soap
🫧Bubbles
🪥Toothbrush
🧽Sponge
🧯Fire extinguisher
🛒Shopping cart

Other Objects Emojis

EmojiDescriptionCopy
🚬Cigarette
⚰️Casket
🪦Headstone
⚱️Funeral urn
🗿Moai
🪧Placard
🪪ID Card

Symbols

EmojiDescriptionCopy
🏧ATM Sign
🚮Litter in bin
🚰Portable water
♿️Wheelchair symbol
🚹Men’s room symbol
🚺Women’s room symbol
🚻Restroom symbol
🚼Baby symbol
🚾Water closet
🛂Passport control
🛃Customs
🛄Baggage claim
🛅Left laugage

Warning Emojis

EmojiDescriptionCopy
⚠️Warning
🚸Children crossing
⛔️No entry
🚫Prohibited
🚳No bicycles
🚭No smoking
🚯No littering
🚱Non-portable water
🚷No pedestrians
📵No mobile phones
🔞No one under 18
☢️Radioactive
☣️Biohazard

Arrow Emojis

EmojiDescriptionCopy
⬆️Up Arrow
↗️Up-right arrow
➡️Right arrow
↘️Down-right arrow
⬇️Down arrow
↙️Down-left arrow
⬅️Left arrow
↖️Up-left arrow
↕️Up-down arrow
↔️Left arrow
↩️Right arrow curving left
↪️Left arrow curving right
⤴️Right arrow curving up
⤵️Right arrow curving down
🔃Clockwise vertical arrow
🔄Counterclockwise arrows button
🔙Back arrow
🔚End arrow
🔛On arrow
🔜Soon arrow
🔝Top arrow

Religion

EmojiDescriptionCopy
🛐Place of worship
⚛️Atom symbol
🕉️OM
✡️Star of David
☸️Wheel of Dharma
☯️Yin yang
✝️Latin cross
☦️Orthodox cross
☪️Star and crescent moon
☮️Peace
🕎Menorah
🔯Six-pointed star

Zodiac

EmojiDescriptionCopy
♈️Aries
♉️Taurus
♊️Gemini
♋️Cancer
♌️Leo
♍️Virgo
♎️Libra
♏️Scorpio
♐️Sagittarius
♑️Capricon
♒️Acquarius
♓️Pisces
Ophiucus

AV Symbols

EmojiDescriptionCopy
🔀Shuffle tracks
🔁Repeat all
🔂Repeat one
▶️Play
⏸️Pause
⏩️Fast-forward
⏭️Next track
⏯️Play or pause
◀️Reverse
⏪️Fast-reverse
⏮️Previous track
🔼Upwards
⏫️Fast-up
🔽Downwards
⏬️Fast down
⏹️Stop
⏺️Record
⏏️Eject
🎦Cinema
🔅Dim
🔆Bright
📶Network antenna bars
📳Vibration mode
📴Mobile phone off

Gender

EmojiDescriptionCopy
♀️Female
♂️Male
⚧️Transgender

Math Symbols

EmojiDescriptionCopy
✖️Times
➕️Plus
➖️Minus
➗️Divide
🟰Equals
♾️Infinity

Punctuation Symbols

EmojiDescriptionCopy
‼️Double exclamation
⁉️Exclamation and question mark
❓️Red question mark
❔️White question mark
❗️Red exclamation mark
❕️White exclamation mark
〰️Wavy dash

Currency

EmojiDescriptionCopy
💱Currency exchange
💲Heavy green dollar sign

Other Symbols

EmojiDescriptionCopy
⚕️Medical symbol
♻️Recycling symbol
⚜️Fleur-de-lis
🔱Trident
📛Name badge
🔰Japanese symbol for beginner
⭕️Hollow red circle
✅️Green box with checkmark
☑️Blue box with checkmark
✔️Checkmark
❌️Crossmark
❎️Green crossmark
➰️Curly loop
➿️Double curly loop
〽️Part alternation mark
✳️Eight-spoked asterisk
✴️Eight-pointed star
❇️Sparkle
©️Copyright symbol
®️Registered
™️Trademark

Keycap

EmojiDescriptionCopy
#️⃣# Keycap
*️⃣* Keycap
0️⃣0 Keycap
1️⃣1 Keycap
2️⃣2 Keycap
3️⃣3 Keycap
4️⃣4 Keycap
5️⃣5 Keycap
6️⃣6 Keycap
7️⃣7 Keycap
8️⃣8 Keycap
9️⃣9 Keycap
🔟10 Keycap

Alphanumeric Symbols

EmojiDescriptionCopy
🔠Input Latin uppercase
🔡Input Latin lowercase
🔢Input numbers
🔣Input symbols
🔤Input Latin letters
🅰️A blood type
🆎AB blood type
🅱️B blood type
🅾️O blood type
🆑CL button
🆒Cool button
🆓Free button
ℹ️Info button
🆔ID button
Ⓜ️Circled M
🆕New button
🆖NG button
🆗OK button
🅿️P button
🆘SOS button
🆙UP! button
🆚VS Button

Japanese Buttons

EmojiDescriptionCopy
🈁Japanese “here” button
🈂️Japanese “service charge” button
🈷️Japanese “monthly amount” button
🈶Japanese “not free of charge” button
🈯️Japanese “reserved” button
🉐Japanese “bargain” button
🈹Japanese “discount” button
🈚️Japanese “free of charge” button
🈲Japanese “prohibited” button
🉑Japanese “acceptable” button
🈸Japanese “application” button
🈴Japanese “passing grade” button
🈳Japanese “vacancy” button
㊗️Japanese “congratulations” button
㊙️Japanese “secret” button
🈺Japanese “open for business” button
🈵Japanese “no vacancy” button

Geometric Emojis

EmojiDescriptionCopy
🔴Red circle
🟠Orange circle
🟡Yellow circle
🟢Green circle
🔵Blue circle
🟣Purple circle
🟤Brown circle
⚫️Black circle
⚪️White circle
🟥Red square
🟧Orange square
🟨Yellow square
🟩Green square
🟦Blue square
🟪Purple square
🟫Brown square
⬛️Black square
⬜️White square
🔶Large orange diamond
🔷Large blue diamond
🔸Small orange diamond
🔹Small blue diamond
🔺Red triangle pointed up
🔻Red triangle pointed down
💠Diamond with a dot
🔘Radio button
🔳White square button
🔲Black square button

Flags

EmojiDescriptionCopy
🏁Chequered flag
🚩Triangular flag
🎌Crossed flag
🏴Black flag
🏳️White flag
🏳️‍🌈Rainbow flag
🏳️‍⚧️Transgender Flag
🏴‍☠️Pirate flag

Country Flags

EmojiDescriptionCopy
🇦🇨Ascension Island flag
🇦🇩Andorra flag
🇦🇪UAE flag
🇦🇫Afghanistan flag
🇦🇬Antigua & Barbuda flag
🇦🇮Anguilla flag
🇦🇱Albania
🇩🇿Algeria flag
🇦🇲Armenia flag
🇦🇴Angola flag
🇦🇶Antarctica flag
🇦🇷Argentina flag
🇦🇸American Samoa flag
🇦🇹Austria flag
🇦🇺Australia flag
🇦🇼Aruba flag
🇦🇽Åland Islands flag
🇦🇿Azerbaijan flag
🇧🇦Bosnia & Herzegovina flag
🇧🇩Bangladesh flag
🇧🇪Belgium flag
🇧🇫Burkina Faso flag
🇧🇬Bulgaria flag
🇧🇭Bahrain flag
🇧🇮Burundi flag
🇧🇯Benin Republic flag
🇧🇱St. Barthélemy flag
🇧🇲Bermuda flag
🇧🇳Brunei flag
🇧🇴Bolivia flag
🇧🇶Caribbean Netherlands flag
🇧🇷Brazil flag
🇧🇸Bahamas flag
🇧🇹Bhutan flag
🇧🇻Bouvet Island flag
🇧🇼Botswana flag
🇧🇾Belarus flag
🇧🇿Belize flag
🇨🇦Canada flag
🇨🇨Cocos (Keeling) Islands flag
🇨🇩DR Congo flag
🇨🇫Central African Republic flag
🇨🇬Congo Brazzaville flag
🇨🇭Switzerland flag
🇨🇮Côte d’Ivoire flag
🇨🇰Cook Islands flag
🇨🇱Chile flag
🇨🇲Cameroon flag
🇨🇳China flag
🇨🇴Columbia flag
🇨🇵Clipperton Island flag
🇨🇷Costa Rica flag
🇨🇺Cuba flag
🇨🇻Cape Verde flag
🇨🇼Curaçao flag
🇨🇽Christmas Island flag
🇨🇾Cyprus flag
🇨🇿Czech Republic flag
🇩🇪Germany flag
🇩🇬Diego Garcia flag
🇩🇯Djibouti flag
🇩🇰Denmark flag
🇩🇲Dominica flag
🇩🇴Dominican Republic flag
🇪🇦Ceuta & Melilla flag
🇪🇨Ecuador flag
🇪🇪Estonia flag
🇪🇬Egypt flag
🇪🇭Western Sahara flag
🇪🇷Eritre flag
🇪🇸Spain flag
🇪🇹Ethiopia flag
🇪🇺European Union flag
🇫🇮Finalnd flag
🇫🇯Fiji Island flag
🇫🇰Falkland Islands flag
🇫🇲Micronesia flag
🇫🇴Faroe Islands flag
🇫🇷France flag
🇬🇦Gabon flag
🇬🇧United Kingdom flag
🇬🇩Grenada flag
🇬🇪Georgia flag
🇬🇫French Guiana flag
🇬🇬Guernsey flag
🇬🇭Ghana flag
🇬🇮Gibraltar flag
🇬🇱Greenland flag
🇬🇲Gambia flag
🇬🇳Guinea flag
🇬🇵Guadeloupe flag
🇬🇶Equatorial Guinea flag
🇬🇷Greece flag
🇬🇸South Georgia & South Sandwich Islands flag
🇬🇹Guatemala flag
🇬🇺Guam flag
🇬🇼Guinea Bissau flag
🇬🇾Guyana flag
🇭🇰Hong Kong SAR China flag
🇭🇲Heard & McDonald Islands flag
🇭🇳Honduras flag
🇭🇷Croatia flag
🇭🇹Haiti flag
🇭🇺Hungary flag
🇮🇨Canary Islands flag
🇮🇩Indonesia flag
🇮🇪Ireland flag
🇮🇱Israel flag
🇮🇲Isle of Man flag
🇮🇳India flag
🇮🇴British Indian Ocean Territory flag
🇮🇶Iraq flag
🇮🇷Iran flag
🇮🇸Iceland flag
🇮🇹Italy flag
🇯🇪Jersey flag
🇯🇲Jamaica flag
🇯🇴Jordan flag
🇯🇵Japan flag
🇰🇪Kenya flag
🇰🇬Kyrgyzstan flag
🇰🇭Cambodia flag
🇰🇮Kiribati flag
🇰🇲Comoros flag
🇰🇳St. Kitts & Nevis flag
🇰🇵North Korea flag
🇰🇷South Korea flag
🇰🇼Kuwait flag
🇰🇾Cayman Islands flag
🇰🇿Kazakhstan flag
🇱🇦Laos flag
🇱🇧Lebanon flag
🇱🇨St. Lucia flag
🇱🇮Liechtenstein flag
🇱🇰Sri Lanka flag
🇱🇷Liberia flag
🇱🇸Lesotho flag
🇱🇹Lithuania flag
🇱🇺Luxembourg flag
🇱🇻Latvia flag
🇱🇾Libya flag
🇲🇦Morocco flag
🇲🇨Monaco flag
🇲🇩Moldova flag
🇲🇪Montenegro flag
🇲🇫St. Martin flag
🇲🇬Madagascar flag
🇲🇭Marshall Islands flag
🇲🇰North Macedonia flag
🇲🇱Mali flag
🇲🇲Myanmar flag
🇲🇳Mongolia flag
🇲🇴Macao SAR China flag
🇲🇵Northern Mariana Islands flag
🇲🇶Martinique flag
🇲🇷Mauritania flag
🇲🇸Montserrat flag
🇲🇹Malta flag
🇲🇺Mauritius flag
🇲🇻Maldives flag
🇲🇼Malawi flag
🇲🇽Mexico flag
🇲🇾Malaysia flag
🇲🇿Mozambique flag
🇳🇦Namibia flag
🇳🇨New Caledonia flag
🇳🇪Niger Republic flag
🇳🇬Nigeria flag
🇳🇫Norfolk Island flag
🇳🇮Nicaragua flag
🇳🇱Netherlands flag
🇳🇴Norway flag
🇳🇵Nepal flag
🇳🇷Nauru flag
🇳🇺Niue flag
🇳🇿New Zealand flag
🇴🇲Oman flag
🇵🇦Panama flag
🇵🇪Peru flag
🇵🇫French Polynesia flag
🇵🇬Papua New Guinea flag
🇵🇭Philippines flag
🇵🇰Pakistan flag
🇵🇱Poland flag
🇵🇲St. Pierre & Miquelon flag
🇵🇳itcairn Islands flag
🇵🇷Puerto Rico flag
🇵🇸Palestinian Territories flag
🇵🇹Portugal flag
🇵🇼Palau flag
🇵🇾Paraguay flag
🇶🇦Qatar flag
🇷🇪Réunion flag
🇷🇴Romania flag
🇷🇸Serbia flag
🇷🇺Russia flag
🇷🇼Rwanda flag
🇸🇦Saudi Arabia flag
🇸🇧Solomon Islands flag
🇸🇨Seychelles flag
🇸🇩Sudan flag
🇸🇪Sweden flag
🇸🇬Singapore flag
🇸🇭St. Helena flag
🇸🇮Slovenia flag
🇸🇯Svalbard & Jan Mayen flag
🇸🇰Slovakia flag
🇸🇱Sierra Leone flag
🇸🇲San Marino flag
🇸🇳Senegal flag
🇸🇴Somalia flag
🇸🇷Suriname flag
🇸🇸South Sudan flag
🇸🇹São Tomé & Príncipe flag
🇸🇻El Salvador flag
🇸🇽Saint Maarten flag
🇸🇾Syria flag
🇸🇿Eswatini flag
🇹🇦Tristan da Cunha flag
🇹🇨Turks & Caicos Islands flag
🇹🇩Chad flag
🇹🇫French Southern Territories flag
🇹🇬Togo flag
🇹🇭Thailand flag
🇹🇯Tajikistan flag
🇹🇰Tokelau flag
🇹🇱Timor-Leste flag
🇹🇲Turkmenistan flag
🇹🇳Tunisia flag
🇹🇴Tonga flag
🇹🇷Turkey flag
🇹🇹Trinidad & Tobago flag
🇹🇻Tuvalu flag
🇹🇼Taiwan flag
🇹🇿Tanzania flag
🇺🇦Ukraine flag
🇺🇬Uganda flag
🇺🇲U.S. Outlying Islands flag
🇺🇳United Nations flag
🇺🇸United States flag
🇺🇾Uruguay flag
🇺🇿Uzbekistan flag
🇻🇦Vatican City flag
🇻🇨St. Vincent & Grenadines flag
🇻🇪Venezuela flag
🇻🇬British Virgin Islands flag
🇻🇮U.S. Virgin Islands flag
🇻🇳Vietnam flag
🇻🇺Vanuatu flag
🇼🇫Wallis & Futuna flag
🇼🇸Samoa flag
🇽🇰Kosovo flag
🇾🇪Yemen flag
🇾🇹Mayotte flag
🇿🇦South Africa flag
🇿🇲Zambia flag
🇿🇼Zimbabwe flag
🏴󠁧󠁢󠁥󠁮󠁧󠁿England flag
🏴󠁧󠁢󠁳󠁣󠁴󠁿Scotland flag
🏴󠁧󠁢󠁷󠁬󠁳󠁿Wales flag

Tables

FeatureSupportedNotes
Headingsh1 through h6
Bold / Italic** and * syntax
TablesGFM extension
Task listsGFM extension
FootnotesNot enabled in this renderer
WikilinksObsidian-only syntax

Left-aligned, center-aligned, and right-aligned columns:

LeftCenterRight
CellCellCell
Longer cellLonger cellLonger cell

Horizontal Rules

Three consecutive hyphens produce a thematic break:



HTML Elements

Foldable content via <details>:

Click to expand

This content is hidden by default. Useful for spoilers, long asides, or supplementary material that would otherwise break reading flow.

Another collapsible section

Each details block is independent. Both can be open at the same time.

Keyboard keys with <kbd>:

Press Cmd + K to open the command palette. Use Tab to navigate.

Highlighted text with <mark>:

The most important word in this sentence is highlighted for emphasis.


Images

Local image with alt text:

A placeholder image representing content


Long-form Prose

The section below tests how extended body copy renders — line length, paragraph spacing, and reading comfort at different font sizes and color themes.


JavaScript is a language that I love which nonetheless has more than its fair share of weird warts. I can live with the strange syntax choices and the various foot-guns that cannot be removed without breaking backwards compatibility. But while I’ve come to terms with the bad features of JavaScript, I still struggle with the missing features. Consider how equality works in JavaScript:

let x = [1, 2, 3];
let y = [1, 2, 3];
let z = x;
 
x === y // => false
x === z // => true

Here x !== y because objects are compared with reference equality: x and y have the same contents but refer to different objects. In some cases, this behavior is exactly what you want: x and y may be identical now, but they are not interchangeable in the way that x and z are. If we think of the objects at x and y as locations where state lives, it is crucially important that we can distinguish between these locations.

But in a lot of cases, we just want to know if two objects have the same contents — we want to know if they are structurally equivalent — and JavaScript has no built-in way to answer that. Instead, we have to depend on third-party workarounds, which can have significant file size costs and lack the interoperability of standardized solutions.

Shallow and Deep Equality

The most common approaches to testing structural equality in JavaScript are “shallow” and “deep” equality functions. Shallow equality (as used by “pure components” in React) compares each property in a pair of objects or arrays; if the values of each object’s property are equal by reference equality, then the objects are structurally equal. “Deep” equality, as in Node’s assert module or Lodash’s isEqual, applies this recursively — two objects are deeply equal if the values of each object’s property are deeply equal.

However, there are a number of implementation difficulties and edge cases that complicate this:

  • How do you compare objects with circular references?
  • If objects have identical properties but different prototypes, are they equal?
  • How should get/set properties be handled?
  • Should objects compare their non-enumerable properties?
  • Keys in an object are ordered — should that matter for structural equality?

No deep equality function will provide a satisfactory answer for all of these edge cases, which has made TC39 reluctant to standardize. But for the sake of argument, what if the behavior of Lodash’s isEqual entered the language as Object.equals? Would that be sufficient?

Equality Protocols

Not quite. ES6 introduced Map and Set; while objects could only support strings as keys, maps and sets could use any object as a key. But maps and sets use reference equality for their keys, which dramatically limits how useful objects-as-keys can be:

let map = new Map();
map.set({ x: 1, y: 2 }, 3);
map.get({ x: 1, y: 2 }); // => undefined

It is not enough to have one function that supports structural equality; it has to permeate the language. Libraries like Immutable.js or Mori that support structural equality do so by implementing their own maps, sets, objects, and arrays that speak a common protocol. JavaScript would probably use a well-known symbol similar to the Iterator protocol:

class Record {
  [Symbol.equals](other) { /* ... */ }
  [Symbol.hashCode]() { /* ... */ }
}

The major problem here is that, to preserve backward compatibility, this would either require new object types or new map and set types. There is also the “moral hazard” of incorrect or inappropriate implementations of equality and hashing — Java, for example, has a notoriously slow and unreliable implementation of URL equality.

Immutable Records

Let’s return to the original premises — what does reference equality imply? Consider strings:

class Foo {}
let x = "Foo";
x === Foo.name; // => true

x and Foo.name aren’t stored at the same location in memory, but are considered equivalent. Why? Because they are functionally identical; strings that are === equivalent have no distinguishing properties, and there is no scenario where one would ever need to distinguish between one instance of "Foo" from another. Furthermore, two equal strings can never become unequal because they are immutable.

These properties — indistinguishability and immutability — could hold for more complex structures as well. The immutable data structures proposal for JavaScript follows this approach: instead of adding a protocol for comparing arbitrary objects, add data structures that can be functionally identical, and therefore safely compared using ===.

There are a few reasons why this proposal is a better fit for JavaScript than the others:

  1. It introduces new objects but does not change any existing ones, avoiding backwards compatibility issues.
  2. It does not require any new operators, functions, or protocols, because immutable records compare with === and can work as keys in existing maps and sets.
  3. It avoids the edge cases with deep equality because immutable records have no prototype chain and only enumerable “normal” fields.

Conclusions

It’s worth noting that none of these proposals are remotely novel. JavaScript users have probably been writing deep equality functions since day one. Equality and hashing protocols are present in nearly every other language created in the last thirty years. Structural equality-by-default for immutable data structures is fundamental to functional programming.

Each of these has been proposed in some form or another for official inclusion in the language, but ultimately dismissed — deep equality for its limitations and unavoidable edge cases, equality and hashing protocols for their complexity and possibility for abuse, and immutability for implementation difficulties and lack of interest.

“JavaScript is a big tent language, and the most JavaScript-y solution would be to adopt all of these approaches.”

Frankly, JavaScript must adopt some form of structural equality. The status quo is unacceptable; structural equality is as fundamental a feature to modern programming as closures, dictionaries, or lexical scope.


Additional Supported Features

The features below are produced by the existing remark + remark-gfm + remark-html pipeline but were missing from the original test bed.

Reference-style links

This paragraph contains a full reference link and a shortcut reference link. References resolve to URLs defined elsewhere in the document.

Autolinks

Bare URL in angle brackets: https://commonmark.org. Email autolink: contact@cofuente.io. GFM also linkifies bare URLs without brackets: https://spec.commonmark.org and contact@cofuente.io.

Hard line break

First line of a stanza.
Second line forced by two trailing spaces.
Third line.

Escape sequences

Literal asterisks: *not bold*. Literal underscore: _not italic_. Literal backtick: `code`. Backslash: \. Literal square brackets: [not a link].

Image with title attribute

A placeholder image

Image inside a link

A clickable placeholder

Multi-paragraph list items

  1. First item, first paragraph.

    First item, second paragraph (continued via 4-space indent).

  2. Second item.

    • Nested bullet inside a multi-paragraph item.
    • Another nested bullet.
  3. Third item.

Code block inside a list item

  • A list item containing a fenced block:

    const inside = 'list item'
  • And another item after it.

Code block inside a blockquote

A blockquote can contain code:

const inside = 'blockquote'

…and continue afterwards.

Indented code block (4-space)

function indented() {
  return "no language hint, four leading spaces";
}

Inline code containing backticks

Use double backticks to embed `code with a backtick` inline. You can also embed ` (a single backtick) by itself.

Footnotes

This sentence ends with a footnote reference.1 The same note can be referenced again,1 and notes can contain inline code, emphasis, and links to external sites.2

Tables with inline formatting

ConceptExampleReference
Boldinline codelink
Italicstrikethroughhttps://example.com
codebold + code[shortcut][]
Combined**not bold inside code**italic link

Subscript and superscript

Water is H2O. Einstein’s equation is E = mc2. The mass of an electron is roughly 9.109 × 10−31 kg, and Avogadro’s number is 6.022 × 1023.

Abbreviations via <abbr>

The CSS specification is maintained by the W3C, while HTML and the DOM are jointly governed by the WHATWG.

Figure with caption

A placeholder image
Figure 1. A placeholder image with a caption, rendered via raw HTML pass-through.

Additional inline HTML

This sentence demonstrates small text, underlined text, strikethrough via tag, inserted text, deleted text, and a short inline quotation.

Additional code-block language coverage

Bash:

#!/usr/bin/env bash
set -euo pipefail
for f in *.md; do
  echo "Processing $f"
done

Shell session with prompts:

$ npm ci
added 412 packages in 8s
$ npm run build

Python:

def fibonacci(n: int) -> list[int]:
    a, b = 0, 1
    out: list[int] = []
    for _ in range(n):
        out.append(a)
        a, b = b, a + b
    return out

JSON:

{
  "name": "cofuente.io",
  "private": true,
  "scripts": {
    "dev": "next dev"
  }
}

YAML:

name: ci
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci

SQL:

SELECT slug, title, published_at
FROM posts
WHERE published_at IS NOT NULL
ORDER BY published_at DESC
LIMIT 10;

TSX:

import { useState } from 'react'
 
export function Counter({ start = 0 }: { start?: number }) {
  const [n, setN] = useState(start)
  return <button onClick={() => setN(n + 1)}>{n}</button>
}

Diff:

- const old = "before";
+ const next = "after";
  const unchanged = true;

Dockerfile:

FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["npm", "start"]

Markdown (self-referential):

# Heading
 
> Blockquote with `inline code` and **bold**.
 
- Task list
- [ ] Unchecked
- [x] Checked
 
```js
const fenced = 'code inside markdown fence'
```

Plugin Features

The features below depend on plugins layered onto the pipeline beyond remark-gfm. If any of these render as plain text instead of their styled form, the corresponding plugin is missing from src/lib/blog.ts.

LaTeX math — remark-math + rehype-katex

Inline math: the Pythagorean theorem a2+b2=c2a^2 + b^2 = c^2 relates the sides of a right triangle, and Euler’s identity eiπ+1=0e^{i\pi} + 1 = 0 ties together five fundamental constants.

Block math, the quadratic formula:

x=b±b24ac2ax = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

A definite integral:

ex2dx=π\int_{-\infty}^{\infty} e^{-x^2} \, dx = \sqrt{\pi}

A summation with subscripts and Greek letters:

i=1nαiβi=α,β\sum_{i=1}^{n} \alpha_i \cdot \beta_i = \langle \alpha, \beta \rangle

A 2×2 matrix and its determinant:

det(abcd)=adbc\det \begin{pmatrix} a & b \\ c & d \end{pmatrix} = ad - bc

A piecewise function:

f(x)={x2if x0x2if x<0f(x) = \begin{cases} x^2 & \text{if } x \geq 0 \\ -x^2 & \text{if } x < 0 \end{cases}

Syntax highlighting — rehype-pretty-code (Shiki)

Plain fenced blocks (above in the Code Blocks section) and the language-tagged blocks here both run through Shiki and pick up tokenized colors. The same theme pair is used everywhere: github-light in light mode, github-dark-dimmed in dark mode.

Highlighted lines via meta-string {2,4-5}:

function fizzbuzz(n: number): string {
  if (n % 15 === 0) return 'FizzBuzz'
  if (n % 3 === 0) return 'Fizz'
  if (n % 5 === 0) return 'Buzz'
  return String(n)
}

Inline highlight markers via // [!code highlight]:

const stable = 'noisy'
const important = 'this line is highlighted'
const also_stable = 'noisy'

Line numbers via showLineNumbers:

def quicksort(xs):
    if len(xs) <= 1:
        return xs
    pivot = xs[len(xs) // 2]
    left  = [x for x in xs if x < pivot]
    mid   = [x for x in xs if x == pivot]
    right = [x for x in xs if x > pivot]
    return quicksort(left) + mid + quicksort(right)

Inline code with a language hint also gets highlighted: const x: number = 42 and print("hi").

GitHub-style alerts — remark-github-blockquote-alert

NOTE

Useful information that users should know, even when skimming content.

TIP

Helpful advice for doing things better or more easily.

IMPORTANT

Key information users need to know to achieve their goal.

WARNING

Urgent info that needs immediate user attention to avoid problems.

CAUTION

Advises about risks or negative outcomes of certain actions.

Smart typography — remark-smartypants

Quotes turn curly: “double quotes” and ‘single quotes’ should now be typographic, not straight. Apostrophes resolve correctly in contractions like “I don’t think it’s a problem” and possessives like “the cat’s paw”. Em dashes from --- — like this — and en dashes from -- for ranges, e.g. pages 12 — 18 or the years 1939—1945. Ellipses from ... should collapse to a single …. None of this should fire inside code spans -- like ---this---, where straight characters must remain.

Footnotes

  1. A short footnote. 2

  2. A longer footnote that demonstrates wrapping. Footnotes are collected at the end of the rendered post regardless of where each marker is placed in the source.