Discourse Stickers

Discourse Stickers v2.0

This release is a fairly significant modernization of the component. Besides a number of internal improvements, the sticker configuration has been redesigned to make managing larger sticker collections much easier.

:artist_palette: A completely redesigned sticker setting

The biggest change in v2.0 is the sticker configuration itself.

The old version stored stickers as a JSON setting containing values such as:

  • title

  • emoji

  • previewUrl

  • markdownUrl

In v2.0, this has been replaced with Discourse’s native objects setting type.

Each sticker is now a proper configurable object with its own fields:

  • Title - the sticker name / tooltip text

  • Group - optionally organize stickers into groups

  • Emoji badge - optionally display a small emoji in the corner

  • Image - upload the sticker directly through the setting

  • Categories - optionally restrict stickers to specific categories

  • Hide from direct messages - control whether a sticker is available in DMs

  • Chat channels - optionally restrict stickers to specific public chat channels

This makes the sticker configuration much easier to understand and maintain, especially for larger collections.

:bento_box: Sticker groups and filtering

You can now assign stickers to a Group.

When multiple groups are available, the sticker picker automatically displays a filter bar at the top.

You can switch between:

  • All

  • individual groups

  • Other for stickers without a group

The filter is generated dynamically from the stickers currently available to the user.

:label: Category-specific stickers

Stickers can now optionally be assigned to specific Discourse categories.

If a sticker has categories configured, it will only appear in the regular post/reply composer when one of those categories is selected.

If no categories are configured, the sticker remains available everywhere.

:speech_balloon: More control over Chat stickers

v2.0 adds more control over sticker availability in Discourse Chat.

You can now:

  • hide individual stickers from direct messages;

  • restrict stickers to specific public chat channels;

  • leave the channel setting empty to make a sticker available in all public/category chat channels.

This allows administrators to maintain different sticker sets for different parts of their community.

:prohibited: Published stickers are no longer clickable

Published stickers are now treated as non-interactive images.

They no longer open the Discourse lightbox when clicked.

This applies both to:

  • stickers in regular posts;

  • stickers posted in Chat.

The goal is to make stickers behave more like actual sticker/reaction content rather than normal uploaded images.

:empty_nest: Better empty state

If no stickers are available for the current context, the picker now displays a proper empty state instead of simply showing an empty picker.

For example, this can happen when category or Chat restrictions prevent any sticker from being available.

:counterclockwise_arrows_button: Existing sticker configurations are migrated

One of the most important parts of v2.0 is that existing installations do not need to recreate their sticker collection.

The old sticker_images JSON setting is automatically migrated to the new objects format when the component is updated.

Existing sticker titles and emoji values are preserved.

Most importantly, existing uploaded sticker images are also migrated automatically.

So if you already have dozens of stickers configured, updating to v2.0 should not require you to upload all of them again.

The old markdownUrl property is no longer needed and is not carried over because the new Image field represents the actual Discourse upload.


I’ve updated the OP too.

3 Likes