Skip to content
WM KeyboardWM Keyboard
Accessibility

Emoji picker & search

Semantic emoji search in your language, skin tones and dual-tone pairs, and favourites and recents in the emoji panel.

The emoji panel does more than lay emoji out in a grid. Search understands synonyms and typos in English and Bangla, every toned emoji remembers the variant you last picked for it, and your favourites and recents ride at the front of their own tab.

Screenshot pending
The emoji panel open over a text field, with the search icon, tab strip, and category grid.
WM KeyboardEmojiAccessEmoji button in toolbar

The most direct route is the emoji button in the toolbar (on by default). Tap it and the panel opens over the keys. If you’ve turned on a dedicated emoji row, its own launcher icon opens the same full panel.

Two more toggles replace a bottom-row key outright with an emoji key, so opening the panel takes one less tap:

WM KeyboardLayout & sizeBottom row keysEmoji key instead of 🌐

Emoji key instead of 🌐 is on by default, so the 🌐 key opens the emoji panel instead of switching language. Language switching doesn’t disappear. It moves to a spacebar swipe, set to Language by default, so you get it back for free. See Gestures.

Comma key opens emoji, under the same group, is off by default. Turn it on and the bottom-row comma key becomes an emoji key too, with comma itself demoted to a long-press alternate. Its own info text warns that turning this on also removes the emoji tool from the toolbar, since the key is meant to replace it. Drag the tool back into the toolbar if you want both.

Press and hold enter for emoji, also in that group, is off by default and leaves every key where it is. Turn it on and holding Enter opens the emoji panel when you lift, for a bottom row that has no emoji key. A tap on Enter is unchanged. More on Key press settings.

Screenshot pending
Typing 'cat' and 'বিড়াল' in the panel's search field, both surfacing the same cat emoji.

Tap the magnifying-glass tab at the start of the tab strip. The panel switches into search mode and a search pill appears. With the full-screen panel on (the default) the pill takes the header row beside the back button, in place of the tab strip. With it off, the pill sits under the results instead, just above the keys that type into it, so the emoji stay at the top of the panel where your thumb left them.

The pill is not a text field you type into directly. Tap it, and the letter keys underneath become a query editor: what you type appends to the pill instead of going to your document, and the keyboard’s own backspace key deletes from the pill. A small backspace icon inside the pill deletes from your actual text field instead, without leaving search. Tapping the pill again unlatches typing, and the tab strip returns once the query is empty, so backspacing your query away is the way back to browsing.

Search understands more than an exact keyword match, layered in this order, where matches on more than one query word add up:

  1. An exact shortcode. tada finds only 🎉, unambiguously, ahead of anything else.
  2. A shortcode prefix. thumb starts narrowing toward :thumbsup: and its neighbors.
  3. An exact keyword. cat matches every emoji tagged with the word “cat”.
  4. A synonym. A small hand-curated list expands common searches. party also surfaces 🍾 via “celebration”, and happy also reaches emoji tagged “joy” or “cheerful”. Bangla concepts expand the same way (খুশি → হাসি, আনন্দ).
  5. A keyword prefix. cele starts matching “celebration” before you finish typing it.
  6. A one-typo fuzzy match. hapy still finds 😀, for query words of four letters or more.

English and Bangla keywords are merged into the same index, so a query never needs to name a language. বিড়াল and “cat” surface the same set of cat emoji, and that holds for every cat-family emoji in the catalog, not only the smiley ones. Typing in a language you haven’t installed a keyword pack for still works for anything carrying English or Bangla tags. To download a pack for another language, see Emoji search in your language.

While the search box has the keys, the suggestion strip sits in the row directly above them, and what it offers comes from the emoji catalogue rather than from your language’s word list. Type ca and it offers car, cat, card, cash — not cable or cathedral, which are perfectly good words that no emoji is tagged with and that would leave you staring at an empty grid. Everything on the strip finds at least one emoji.

It completes against everything the search itself understands: keywords in every language you’ve got a pack for, shortcode names like tada, and the curated synonyms above. A second word narrows to terms that share an emoji with the first, so red hea offers heart ahead of headphone. Tapping a term replaces the word at the caret and leaves a space, ready for the next one.

WM KeyboardEmojiSkin toneDefault skin tone

