diff --git a/ui/frontend/assets/favicon/android-chrome-192x192.png b/ui/frontend/assets/favicon/android-chrome-192x192.png
new file mode 100644
index 000000000..1f57d14a0
Binary files /dev/null and b/ui/frontend/assets/favicon/android-chrome-192x192.png differ
diff --git a/ui/frontend/assets/favicon/apple-touch-icon.png b/ui/frontend/assets/favicon/apple-touch-icon.png
new file mode 100644
index 000000000..b5cd90310
Binary files /dev/null and b/ui/frontend/assets/favicon/apple-touch-icon.png differ
diff --git a/ui/frontend/assets/favicon/browserconfig.xml b/ui/frontend/assets/favicon/browserconfig.xml
new file mode 100644
index 000000000..2aa8f8a85
--- /dev/null
+++ b/ui/frontend/assets/favicon/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #e5e5e5
+
+
+
diff --git a/ui/frontend/assets/favicon/favicon-16x16.png b/ui/frontend/assets/favicon/favicon-16x16.png
new file mode 100644
index 000000000..54c750764
Binary files /dev/null and b/ui/frontend/assets/favicon/favicon-16x16.png differ
diff --git a/ui/frontend/assets/favicon/favicon-32x32.png b/ui/frontend/assets/favicon/favicon-32x32.png
new file mode 100644
index 000000000..311a457a3
Binary files /dev/null and b/ui/frontend/assets/favicon/favicon-32x32.png differ
diff --git a/ui/frontend/assets/favicon/favicon.ico b/ui/frontend/assets/favicon/favicon.ico
new file mode 100644
index 000000000..917eb9ad6
Binary files /dev/null and b/ui/frontend/assets/favicon/favicon.ico differ
diff --git a/ui/frontend/assets/favicon/mstile-150x150.png b/ui/frontend/assets/favicon/mstile-150x150.png
new file mode 100644
index 000000000..70ad11dd5
Binary files /dev/null and b/ui/frontend/assets/favicon/mstile-150x150.png differ
diff --git a/ui/frontend/assets/favicon/safari-pinned-tab.svg b/ui/frontend/assets/favicon/safari-pinned-tab.svg
new file mode 100644
index 000000000..9f6e852f6
--- /dev/null
+++ b/ui/frontend/assets/favicon/safari-pinned-tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ui/frontend/assets/favicon/site.webmanifest b/ui/frontend/assets/favicon/site.webmanifest
new file mode 100644
index 000000000..d27fcc3b2
--- /dev/null
+++ b/ui/frontend/assets/favicon/site.webmanifest
@@ -0,0 +1,13 @@
+{
+ "name": "Rust Playground",
+ "short_name": "Rust Playground",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#e5e5e5",
+ "background_color": "#e5e5e5"
+}
diff --git a/ui/frontend/index.ejs b/ui/frontend/index.ejs
index 07e3a2c88..3ae940db6 100644
--- a/ui/frontend/index.ejs
+++ b/ui/frontend/index.ejs
@@ -5,6 +5,13 @@
<%= htmlWebpackPlugin.options.title %>
+
+
+
+
+
+
+
diff --git a/ui/frontend/webpack.config.js b/ui/frontend/webpack.config.js
index e5d6d7076..82581c49a 100644
--- a/ui/frontend/webpack.config.js
+++ b/ui/frontend/webpack.config.js
@@ -129,6 +129,7 @@ module.exports = function(_, argv) {
new CopyPlugin({
patterns: [
{ from: 'robots.txt', to: '..' },
+ { from: 'assets/favicon', to: '..' },
],
}),
new MiniCssExtractPlugin({