diff --git a/CHANGELOG.md b/CHANGELOG.md
index bfe371b3f..c563c2883 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Added
- Block mature content when accessed directly from URL _community pr!_ ([#4560](https://github.com/lbryio/lbry-desktop/pull/4560))
+- You can now add LBRY as a search engine in your browser (via OpenSearch) _community pr!_ ([#4640](https://github.com/lbryio/lbry-desktop/pull/4640))
### Changed
diff --git a/static/opensearch.xml b/static/opensearch.xml
new file mode 100644
index 000000000..3b73b6ac2
--- /dev/null
+++ b/static/opensearch.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/web/src/html.js b/web/src/html.js
index e2b541dcc..3532d6e83 100644
--- a/web/src/html.js
+++ b/web/src/html.js
@@ -59,7 +59,9 @@ function buildOgMetadata(overrideOptions = {}) {
`\n` +
`\n` +
'\n' +
- ``;
+ `` +
+ ``;
return head;
}
diff --git a/web/src/xml.js b/web/src/xml.js
new file mode 100644
index 000000000..bad950406
--- /dev/null
+++ b/web/src/xml.js
@@ -0,0 +1,18 @@
+const { URL, SITE_TITLE } = require('../../config.js');
+
+function getOpenSearchXml() {
+ return (
+ `${SITE_TITLE}` +
+ `Search ${SITE_TITLE}` +
+ 'UTF-8' +
+ `${URL}/public/favicon.png` +
+ `` +
+ `${URL}`
+ );
+}
+
+function insertVariableXml(fullXml, xmlToInsert) {
+ return fullXml.replace(/.*/s, xmlToInsert);
+}
+
+module.exports = { getOpenSearchXml, insertVariableXml };
diff --git a/web/webpack.config.js b/web/webpack.config.js
index 5a13c0d54..c89753fb2 100644
--- a/web/webpack.config.js
+++ b/web/webpack.config.js
@@ -7,6 +7,7 @@ const CopyWebpackPlugin = require('copy-webpack-plugin');
const { DefinePlugin, ProvidePlugin } = require('webpack');
const SentryWebpackPlugin = require('@sentry/webpack-plugin');
const { insertToHead, buildBasicOgMetadata } = require('./src/html');
+const { insertVariableXml, getOpenSearchXml } = require('./src/xml');
const CUSTOM_ROOT = path.resolve(__dirname, '../custom/');
const STATIC_ROOT = path.resolve(__dirname, '../static/');
@@ -24,6 +25,13 @@ const copyWebpackCommands = [
return insertToHead(content.toString(), buildBasicOgMetadata());
},
},
+ {
+ from: `${STATIC_ROOT}/opensearch.xml`,
+ to: `${DIST_ROOT}/opensearch.xml`,
+ transform(content, path) {
+ return insertVariableXml(content.toString(), getOpenSearchXml());
+ },
+ },
{
from: `${STATIC_ROOT}/img/favicon.png`,
to: `${DIST_ROOT}/public/favicon.png`,