Long-press any emoji in the panel grid (search results included) to open its variant popup. If WM KeyboardEmojiEmoji panelEmoji descriptions is on (the default), the popup opens with the emoji’s name at the top, so near-identical faces are easy to tell apart.

Screenshot pending
Long-pressing a toned emoji opens six variants: the neutral base plus five Fitzpatrick tones.

Most toned emoji offer a single row of six choices: the neutral base plus five Fitzpatrick skin tones. Tap any one to insert it. A small number of two-person emoji, like 🤝 and 👫, open a dual-tone picker instead. It has two independent swatch rows, one per person, so each side of a handshake or hug can carry its own tone.

Screenshot pending
The dual-tone picker for 🤝, with independent skin tones for each hand.

Whichever variant you tap becomes that emoji’s new default. The picker remembers your last choice per emoji and shows it from then on, in the grid and in your recents. Two settings shape how tones work everywhere else:

WM KeyboardEmojiSkin toneOverride with last used

Default skin tone sets the tone every toned emoji gets when you haven’t picked one for it yourself. That covers the panel grid, the suggestion strip, search results and the starter set in the emoji row alike. The setup wizard asks for it on its Emoji page, so it’s usually set before the first emoji you insert; this row is where you change it later. Override with last used (on by default) keeps your per-emoji memory ahead of that default, so an emoji you’ve already toned by hand stays the way you left it. Turn it off if you’d rather the default tone win everywhere and your per-emoji picks only apply to that one insertion.

Emoji with gender or role variants (a runner shown as 🏃‍♀️ or 🏃‍♂️, a doctor as 👨‍⚕️ or 👩‍⚕️) collapse into the same long-press popup, so the grid isn’t cluttered with every combination as its own cell. The popup then stacks one six-cell row per member, so a single tap picks the member and its tone together. The two-person emoji are the exception: their dual-tone picker puts the members in a row of their own at the top, above the two tone rows.

WM KeyboardEmojiEmoji panelHistory tab

The first tab in the panel shows your history, once you have at least one recent or favourited emoji. History tab chooses what fills it. Recent orders by when you last used an emoji, and Most used ranks by frequency. Favourited emoji are pinned to the front either way.

Screenshot pending
The history tab with favourites pinned first, and the long-press options for a starred emoji.

Long-press any emoji to star it as a favourite from the same popup used for skin tones: the star toggle sits right above the variant grid. Once you have two or more favourites, a Reorder favourites row appears in that popup too, opening a drag-to-reorder list so you can put your most-used ones first.

Screenshot pending
Dragging a favourite into a new position in the reorder list.

Long-pressing a cell on the history tab specifically also offers Remove from recents, for pulling a one-off emoji back out without waiting for it to age off the list. For clearing the whole list at once:

WM KeyboardEmojiEmoji panelClear recents button

Off by default. Turn it on to add a “Clear recents” button to the Recent tab. It only appears on the Recent view, not Most used, since a frequency ranking isn’t something a single tap should wipe.

WM KeyboardEmojiEmoji panelEmoji categories

The panel ships its category tabs in Unicode’s own order. Emoji categories is where you change it: drag a category to move its tab, press the eye to hide a tab you never open, and press a category to open its emoji and arrange those too — press and hold one, then drag it where you want it.

Hiding a category hides only its tab. Those emoji are still found by search and still offered in the suggestion strip.

The history tab is not in that list: it orders itself, with your favourites pinned first as above. The Kaomoji and Emoticons tabs are not either — they are switched on and off by their own toggle, and always sit at the end.

Full reference: Emoji categories.

WM KeyboardEmojiEmoji panelAnimated emoji
Screenshot pending
Long-pressing 😀 shows its animation looping, over the send button.

Around 880 emoji have an animated version published by Google as part of Noto Animated Emoji. Long-press any of them in the panel and the popup loops the animation, with a Send animated emoji button under it that sends the 512×512 GIF into the field you’re typing in.

The button normally appears once the animation has loaded, so it doesn’t offer to send something you haven’t seen. The one exception is when no preview is coming at all, held back by data saving’s “ask each time” or lost to a failed fetch. The button still appears there, since pressing it is the only way to answer that. The popup stays open afterward, preview and all, so you can fire off two in a row or pick a skin tone next.

