← Glossary

Emoji shortcode - what :smile: actually means

Last updated: 2026-09-05·~4 min

This article takes about 4 minutes to read.

Type :fire: in Slack and 🔥 appears. The mechanism behind it is the emoji shortcode, a small but powerful conventions layer on top of Unicode.Emoji shortcodes are short, colon-delimited text strings that compatible apps convert into emoji glyphs. They originated in chat applications and persist as a productivity-friendly alternative to clicking through emoji pickers.

Definition

An emoji shortcode is a text identifier wrapped in colons (e.g., :thumbsup:) that an application substitutes with the corresponding emoji during rendering or sending. The substitution happens at the application layer, not in Unicode. Different apps maintain different shortcode registries, with significant overlap on common emoji and divergence on less common ones.

History

Shortcodes evolved from earlier text-based emoticons (:), :D). The colon-wrapped form spread through early chat apps and was adopted by Slack as a core input mechanism. From there, shortcodes spread to GitHub, Discord, Mattermost, Rocket.Chat, and beyond.

Major shortcode registries

CLDR Short Names

The Unicode Common Locale Data Repository (CLDR) provides short names for emoji, which some apps use as a reference shortcode set. CLDR names are localized for many languages, so "smiling face" has equivalents in Japanese, French, Spanish, etc.

Slack

Slack maintains its own shortcode set. Slack added custom emoji uploaded per workspace, which use the same colon syntax as built-ins. :lgtm: in one workspace might render as a custom approval graphic, while in another it's just text.

Discord

Discord uses a similar shortcode model with autocomplete as you type. Custom server emoji and animated emoji extend the syntax beyond Unicode glyphs.

GitHub

GitHub maintains a documented shortcode list used in issues, pull requests, comments, and commit messages. Common ones: :white_check_mark: ✅, :warning: ⚠️, :rocket: 🚀, :bug: 🐛. The list is similar but not identical to CLDR names.

Mattermost / Rocket.Chat

Open-source chat platforms maintain their own registries, with many names in common with Slack's set.

Convention patterns

  • Lowercase, words separated by underscores: :smiling_face:
  • Aliases for popular emoji: :+1: and :thumbsup: both → 👍
  • Skin-tone variants: :wave: for default 👋, :wave::skin-tone-3: for 👋🏽 in some apps
  • Custom emoji follow the same syntax in apps that support them: :shipit:, :lgtm:, :partyparrot:

Where shortcodes work and don't

ContextShortcode supportNotes
Slack, Discord✅ NativeInline conversion as you type
GitHub markdown✅ NativeRendered when displayed
Notion✅ NativeInline picker triggered by colon
Plain text files❌ NoStays as literal text
iMessage❌ NoUse the OS emoji picker instead
EmailVaries by clientUse OS picker

Practical productivity gains

  • Stay on the keyboard, no mouse trips to a picker
  • Searchable by partial name as you type
  • Custom workspace emoji become first-class team vocabulary
  • Composability: shortcodes work in markdown, code reviews, async messages, and bot replies

Limitations

  • Names diverge between apps - :thumbsup: in one tool might be :+1: elsewhere
  • Copy-pasting between apps strips shortcodes (whether the shortcode text or the Unicode emoji is stored varies by app)
  • Plain-text exports lose custom emoji entirely - they show as raw :custom_name: text
  • Auto-completion can occasionally substitute a shortcode you didn't intend (especially short ones like :p)

Common misconceptions

  • ❌ "Shortcodes are part of Unicode" → ✅ They're an application-layer convention
  • ❌ "All apps recognize the same shortcodes" → ✅ Significant overlap, but many app-specific names
  • ❌ "Custom shortcodes are portable" → ✅ They depend on the app or workspace defining them

Related terms

  • Codepoint - the underlying Unicode value the shortcode resolves to
  • ZWJ - the joiner used in some shortcode-resolved sequences

Was this article helpful?