diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php
index 2df89a9..ec326f0 100644
--- a/src/wp-includes/formatting.php
+++ b/src/wp-includes/formatting.php
@@ -4529,7 +4529,7 @@ function print_emoji_detection_script() {
 
 	$settings = array(
 		/**
-		 * Filter the URL where emoji images are hosted.
+		 * Filter the URL where bitmap emoji images are hosted.
 		 *
 		 * @since 4.2.0
 		 *
@@ -4538,13 +4538,31 @@ function print_emoji_detection_script() {
 		'baseUrl' => apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/72x72/' ),
 
 		/**
-		 * Filter the extension of the emoji files.
+		 * Filter the bitmap extension of the emoji files.
 		 *
 		 * @since 4.2.0
 		 *
 		 * @param string The emoji extension. Default .png.
 		 */
 		'ext' => apply_filters( 'emoji_ext', '.png' ),
+
+		/**
+		 * Filter the URL where vector emoji images are hosted.
+		 *
+		 * @since 4.2.0
+		 *
+		 * @param string The emoji base URL.
+		 */
+		'vectorUrl' => apply_filters( 'emoji_vector_url', 'https://s.w.org/images/core/emoji/svg/' ),
+
+		/**
+		 * Filter the vector extension of the emoji files.
+		 *
+		 * @since 4.2.0
+		 *
+		 * @param string The emoji extension. Default .png.
+		 */
+		'vectorExt' => apply_filters( 'emoji_vector_ext', '.svg' ),
 	);
 
 	$version = 'ver=' . $wp_version;
diff --git a/src/wp-includes/js/wp-emoji.js b/src/wp-includes/js/wp-emoji.js
index dafcc36..81f716e 100644
--- a/src/wp-includes/js/wp-emoji.js
+++ b/src/wp-includes/js/wp-emoji.js
@@ -3,6 +3,9 @@
 	function wpEmoji() {
 		var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
 
+		// Compression and maintain local scope
+		document = window.document,
+
 		// Private
 		twemoji, timer,
 		loaded = false,
@@ -10,6 +13,25 @@
 		ie11 = window.navigator.userAgent.indexOf( 'Trident/7.0' ) > 0;
 
 		/**
+		 * Detect if the browser supports SVG.
+		 *
+		 * @since 4.6.0
+		 *
+		 * @return {Boolean} True if the browser supports svg, false if not.
+		 */
+		function browserSupportsSvgAsImage() {
+			if ( !! document.implementation.hasFeature ) {
+				// Source: Modernizr
+				// https://github.com/Modernizr/Modernizr/blob/master/feature-detects/svg/asimg.js
+				return document.implementation.hasFeature( 'http://www.w3.org/TR/SVG11/feature#Image', '1.1' );
+			}
+
+			// document.implementation.hasFeature is deprecated. It can be presumed
+			// if future browsers remove it, the browser will support SVGs as images.
+			return true;
+		}
+
+		/**
 		 * Runs when the document load event is fired, so we can do our first parse of the page.
 		 *
 		 * @since 4.2.0
@@ -141,8 +163,8 @@
 
 			args = args || {};
 			params = {
-				base: settings.baseUrl,
-				ext: settings.ext,
+				base: browserSupportsSvgAsImage() ? settings.vectorUrl : settings.baseUrl,
+				ext:  browserSupportsSvgAsImage() ? settings.vectorExt : settings.ext,
 				className: args.className || 'emoji',
 				callback: function( icon, options ) {
 					// Ignore some standard characters that TinyMCE recommends in its character map.
