# Implementation of emoji

The implementation of emojis on different platforms took place across a three-decade period, starting in the 1990s. Today, the exact appearance of emoji is not prescribed but can vary between fonts and platforms, much like different typefaces.
Depending on the different platforms, the emoji may be constantly implemented according to the latest recommendation, or it may not have been updated for some time and may not be covered by the latest Unicode, or it may follow its own standard.
For example, the Apple Color Emoji typeface is proprietary to Apple, and can only be used on Apple devices (without additional hacking). Different computing companies have developed their own fonts to display emoji, some of which have been open-sourced to permit their reuse. Both color and monochrome emoji typefaces exist, as well as at least one animated design.

## Technical aspects
### JIS, Shift JIS and Private Use Area encodings

Various, often incompatible, character encoding schemes were developed by the different mobile providers in Japan for their own emoji sets. When transmitted in Shift JIS on NTT DoCoMo, emoji symbols are specified as a two-byte sequence in the range F89F through F9FC (as expressed in hexadecimal). Emoji pictograms on au by KDDI are specified using the <img> tag, encoded in Shift JIS between F340 and F7FC, or encoded in extended JIS X 0208 between 7521 and 7B73. SoftBank Mobile emoji support colors and animation, and use different formats on 2G versus 3G: in the 2G format, they are encoded in sequences using the Escape and Shift In control characters, whereas in the 3G format, they are encoded in Shift JIS between F741 and FBDE. The SoftBank 3G format collides with the overlapping Shift JIS ranges used by the other vendors: for example, the Shift JIS representation F797 is used for a convenience store (🏪) by SoftBank, but for a wristwatch (⌚️) by KDDI.
DoCoMo and SoftBank also developed their own schemes for representing their emoji sets in extended JIS X 0208 between 7522 and 7E38. These often matched the encodings of similar KDDI emoji where they existed: for example, the camera (📷) was represented in Shift JIS as F8E2 by DoCoMo, F6EE by KDDI, and F948 by SoftBank, but as 7670 in JIS by all three.
All three vendors and Google (for Gmail) each developed at least one scheme for encoding their emoji in the Unicode Private Use Area (with au developing two); DoCoMo, for example, used the range U+E63E through U+E757. Mostly, these five schemes do not overlap, but au's primary private use scheme partly collides with SoftBank's. Versions of iOS prior to 5.1 encoded emoji in the SoftBank private use area scheme, with later versions using standard Unicode.

### Supplementary Multilingual Plane support

Most, but not all, emoji are included in the Supplementary Multilingual Plane (SMP) of Unicode. The SMP also includes, for example, ancient scripts such as Cuneiform or Egyptian hieroglyphs, some modern scripts such as Adlam or Osage, and special-use characters such as Musical Symbols or Mathematical Alphanumeric Symbols.
Unicode was originally designed as a 16-bit encoding, which could be represented in a pure 16-bit form known as UCS-2. This corresponds to the Basic Multilingual Plane (BMP) of the Universal Coded Character Set. In Unicode 2.0, this was expanded to 17 planes (numbered 0 through 16, where the BMP is plane 0), and the first non-BMP characters were allocated in Unicode 3.1. UCS-2 is now obsolete and deprecated in favour of UTF-16, a variable-width encoding which follows UCS-2 for the BMP, but extends it with four-byte codes representing non-BMP characters. Non-BMP characters (in the SMP and in other supplementary planes, such as additional hanzi in the Supplementary Ideographic Plane, including some of the Cantonese characters from HKSCS) now number in the tens of thousands.
Some systems introduced prior to the advent of Unicode emoji were only designed to support characters in the BMP, on the assumption that non-BMP characters would rarely be encountered, although failure to properly handle characters outside of the BMP precludes Unicode compliance. For example, earlier versions of MySQL supported UCS-2 and a variant of UTF-8 excluding four-byte codes, thus not handling non-BMP characters correctly. Support for UTF-32 and full support for UTF-16 and UTF-8 (under the name utf8mb4) was added in version 5.5, with utf8 retained as an alias for the up-to-three-byte version, although this is intended to be changed in the future.
The introduction of Unicode emoji created an incentive for vendors to improve their support for non-BMP characters. The Unicode Consortium notes that "[b]ecause of the demand for emoji, many implementations have upgraded their Unicode support substantially."

