Emojis
GitLab supports native Emojis through the tanuki_emoji gem.
How to update Emojis
Because our emoji support is implemented on both the backend and the frontend, we need to update support over three milestones.
First milestone (backend)
- Update the tanuki_emojigem as needed.
- Update the Gemfileto use the latesttanuki_emojigem.
- Update the Gemfileto use the latestunicode-emojithat supports the version of Unicode you’re upgrading to.
- Update EMOJI_VERSIONinlib/gitlab/emoji.rb
- bundle exec rake tanuki_emoji:import- imports all fallback images into the versioned- public/-/emojisdirectory. Ensure you see new individual images copied into there.
- When testing, you should be able to use the shortcodes of any new emojis and have them display.
- See example MRs one and two for the backend.
Second milestone (frontend)
- Update EMOJI_VERSIONinapp/assets/javascripts/emoji/index.js
- Use the tanuki_emojigem’s Rake tasks to update aliases, digests, and sprites. Run in the following order:- bundle exec rake tanuki_emoji:aliases- updates- fixtures/emojis/aliases.json
- bundle exec rake tanuki_emoji:digests- updates- public/-/emojis/VERSION/emojis.jsonand- fixtures/emojis/digests.json
- bundle exec rake tanuki_emoji:sprite- creates new sprite sheets- If new emoji are added, the sprite sheet may change size. To compensate for such changes, first generate the - app/assets/images/emoji.pngsprite sheet with the above Rake task, then check the dimensions of the new sprite sheet and update the- SPRITESHEET_WIDTHand- SPRITESHEET_HEIGHTconstants in- lib/tasks/tanuki_emoji.rakeaccordingly. Then re-run the task.- Use ImageOptim or similar program to optimize the images for size
 
 
- Ensure new sprite sheets were generated for 1x and 2x- app/assets/images/emoji.png
- app/assets/images/emoji@2x.png
 
- Update fixtures/emojis/intents.jsonwith any new emoji that we would like to highlight as having positive or negative intent.- Positive intent should be set to 0.5.
- Neutral intent can be set to 1. This is applied to all emoji automatically so there is no need to set this explicitly.
- Negative intent should be set to 1.5.
 
- Positive intent should be set to 
- You might need to add new emoji Unicode support checks and rules for platforms
that do not support a certain emoji and we need to fallback to an image.
See app/assets/javascripts/emoji/support/is_emoji_unicode_supported.jsandapp/assets/javascripts/emoji/support/unicode_support_map.js
- Ensure you use the version of emoji-regex that corresponds
to the version of Unicode that is being supported. This should be updated in package.json. Used for filtering emojis inapp/assets/javascripts/emoji/index.js.
- Have there been any changes to the category names? If so then app/assets/javascripts/emoji/constants.jswill need to be updated
- When testing- Ensure you can see the new emojis and their aliases in the GitLab Flavored Markdown (GLFM) Autocomplete
- Ensure you can see the new emojis and their aliases in the emoji reactions menu
 
Third milestone (cleanup)
Remove any old emoji versions from the public/-/emojis directory. This is not strictly necessary -
everything continues to work if you don’t do this. However it’s good to clean it up.