diff --git a/dist/js/gutenberg.js b/dist/js/gutenberg.js
index ff6325909d9bae814ad5a9247bdde9e7a6ec704f..538d84802de8aac982c4f024d4b4847e34750746 100644
--- a/dist/js/gutenberg.js
+++ b/dist/js/gutenberg.js
@@ -1,8 +1 @@
-/******/ (function() { // webpackBootstrap
-var __webpack_exports__ = {};
-/*!*****************************!*\
-  !*** ./src/js/gutenberg.js ***!
-  \*****************************/
-console.log('Hello, world');
-/******/ })()
-;
\ No newline at end of file
+!function(){var o,r={194:function(o){"use strict";o.exports=wp.i18n}},t={};function n(o){var e=t[o];if(void 0!==e)return e.exports;var s=t[o]={exports:{}};return r[o](s,s.exports,n),s.exports}o=n(194).__,console.log(o("Hello, world","wp_revisions_control"))}();
\ No newline at end of file
diff --git a/inc/class-wp-revisions-control.php b/inc/class-wp-revisions-control.php
index 3ca4d905d81b9fa729c757ce2432355b28d93690..224d7eab67b8f65dcbaa1a52aefc511b5ecfaa26 100644
--- a/inc/class-wp-revisions-control.php
+++ b/inc/class-wp-revisions-control.php
@@ -114,11 +114,36 @@ class WP_Revisions_Control {
 	 * Register actions and filters.
 	 */
 	public function action_init() {
+		add_action( 'rest_api_init', array( $this, 'action_rest_api_init' ) );
 		add_action( 'admin_init', array( $this, 'action_admin_init' ) );
+		add_action( 'enqueue_block_editor_assets', array( $this, 'action_enqueue_block_editor_assets' ) );
 
 		add_filter( 'wp_revisions_to_keep', array( $this, 'filter_wp_revisions_to_keep' ), $this->plugin_priority(), 2 );
 	}
 
+	/**
+	 * Register meta for Gutenberg UI.
+	 */
+	public function action_rest_api_init() {
+		foreach ( array_keys( $this->get_post_types() ) as $post_type ) {
+			register_meta(
+				'post',
+				$this->meta_key_limit,
+				array(
+					'object_subtype' => $post_type,
+					'type'           => 'integer',
+					'default'        => -1,
+					'single'         => true,
+					'show_in_rest'   => true,
+					'description' => __(
+						'Number of revisions to retain.',
+						'wp_revisions_control'
+					),
+				)
+			);
+		}
+	}
+
 	/**
 	 * Register plugin's admin-specific elements.
 	 *
@@ -145,6 +170,23 @@ class WP_Revisions_Control {
 		WP_Revisions_Control_Bulk_Actions::get_instance( $post_types );
 	}
 
+	/**
+	 * Register Gutenberg script.
+	 */
+	public function action_enqueue_block_editor_assets() {
+		wp_enqueue_script(
+			$this->settings_section,
+			plugins_url(
+				'dist/js/gutenberg.js',
+				dirname( __FILE__ )
+			),
+			array(
+				'wp-i18n',
+			),
+			1
+		);
+	}
+
 	/**
 	 * PLUGIN SETTINGS SECTION
 	 * FOUND UNDER SETTINGS > WRITING
diff --git a/languages/wp-revisions-control-gutenberg.pot b/languages/wp-revisions-control-gutenberg.pot
new file mode 100644
index 0000000000000000000000000000000000000000..4dead06726e5e952a08d107576dbc205c26b68ed
--- /dev/null
+++ b/languages/wp-revisions-control-gutenberg.pot
@@ -0,0 +1,8 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=utf-8\n"
+"X-Generator: babel-plugin-makepot\n"
+
+#: src/js/gutenberg.js:3
+msgid "Hello, world"
+msgstr ""
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index b3210807d1938598a4f4012e7efd0dc436a61b54..95e1cb4362c732083061e2fffd4eaac1831c22b8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,6 +8,7 @@
       "version": "0.1.0",
       "devDependencies": {
         "@babel/preset-react": "^7.13.13",
+        "@wordpress/babel-plugin-makepot": "^4.1.0",
         "grunt": "~0.4.5",
         "grunt-wp-i18n": "~0.5.0",
         "grunt-wp-readme-to-markdown": "~1.0.0",
@@ -2334,6 +2335,38 @@
         }
       }
     },
+    "node_modules/@wordpress/babel-plugin-makepot": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-makepot/-/babel-plugin-makepot-4.1.0.tgz",
+      "integrity": "sha512-d4ywDLrPMNS9ECh+G3coDGhuqjemDo27Fck94wXRY3L80TbGF8DaLU2/2Vz3s3EcwlrRiJWRKskxPiYIpsiH9Q==",
+      "dev": true,
+      "dependencies": {
+        "gettext-parser": "^1.3.1",
+        "lodash": "^4.17.19"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@wordpress/babel-plugin-makepot/node_modules/gettext-parser": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
+      "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
+      "dev": true,
+      "dependencies": {
+        "encoding": "^0.1.12",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node_modules/@wordpress/babel-plugin-makepot/node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
+    },
     "node_modules/@xtuc/ieee754": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -17755,7 +17788,8 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz",
       "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "@webpack-cli/info": {
       "version": "1.2.3",
@@ -17770,7 +17804,36 @@
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz",
       "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==",
-      "dev": true
+      "dev": true,
+      "requires": {}
+    },
+    "@wordpress/babel-plugin-makepot": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-makepot/-/babel-plugin-makepot-4.1.0.tgz",
+      "integrity": "sha512-d4ywDLrPMNS9ECh+G3coDGhuqjemDo27Fck94wXRY3L80TbGF8DaLU2/2Vz3s3EcwlrRiJWRKskxPiYIpsiH9Q==",
+      "dev": true,
+      "requires": {
+        "gettext-parser": "^1.3.1",
+        "lodash": "^4.17.19"
+      },
+      "dependencies": {
+        "gettext-parser": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
+          "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
+          "dev": true,
+          "requires": {
+            "encoding": "^0.1.12",
+            "safe-buffer": "^5.1.1"
+          }
+        },
+        "lodash": {
+          "version": "4.17.21",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+          "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+          "dev": true
+        }
+      }
     },
     "@xtuc/ieee754": {
       "version": "1.2.0",
@@ -17832,7 +17895,8 @@
       "version": "3.5.2",
       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
       "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "alphanum-sort": {
       "version": "1.0.2",
@@ -21126,7 +21190,6 @@
       "requires": {
         "async": "~0.9.0",
         "gettext-parser": "~1.1.0",
-        "grunt": "~0.4.5",
         "underscore": "~1.8.2",
         "underscore.string": "~3.0.3"
       },
@@ -21149,7 +21212,8 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/grunt-wp-readme-to-markdown/-/grunt-wp-readme-to-markdown-1.0.0.tgz",
       "integrity": "sha1-dJ/9gDtYTVC9ZOc6ehqRhz6djPs=",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "handle-thing": {
       "version": "2.0.1",
@@ -21546,7 +21610,8 @@
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
       "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "ieee754": {
       "version": "1.2.1",
@@ -24729,7 +24794,8 @@
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
       "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "postcss-modules-local-by-default": {
       "version": "4.0.0",
@@ -28379,7 +28445,8 @@
       "version": "7.4.4",
       "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
       "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
-      "dev": true
+      "dev": true,
+      "requires": {}
     },
     "xtend": {
       "version": "4.0.2",
diff --git a/package.json b/package.json
index cd118ff8d807bca37387a989fabf990916ec7666..94ad9bc306cad42c9fd027f717b4ec978a842e16 100755
--- a/package.json
+++ b/package.json
@@ -6,6 +6,7 @@
   "author": "Erick Hitter",
   "devDependencies": {
     "@babel/preset-react": "^7.13.13",
+    "@wordpress/babel-plugin-makepot": "^4.1.0",
     "grunt": "~0.4.5",
     "grunt-wp-i18n": "~0.5.0",
     "grunt-wp-readme-to-markdown": "~1.0.0",
@@ -14,6 +15,6 @@
   "scripts": {
     "dev": "NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
     "watch": "NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
-    "production": "NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js"
+    "prod": "NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js"
   }
 }
diff --git a/src/js/gutenberg.js b/src/js/gutenberg.js
index 3355c937cec3de925706a838aaafdfe1e675c1cf..f6136ff9f8f5dbf41a6286a583a6d8849aeb959b 100644
--- a/src/js/gutenberg.js
+++ b/src/js/gutenberg.js
@@ -1 +1,3 @@
-console.log( 'Hello, world' );
+const { __ } = require( '@wordpress/i18n' );
+
+console.log( __( 'Hello, world', 'wp_revisions_control' ) );
diff --git a/webpack.mix.js b/webpack.mix.js
index 660f89829f2765999fbab0785453a35b94d5fab6..95e1a2b8efee2a0609b5e99abcec9cd5d64ca958 100644
--- a/webpack.mix.js
+++ b/webpack.mix.js
@@ -3,9 +3,20 @@ const mix = require( 'laravel-mix' );
 mix.autoload( {} )
 	.js( 'src/js/gutenberg.js', 'dist/js/gutenberg.js' )
 	.react()
+	.babelConfig( {
+		'plugins': [
+			[
+				'@wordpress/babel-plugin-makepot',
+				{
+					'output': 'languages/wp-revisions-control-gutenberg.pot',
+				},
+			],
+		],
+	} )
 	.webpackConfig( {
 		externals: {
+			'@wordpress/i18n': 'wp.i18n',
 			'react': 'React',
-			'react-dom': 'ReactDOM'
+			'react-dom': 'ReactDOM',
 		}
 	} );