### Font format support

Any operating system that supports adding additional fonts to the system can add an emoji-supporting font. However, inclusion of colorful emoji in existing font formats requires dedicated support for color glyphs. Not all operating systems have support for color fonts, so in these cases emoji might have to be rendered as black-and-white line art or not at all. There are four different formats used for multi-color glyphs in an SFNT font. OpenType version 1.8 standardizes all four.
* CBDT is a multi-color raster format, using raw bitmap data or embedded PNG data. It requires an auxiliary CBLC table to hold details about the image format, and as such the format is sometimes called "CBDT/CBLC".
* COLR is a multi-color vector format, using multiple single-color OpenType (TrueType or CFF) glyphs. A number of glyphs are assigned individual block colors and layered, and associated with a specified single-color base glyph. The layered glyphs are shown instead of the base glyph when the character is displayed as multi-color. Colors are referenced from a palette, which is defined in a separate CPAL table, and as such the format is sometimes called "COLR/CPAL".
* sbix is a multi-color raster format, using embedded JPEG, PNG or TIFF images. Including multi-color raster or vector glyphs as embedded PDF files is also permitted by the Apple Advanced Typography specification, but not by the OpenType specification, and is planned for future releases of iOS and macOS.
* SVG-in-OpenType (or OpenType-SVG) is a multi-color vector format (with support for embedded rasters), using embedded SVG images. It requires the inclusion of a single-color TrueType or CFF glyph as well, serving as a fallback. Being based on SVG, it includes support for color gradients. An OpenType-SVG font may use a CPAL palette, similarly to COLR; however, this is not required.
The COLR format was introduced by Microsoft, with Windows 8.1. The CBDT format was introduced by Google and is supported on Android, while the competing sbix format was introduced by Apple, and is supported on macOS and iOS. SVG-in-OpenType was designed by Mozilla and Adobe as an industry standard.
Some support for SVG-in-OpenType support has been added to newer updates of Windows 10, and to newer versions of iOS and macOS. DirectWrite has supported all four since Windows 10 Anniversary Update; however, Windows only supports a subset of SVG-in-OpenType. On the web, SVG-in-OpenType is supported by recent versions of Firefox, Safari and Microsoft Edge, but not by Google Chrome; Edge and Safari additionally support sbix, while Edge and Chrome support CBDT and all four support COLR.
This means that color fonts may need to be supplied in several formats to be usable on multiple operating systems, or in multiple applications.

### Internationalized domain names

A limited number of top-level domains allow registration of domain names containing emoji characters. Emoji-containing subdomains are also possible under any top-level domain.

## Implementation by different platforms
### Google (Android and ChromeOS)

Google's Noto fonts project includes the Noto Color Emoji font, which supplies color glyphs for emoji characters. ChromeOS, through its inclusion of the Noto fonts, supports the emoji set introduced through Unicode 6.2. As of ChromeOS 41, Noto Color Emoji is the default font for most emoji.
Android devices support emoji differently depending on the operating system version. Google added native emoji support to Android in July 2013 with Android 4.3, and to the Google Keyboard in November 2013 for devices running Android 4.4 and later. Android 7.0 Nougat added Unicode 9 emoji, skin tone modifiers, and a redesign of many existing emoji.
Emoji are also supported by the Google Hangouts application (independent of the keyboard in use), in both Hangouts and SMS modes. Several third-party messaging and keyboard applications (such as IQQI Keyboard) for Android devices provide plugins that allow the use of emoji. With Android 8 (Oreo), Google added a compatibility library that, if included by app developers, makes the latest Noto emoji available on any platform since Android 4.3.
Stock Android systems include the Noto glyphs for emoji characters, although individual social media apps may use their own glyphs instead. However, mobile phone vendors HTC and LG deployed variants of NotoColorEmoji.ttf with custom glyphs prior to 2017, and Samsung still does. Some Japanese mobile carriers used to equip branded Android devices with emoji glyphs that were closer to the original ones, but apparently have stopped updating these circa 2015.

