akskokki124 downloadsType :shortcode: to render your own custom emoji image anywhere, just like chatting in Discord/Slack. The underlying note stays as plain text.

Type :shortcode: and it turns into your own custom emoji image as you type. The note itself still just contains the plain text underneath; the image is a simple client-side swap that behaves like a Discord/Slack emoji.
I'm sort of addicted to my Discord/Slack emotes; they're just part of the way I think when typing now. I wanted an easy way to express myself in the same way in Obsidian notes. Icon Shortcodes and similar plugins do far more than that (icon packs, pickers, a bunch of settings) and it was just too much for me while lacking some of the simple polish and customisation I wanted. This just renders :shortcode: as a custom image, as soon as you finish typing it.
:shortcode: becomes the image the moment you finish typing it.: pops up a fuzzy-matched suggestion list, so :peha finds peepoHappy. Uses the same fuzzy matcher as Obsidian's quick switcher.:shortcode:. Can be configured to render as text in Source/Live Editing views.Enable the plugin.
Drop image files into the emojis folder in your vault root (created automatically the first time the plugin loads). The filename becomes the shortcode:
emojis/peepoHappy.png → :peepoHappy:emojis/catJam.gif → :catJam:Supported formats: png, gif, jpg, jpeg, webp, svg, avif.
Start typing : anywhere in a note.
Shortcode matching is case-sensitive, so :cat: and :Cat: can be two different emoji. The autocomplete search is case-insensitive though, so you can just type in lowercase and still find them.
emojis)28px)Changes in the emoji folder get picked up automatically. There's also a "Refresh custom emojis" command if you want to force it.
No icon-pack browser, no bundled emoji sets, no remote/URL-based images, no picker UI beyond the inline autocomplete. For a fuller icon management system, Icon Shortcodes is probably what you want instead. This one's meant to stay small.
It also isn't built to play nice with other plugins that use the same :shortcode: syntax (Icon Shortcodes, Emoji Shortcodes, and similar). Running more than one of those at once means they're competing over the same colon-wrapped text. Stick to one.
Plain JavaScript, no build step. main.js is exactly what Obsidian loads, using require() for the Obsidian API and CodeMirror 6 (@codemirror/view, @codemirror/state, @codemirror/language), both of which Obsidian exposes at runtime without needing a bundler.
MIT — see LICENSE.