Two files exist for every animation, and the popup uses them for different jobs. Opening it fetches the WebP (around 350 KB) to loop in the preview. Pressing the button fetches the GIF (around 800 KB) and sends that. Long-press is also how you reach skin tones and favourites, so most long-presses send nothing and shouldn’t cost the larger file. The GIF is what goes out because an app that accepts image/webp may still draw only its first frame, which would make a “send animated emoji” button a liar.

Both come from fonts.gstatic.com, and nothing is downloaded until you long-press. Nothing about you goes with either request: it’s a plain fetch of a fixed URL, with no query, no key, and no identifier.

The button is deliberately absent in three cases:

  • The emoji has no animation. Flags, most ZWJ sequences, and plenty of symbols aren’t in the set. The app ships the list of which ones are (assets/emoji/animated.txt, about 8 KB) rather than asking the server, so a long-press never stalls on a request that was going to 404.
  • The app can’t take images. A GIF goes through the same rich-content path as a sticker, so a field that accepts no images (a plain search box, most password fields) doesn’t get the offer. See GIFs for what does and doesn’t accept them.
  • The setting is off. Turn Animated emoji off and long-press goes back to skin tones and favourites only.

Sending one counts as using that emoji, so it lands in your recents like an ordinary tap would.

WM KeyboardEmojiEmoji panelSend emoji as image

Under the animation (and on every emoji, animated or not) is Send emoji as image: the emoji itself, drawn at 512×512 in whichever emoji font you’ve picked, sent as a transparent WebP.

It answers the oldest emoji problem there is: the other person’s phone drawing your emoji as something else, or as an empty box. Send it as a picture and they see the one you saw.

The picture is drawn in the font the keyboard itself draws with, whichever that is: an imported font, one installed from an addon repository, Google’s Noto Color Emoji, or the phone’s own set. Noto is fetched once from the same system font provider Compose draws it with, then kept. Everything else is already on the device, so this normally works offline and sends nothing anywhere.

How it goes out follows the sticker tool’s own setting, so one preference governs every sticker the keyboard sends:

WM KeyboardToolsStickersSend stickers as

Left at Sticker (the default) WhatsApp receives it as a real sticker. Set it to Image and it arrives as an ordinary picture in the message box instead. That’s the thing to try if an app does something unhelpful with a sticker, like sending it instantly or closing the keyboard afterward.

Like the animated button, this one only shows on a field that accepts images, and it can be switched off on its own.

  • Inserting doesn’t close the panel by default. WM KeyboardEmojiEmoji panelReturn to the keyboard after you insert is off, so you can tap several emoji in a row (including several results from the same search) without the panel folding away after each one. Turn it on to jump straight back to the keys after a single insert. The same setting also governs the clipboard panel.
  • Full-screen panel is the default, not an opt-in. WM KeyboardEmojiAccessFull-screen emoji panel is on out of the box: the toolbar, emoji row, and symbol row all step aside, a slim back header takes their row, and the panel’s layout fills the rest. Turn it off to keep the toolbar within reach while picking emoji.
  • Search and the panel grid both respect “Hide emoji that your device cannot show.” An emoji neither your chosen font nor the phone’s system font can draw is filtered out everywhere: panel, search, and suggestions alike. See Fixing emoji that won’t display.
  • Kaomoji and emoticons are a separate, unsearched system. If you’ve turned on their two extra tabs, they sit after the last Unicode category, but the panel’s search field never indexes them, since it only searches the Unicode emoji catalog. See Kaomoji & text art.
  • The panel is a layout. Its category tabs, search box and grid are cells of a panel layout, with an abc, space and hold-to-repeat backspace row along the bottom so you can type a word, drop in an emoji, and keep typing without leaving the panel. Open WM KeyboardEmojiAccessPanel layout to move the tabs, drop the search box, give the grid the whole height, or add keys of your own.
  • Both editions. Search, skin tones, and favourites aren’t gated to one edition: the same emoji panel ships in both.

The bundled catalog covers 1,914 base emoji across ten categories (activities, animals, flags, food, nature, objects, people, smileys, symbols, travel). Of those, 330 carry Fitzpatrick skin-tone variants, five uniform tones each, and 19 of that 330 also support independently-toned pairs like 🤝. Together that’s 2,030 additional toned sequences on top of the base count.

For the settings that shape all of this (which font draws the emoji, keyword packs for other languages, word-typing predictions, and the emoji row), see Emoji customization.