### Apple

Apple first introduced emoji to their desktop operating system with the release of OS X 10.7 Lion, in 2011. Users can view emoji characters sent through email and messaging applications, which are commonly shared by mobile users, as well as any other application. Users can create emoji symbols using the "Characters" special input panel from almost any native application by selecting the "Edit" menu and pulling down to "Special Characters", or by the key combination ⌘ Command+⌥ Option+T. Users can also create these symbols by switching the keyboard to Unicode, holding ⌥ Option and typing the Unicode hex input. For example, holding down ⌥ Option+2+6+3+A would create ☺. The desktop OS uses the Apple Color Emoji font that was introduced earlier in iOS. This provides users with full color pictographs.
The emoji keyboard was first available in Japan with the release of iPhone OS version 2.2 in 2008. The emoji keyboard was not officially made available outside of Japan until iOS version 5.0. From iPhone OS 2.2 through to iOS 4.3.5 (2011), those outside Japan could access the keyboard but had to use a third-party app to enable it. The first of such apps was developed by Josh Gare; emoji beginning to be embraced by popular culture outside Japan has been attributed to these apps. iOS was updated to support Fitzpatrick skin-tone modifiers with version 8.3.
OS X 10.9 Mavericks introduced a dedicated emoji input palette in most text input boxes within the Mac's existing Character Viewer using the key combination ⌘ Command+Ctrl+Space. Optionally, the Fn key alone can be specified by the user in the keyboard preferences menu to bring up the Character Viewer. Since macOS Big Sur, the key is also labeled as 🌐 (globe) for consistency across macOS and iOS, which uses the globe key as a function key to switch to the emoji and other chosen international keyboard layouts.
Apple has revealed that the "face with tears of joy" is the most popular emoji among English speaking Americans. On second place is the "heart" emoji followed by the "Loudly Crying Face".
On July 17, 2018, for the World Emoji Day, Apple announced that it will be adding 70 more emoji in its 2018 iOS update, including the long-awaited, red hair, white hair, curly hair and bald emoji.
On September 12, 2017, Apple announced that the Messages app on the iPhones with Face ID would get "Animoji", which are versions of standard emoji that are custom-animated with the use of facial motion capture to reflect the sender's expressions. These Animoji can also utilize lip sync to appear to speak audio messages recorded by the sender. Apple had created 3D models of all standard emoji prior to its late-2016 OS updates from which the static default 2D graphics had been rendered. A select set of these models are being reused for creating still images and short animations dynamically.
With the release of iOS 12, Apple introduced "Memoji" that allows the use of an avatar that a user can use to personalize messages; this feature does not require Face ID.
With release of iOS 13.2, Apple introduced over 70 new emojis, with gender neutral options, people holdings hands with various skin tones, as well full Unicode 12 and Unicode 12.1 emoji support.
On release of iOS 14.5, over 100 new emojis are introduced.
With the release of iOS 15.4, Apple introduced new emojis, implementing Unicode 14 emoji recommendations.
Release of iOS 16.4 added Unicode 15 emoji.
Release of iOS 17.4 added Unicode 15.1 emoji.
Emojis from iOS are added to the macOS version released at the same time as the iOS version.

### Mozilla (Firefox and Firefox OS)

As part of the now-discontinued Firefox OS project, Mozilla developed an emoji font named FxEmojis.
Mozilla also packages a version of Twitter's Twemoji font converted to a COLR/CPAL layered format font, named "Twemoji Mozilla". Older versions of the latter Mozilla project instead packaged the EmojiOne font, as "EmojiOne Mozilla". Since Firefox 50, emojis are rendered by the browser when the underlying platform lacks native support.

### Linux

