{"id":370649,"date":"2026-09-18T13:20:48","date_gmt":"2026-09-18T13:20:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/axismundi-emoji\/"},"modified":"2026-09-18T13:20:25","modified_gmt":"2026-09-18T13:20:25","slug":"axismundi-emoji","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/axismundi-emoji\/","author":21128503,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.1","stable_tag":"0.3.1","tested":"7.1.1","requires":"6.7","requires_php":"8.1","requires_plugins":null,"header_name":"Axismundi Emoji","header_author":"KIM JIWOON","header_description":"Custom emoji and Unicode emoji for WordPress. A custom emoji registry with review and per-authority caching for FEP-9098 emoji, local emoji registration, a self-hosted Noto Color Emoji font fallback for Unicode emoji, and one block-editor picker.","assets_banners_color":"","last_updated":"2026-09-18 13:20:25","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Jiwoon-Kim\/axismundi\/tree\/main\/products\/wordpress\/plugins\/axismundi-emoji","header_author_uri":"https:\/\/designbusan.ai.kr","rating":0,"author_block_rating":0,"active_installs":0,"downloads":71,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","changelog"],"tags":{"0.3.1":{"tag":"0.3.1","author":"kimjiwoon","date":"2026-09-18 13:20:25","revision":3702050}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3702050,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/emoji-demo\\\/\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"axismundi-emoji\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\n\\\/**\\n * Playground setup: the rendering demo page.\\n *\\n * Source for the blueprints. build.py puts demo-page.html where the marker line\\n * below is and embeds this file as the runPHP step's code, because a runPHP\\n * step takes inline code only.\\n *\\n * @package AxismundiEmoji\\n *\\\/\\n\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/\\\/ The page carries a status script; kses would strip it for a request with no user.\\nwp_set_current_user( 1 );\\nkses_remove_filters();\\n\\n$content = <<<'HTML'\\n<!-- wp:paragraph -->\\n<p>Each row below is plain Unicode text in the post. Once the page has loaded, the last column says what drew it: the browser's own emoji font, the Noto Color Emoji font bundled with Axismundi Emoji, or a WordPress.org image (WordPress's own fallback). Custom emoji are this site's images.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:html -->\\n<style>\\n.ax-emoji-demo { overflow-x: auto; }\\n.ax-emoji-demo table { border-collapse: collapse; width: 100%; font-size: 0.9em; }\\n.ax-emoji-demo th, .ax-emoji-demo td { border-bottom: 1px solid color-mix( in srgb, currentColor 20%, transparent ); padding: 0.5em 0.75em; text-align: start; vertical-align: middle; }\\n.ax-emoji-demo__glyph { font-size: 2em; line-height: 1.2; white-space: nowrap; }\\n.ax-emoji-demo__glyph img { width: 1em !important; height: 1em !important; }\\n.ax-emoji-demo__by { font-weight: 600; }\\n.ax-emoji-demo__status { padding: 0.75em 1em; border-radius: 8px; background: color-mix( in srgb, currentColor 8%, transparent ); }\\n.ax-emoji-demo__status dl { display: grid; grid-template-columns: max-content 1fr; gap: 0.25em 1em; margin: 0; }\\n.ax-emoji-demo__status dt { font-weight: 600; }\\n.ax-emoji-demo__status dd { margin: 0; }\\n<\\\/style>\\n<div class=\\\"ax-emoji-demo\\\">\\n<div class=\\\"ax-emoji-demo__status\\\" id=\\\"ax-emoji-demo-status\\\"><p>Checking this browser&hellip;<\\\/p><\\\/div>\\n<table>\\n<thead><tr><th>Sample<\\\/th><th>Case<\\\/th><th>Code points<\\\/th><th>Drawn by<\\\/th><\\\/tr><\\\/thead>\\n<tbody>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F600;<\\\/td><td>Basic emoji<\\\/td><td><code>1F600<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1FAC8;<\\\/td><td>Emoji 17.0, one code point (the one WordPress tests)<\\\/td><td><code>1FAC8<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F9D1;&#x200D;&#x1FA70;<\\\/td><td>Emoji 17.0 ZWJ sequence<\\\/td><td><code>1F9D1 200D 1FA70<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F1F0;&#x1F1F7;<\\\/td><td>Country flag<\\\/td><td><code>1F1F0 1F1F7<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F1E8;&#x1F1F6;<\\\/td><td>Country flag, newer (Sark)<\\\/td><td><code>1F1E8 1F1F6<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F3F4;&#xE0067;&#xE0062;&#xE0065;&#xE006E;&#xE0067;&#xE007F;<\\\/td><td>Subdivision flag (England), a tag sequence<\\\/td><td><code>1F3F4 E0067 E0062 E0065 E006E E0067 E007F<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F3F3;&#xFE0F;&#x200D;&#x26A7;&#xFE0F;<\\\/td><td>ZWJ flag (transgender)<\\\/td><td><code>1F3F3 FE0F 200D 26A7 FE0F<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F3F4;&#x200D;&#x2620;&#xFE0F;<\\\/td><td>ZWJ flag (pirate)<\\\/td><td><code>1F3F4 200D 2620 FE0F<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F469;&#x1F3FD;&#x200D;&#x1F4BB;<\\\/td><td>Skin tone and ZWJ<\\\/td><td><code>1F469 1F3FD 200D 1F4BB<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x1F468;&#x200D;&#x1F469;&#x200D;&#x1F467;&#x200D;&#x1F466;<\\\/td><td>Family, three joiners<\\\/td><td><code>1F468 200D 1F469 200D 1F467 200D 1F466<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">&#x2764;&#xFE0F;<\\\/td><td>Emoji presentation selector<\\\/td><td><code>2764 FE0F<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<tr><td class=\\\"ax-emoji-demo__glyph\\\">:wordpress: :axismundi:<\\\/td><td>Custom emoji bundled with the plugin<\\\/td><td><code>:wordpress: :axismundi:<\\\/code><\\\/td><td class=\\\"ax-emoji-demo__by\\\">&hellip;<\\\/td><\\\/tr>\\n<\\\/tbody>\\n<\\\/table>\\n<\\\/div>\\n<script>\\n( function () {\\n\\tvar root = document.querySelector( '.ax-emoji-demo' );\\n\\tif ( ! root ) {\\n\\t\\treturn;\\n\\t}\\n\\n\\tfunction drawnBy( cell ) {\\n\\t\\tif ( cell.querySelector( 'img.ax-emoji' ) ) {\\n\\t\\t\\treturn 'Custom emoji (this site\\u2019s image)';\\n\\t\\t}\\n\\t\\tif ( cell.querySelector( 'img.emoji' ) ) {\\n\\t\\t\\treturn 'WordPress.org image';\\n\\t\\t}\\n\\t\\tvar wrapper = cell.querySelector( '.ax-unicode-emoji' );\\n\\t\\tif ( wrapper ) {\\n\\t\\t\\treturn 'Noto Color Emoji (' + wrapper.getAttribute( 'data-ax-emoji-profile' ) + ')';\\n\\t\\t}\\n\\t\\treturn 'Browser\\u2019s own font';\\n\\t}\\n\\n\\tfunction coreSupports() {\\n\\t\\t\\\/\\\/ A result in sessionStorage may be left from an earlier page that did load the test.\\n\\t\\tif ( ! document.getElementById( 'wp-emoji-settings' ) ) {\\n\\t\\t\\treturn 'not run on this page';\\n\\t\\t}\\n\\t\\ttry {\\n\\t\\t\\tvar stored = JSON.parse( sessionStorage.getItem( 'wpEmojiSettingsSupports' ) || 'null' );\\n\\t\\t\\tvar tests = stored && stored.supportTests;\\n\\t\\t\\tif ( ! tests ) {\\n\\t\\t\\t\\treturn 'not run on this page';\\n\\t\\t\\t}\\n\\t\\t\\treturn Object.keys( tests ).map( function ( key ) {\\n\\t\\t\\t\\treturn key + ': ' + ( tests[ key ] ? 'yes' : 'no' );\\n\\t\\t\\t} ).join( ', ' );\\n\\t\\t} catch ( e ) {\\n\\t\\t\\treturn 'unavailable';\\n\\t\\t}\\n\\t}\\n\\n\\tfunction row( term, value ) {\\n\\t\\tvar dt = document.createElement( 'dt' );\\n\\t\\tvar dd = document.createElement( 'dd' );\\n\\t\\tdt.textContent = term;\\n\\t\\tdd.textContent = value;\\n\\t\\treturn [ dt, dd ];\\n\\t}\\n\\n\\tfunction render() {\\n\\t\\troot.querySelectorAll( 'tbody tr' ).forEach( function ( tr ) {\\n\\t\\t\\ttr.querySelector( '.ax-emoji-demo__by' ).textContent = drawnBy( tr.querySelector( '.ax-emoji-demo__glyph' ) );\\n\\t\\t} );\\n\\n\\t\\t\\\/\\\/ The front end prints the adapter's settings as JSON, as the adapter itself reads them.\\n\\t\\tvar config = null;\\n\\t\\tvar configNode = document.getElementById( 'axismundi-emoji-unicode-config' );\\n\\t\\ttry {\\n\\t\\t\\tconfig = configNode ? JSON.parse( configNode.textContent ) : null;\\n\\t\\t} catch ( e ) {\\n\\t\\t\\tconfig = null;\\n\\t\\t}\\n\\t\\tvar api = window.axismundiEmojiUnicode || null;\\n\\t\\tvar decisions = api ? api.decisions() : {};\\n\\t\\tvar used = Object.keys( decisions ).filter( function ( id ) {\\n\\t\\t\\treturn decisions[ id ];\\n\\t\\t} );\\n\\t\\tvar dl = document.createElement( 'dl' );\\n\\t\\t[\\n\\t\\t\\trow( 'Axismundi rendering mode', config ? config.mode : 'WordPress fallback only (the plugin adds nothing to this page)' ),\\n\\t\\t\\trow( 'Noto Color Emoji used for', config ? ( used.length ? used.join( ', ' ) : 'nothing \\u2014 this browser draws every profile itself' ) : '\\u2014' ),\\n\\t\\t\\trow( 'WordPress image fallback', document.getElementById( 'wp-emoji-settings' ) ? 'loaded' : 'switched off in Emojis \\u203a Settings' ),\\n\\t\\t\\trow( 'WordPress support tests', coreSupports() )\\n\\t\\t].forEach( function ( pair ) {\\n\\t\\t\\tdl.appendChild( pair[ 0 ] );\\n\\t\\t\\tdl.appendChild( pair[ 1 ] );\\n\\t\\t} );\\n\\t\\tvar status = document.getElementById( 'ax-emoji-demo-status' );\\n\\t\\tstatus.replaceChildren( dl );\\n\\t}\\n\\n\\tvar timer = 0;\\n\\tfunction schedule() {\\n\\t\\tclearTimeout( timer );\\n\\t\\ttimer = setTimeout( render, 300 );\\n\\t}\\n\\tnew MutationObserver( schedule ).observe( root.querySelector( 'tbody' ), { childList: true, subtree: true, attributes: true } );\\n\\twindow.addEventListener( 'load', function () {\\n\\t\\tsetTimeout( render, 1500 );\\n\\t} );\\n} )();\\n<\\\/script>\\n<!-- \\\/wp:html -->\\n\\n<!-- wp:heading -->\\n<h2 class=\\\"wp-block-heading\\\">Try it<\\\/h2>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:list -->\\n<ul class=\\\"wp-block-list\\\"><!-- wp:list-item -->\\n<li>Switch between the three rendering modes in <a href=\\\"{{SETTINGS_URL}}\\\">Emojis \\u203a Settings<\\\/a>, reload this page and compare the last column. <em>WordPress fallback only<\\\/em> shows what WordPress does without the plugin.<\\\/li>\\n<!-- \\\/wp:list-item -->\\n\\n<!-- wp:list-item -->\\n<li>Open <a href=\\\"{{EDIT_URL}}\\\">this page in the editor<\\\/a>, select some text, and choose <em>Emoji<\\\/em> from the toolbar's <em>More<\\\/em> menu. Unicode and custom emoji share one searchable picker.<\\\/li>\\n<!-- \\\/wp:list-item -->\\n\\n<!-- wp:list-item -->\\n<li>Copy any row: the flag or emoji is copied as text, because the font draws it without replacing it.<\\\/li>\\n<!-- \\\/wp:list-item --><\\\/ul>\\n<!-- \\\/wp:list -->\\nHTML;\\n\\n\\\/\\\/ The blueprint's landingPage opens this page by its slug.\\n$page_id = wp_insert_post(\\n\\tarray(\\n\\t\\t'post_title'   => 'Axismundi Emoji rendering demo',\\n\\t\\t'post_name'    => 'emoji-demo',\\n\\t\\t'post_type'    => 'page',\\n\\t\\t'post_status'  => 'publish',\\n\\t\\t'post_content' => $content,\\n\\t)\\n);\\n\\nif ( $page_id && ! is_wp_error( $page_id ) ) {\\n\\twp_update_post(\\n\\t\\tarray(\\n\\t\\t\\t'ID'           => $page_id,\\n\\t\\t\\t'post_content' => strtr(\\n\\t\\t\\t\\t$content,\\n\\t\\t\\t\\tarray(\\n\\t\\t\\t\\t\\t'{{SETTINGS_URL}}' => esc_url( admin_url( 'admin.php?page=axismundi-emoji-settings' ) ),\\n\\t\\t\\t\\t\\t'{{EDIT_URL}}'     => esc_url( admin_url( 'post.php?post=' . $page_id . '&action=edit' ) ),\\n\\t\\t\\t\\t)\\n\\t\\t\\t),\\n\\t\\t)\\n\\t);\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["0.3.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[],"plugin_category":[],"plugin_contributors":[270183],"plugin_business_model":[],"class_list":["post-370649","plugin","type-plugin","status-publish","hentry","plugin_contributors-kimjiwoon","plugin_committers-kimjiwoon"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/axismundi-emoji.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Axismundi Emoji handles both kinds of emoji a WordPress site meets.<\/p>\n\n<h4>Custom emoji<\/h4>\n\n<p>Custom emoji are site-specific images addressed by a <code>:shortcode:<\/code> inside otherwise plain text. They work on a site of their own, and federate as FEP-9098 declarations when a federation plugin is present.<\/p>\n\n<ul>\n<li>Local: upload emoji through WordPress's own upload validation. A <code>:shortcode:<\/code> for one of them renders as its image in posts and comments, and is declared in the outbound <code>tag<\/code> array of the Notes, Articles, and Actors that use it. Emoji marked local-only render at home and travel as their shortcode, never as an image.<\/li>\n<li>Received: remote emoji declared by other servers are recorded, held in an authority-gated review queue, verified against their own authority, cached as bytes once approved, and substituted into received Object bodies, Actor names, and Actor biographies. A shortcode nobody approved stays text, and a remote emoji is never matched by name alone.<\/li>\n<li>Emoji reactions (FEP-c0e0) belong to Axismundi Activities; this plugin observes their declared custom emoji so approved reaction chips render through the same cache.<\/li>\n<\/ul>\n\n<h4>Unicode emoji<\/h4>\n\n<p>Unicode emoji stay text. Where a browser cannot draw one \u2014 flags on Windows, the newest Emoji 17 sequences on older systems \u2014 this plugin can draw it with a bundled Noto Color Emoji font instead of replacing it with an image. The emoji remains the same character for copying, searching, and screen readers.<\/p>\n\n<p>Choose the behaviour under Emojis \u203a Settings (see below). WordPress's own image fallback stays available as the last resort, and can be turned off.<\/p>\n\n<h4>Emoji picker<\/h4>\n\n<p>One toolbar button in the block editor opens a picker with recent emoji, this site's custom emoji, and the Unicode 17.0 RGI set grouped by category. Choosing a custom emoji inserts its <code>:shortcode:<\/code>; choosing a Unicode emoji inserts the character itself. Nothing but text is saved.<\/p>\n\n<p>The design is recorded in <code>docs\/AXISMUNDI-EMOJI-ARCHITECTURE.md<\/code> and <code>docs\/AXISMUNDI-EMOJI-UNICODE.md<\/code> at the repository root.<\/p>\n\n<h3>Settings<\/h3>\n\n<p>Emojis \u203a Settings (requires the <code>manage_options<\/code> capability).<\/p>\n\n<p>Rendering:<\/p>\n\n<ul>\n<li>Automatic fallback (default) \u2014 the browser draws emoji itself where it can. Where it cannot draw a flag, the flag is drawn with a small flags-only font (about 700 KB), downloaded only by browsers that need it.<\/li>\n<li>Use Noto Color Emoji \u2014 every Unicode emoji on the site is drawn with the complete Noto Color Emoji font (about 1.9 MB), so emoji look the same on every device. The font is downloaded once, on the first page with an emoji, and cached.<\/li>\n<li>WordPress fallback only \u2014 the plugin leaves Unicode emoji alone and loads no font.<\/li>\n<\/ul>\n\n<p>WordPress emoji images: a switch for WordPress's own fallback, which replaces emoji a browser cannot draw with images from WordPress.org. Turn it off to make no emoji image requests to WordPress.org from the site's pages. Feeds and emails are not affected; WordPress handles emoji there on its own.<\/p>\n\n<h3>External services<\/h3>\n\n<p>The plugin's own Unicode fallback makes no external requests: the fonts and the emoji catalogue are served from this site.<\/p>\n\n<ul>\n<li>Custom emoji received from other servers: when a federated post, profile, or reaction declares a custom emoji, the plugin fetches that emoji's metadata and image from the declaring server (the URLs in its ActivityPub <code>Emoji<\/code> declaration) to verify and cache it. This happens only for content that reached this site through federation, and remote images are cached locally rather than hotlinked. The terms and privacy policy that apply are those of each remote server.<\/li>\n<li>WordPress emoji images: WordPress core, not this plugin, loads emoji images from <code>s.w.org<\/code> (WordPress.org) where a browser cannot draw an emoji. The Settings switch above turns this off on the site's pages. WordPress.org privacy policy: https:\/\/wordpress.org\/about\/privacy\/<\/li>\n<\/ul>\n\n<h3>Bundled fonts and data<\/h3>\n\n<ul>\n<li>Noto Color Emoji, COLRv1, googlefonts\/noto-emoji v2.051 (commit 8998f5dd683424a73e2314a8c1f1e359c19e8742), converted to WOFF2 without glyph changes, and a flags-only subset of it. SIL Open Font License 1.1. License, provenance, and SHA-256 checksums are in <code>assets\/fonts\/noto-color-emoji\/<\/code> (<code>OFL.txt<\/code>, <code>source.txt<\/code>, <code>manifest.json<\/code>). The fonts are also offered in the Font Library as an \"Axismundi Emoji\" collection.<\/li>\n<li>Unicode Emoji 17.0 RGI catalogue, derived from Unicode's <code>emoji-test.txt<\/code>. Unicode License; see <code>assets\/unicode\/catalogue\/rgi-17.0.LICENSE.txt<\/code>.<\/li>\n<\/ul>\n\n<h3>Bundled emoji<\/h3>\n\n<p>The plugin ships two emoji. Their terms differ; <code>emoji\/LICENSE.txt<\/code> records both.<\/p>\n\n<ul>\n<li><code>:axismundi:<\/code> at <code>emoji\/axismundi.webp<\/code> \u2014 a 200x200 WebP derived from the project's brand symbol, 5.6 KB, transparency intact, released under GPL-3.0-or-later by its copyright holder.<\/li>\n<li><code>:wordpress:<\/code> at <code>emoji\/wordpress.webp<\/code> \u2014 the WordPress W Mark, recoloured and scaled to 200x200. It is a trademark of the WordPress Foundation and is not licensed under the GPL; it is included only to refer to WordPress the software, as the Foundation's trademark policy permits. An operator can delete it under Emojis \u203a Local.<\/li>\n<\/ul>\n\n<p>One size, because FEP-9098 gives an Emoji exactly one <code>icon.url<\/code>: there is no srcset\nin the emoji contract, so a second file would federate nothing. 200px is generous\nenough for a picker tile and scales down cleanly to the ~1.2em inline case.<\/p>\n\n<pre><code>:axismundi: also serves as the outbound conformance fixture, so the test suite never depends\n<\/code><\/pre>\n\n<p>on another instance's restricted asset.<\/p>\n\n<!--section=changelog-->\n<h4>0.3.1<\/h4>\n\n<ul>\n<li>The emoji picker now appears in the block editor with Axismundi Emoji alone. In 0.3.0 it appeared only where another Axismundi plugin asked for it.<\/li>\n<li>Picker sizes and positions stay on whole pixels, so tiles and the category strip stay sharp at fractional display scaling.<\/li>\n<li>Corrects the Bundled emoji section: the plugin ships two emoji, not one.<\/li>\n<\/ul>\n\n<p>Earlier releases are listed in changelog.txt.<\/p>","raw_excerpt":"Custom and Unicode emoji: custom emoji with review and caching, a self-hosted Noto Color Emoji fallback, and one editor picker.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370649"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kimjiwoon"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370649"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370649"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370649"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370649"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370649"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}