Ubuntu 18.04 and Fedora 28 support color emoji by default, using Noto Color Emoji. Some Linux distributions require the installation of extra fonts. Color emoji are supported by FreeType and Cairo.

### Microsoft Windows

An update for Windows 7 and Windows Server 2008 R2 brought a subset of the monochrome Unicode set to those operating systems as part of the Segoe UI Symbol font. As of Windows 8.1 Preview, the Segoe UI Emoji font is included, which supplies full-color pictographs. The plain Segoe UI font lacks emoji characters, whereas Segoe UI Symbol and Segoe UI Emoji include them.
Emoji characters are accessed through the onscreen keyboard's 😀 key, or through the physical keyboard shortcut ⊞ Win+..
Differently from macOS and iOS, color glyphs are only supplied when the application supports Microsoft's DirectWrite API, and Segoe UI Emoji is explicitly declared, otherwise monochrome glyphs appear. Microsoft's COLR/CPAL format for multi-color fonts such as Segoe UI Emoji is supported by the current versions of several web browsers on Windows (including Firefox, Google Chrome, Internet Explorer and Microsoft Edge), but not by many graphics applications.
Windows 10 Anniversary Update added Unicode 9 emoji.
In August 2022, Microsoft open sourced more than 1,500 of its 3D emoji to let creators remix and customize them. The library is available on Figma and GitHub.
Released in November 2023, update KB5032190 for Windows 11 22H2 added Unicode 15 emoji. However, they are missing from the final 22H2 version of Windows 10 since introduction of Unicode 12.

### Social media platforms

Facebook and Twitter replace all Unicode emoji used on their websites with their own custom graphics.
Prior to October 2017, Facebook had different sets for the main site and for its Messenger service, where only the former provides complete coverage. Messenger now uses Apple emoji on iOS, and the main Facebook set elsewhere. Facebook reactions are only partially compatible with standard emoji.
Twitter has released Twemoji, which is their emoji graphics together with a JavaScript library to handle them, under the Creative Commons CC-BY 4.0 license and the MIT open-source license, respectively. Despite this, the Android and iOS Twitter apps use the emoji graphics that are native to the platform they are running on (Apple and Google), instead of the Twemoji graphics.

### Other emoji font vendors

EmojiOne version 2.2, an open-source font available under a free content license, supports the full emoji set in color through Unicode Emoji 3.0, i.e. Unicode 9.0. Newer versions of EmojiOne, since renamed JoyPixels, support more recent Unicode Emoji versions, and use a stricter license that disallows the redistribution of vector images, while version 2.x is "no longer supported or distributed". EmojiTwo, an open-source fork of EmojiOne 2.2, aims to add all emoji from 2017 and later.
The font Symbola contains all emoji through version 10.0 as normal monochrome glyphs. Through version 10, Symbola was made available without a license nor any restrictions on use; beginning with version 11 in 2018, Symbola has been copyrighted with a ban on commercial use and derivative works. Other typefaces including a significant number of emoji characters include Noto Emoji, Adobe Source Emoji, and Quivira.

## Footnotes

* ↑ Notes on the format of the gmojiraw.txt data file from Google/AOSP: file is mostly tab-separated, except that columns for a given vendor after a non-empty substitute string column are skipped altogether on a per-line basis, so the columns of two given lines do not necessarily line up. First four columns give the Google private use code points (in hexadecimal), the UTF-16 and UTF-8 thereof, and a Google-assigned name, which are followed by columns for au, then columns for DoCoMo, then columns for SoftBank. Columns for a given vendor consist of a substitute string followed by (IFF the substitute string is empty) a decimal ordinal, a hexadecimal Shift JIS code in the region beyond JIS X 0208, a hexadecimal private-use Unicode code point, a hexadecimal 7-bit JIS code and (for au only) an alternative Shift JIS code corresponding to the 7-bit JIS code. Characters which exist in a given vendor's Shift JIS scheme but not its 7-bit JIS scheme have the 7-bit code for that vendor listed as 222E (i.e. the geta mark in JIS X 0208). Some vendor mappings are approximations or to sequences (delimited within fields with +).