diff --git a/public/scripts/extensions/settingsearch/index.js b/public/scripts/extensions/settingsearch/index.js
new file mode 100644
index 000000000..390ab75be
--- /dev/null
+++ b/public/scripts/extensions/settingsearch/index.js
@@ -0,0 +1,57 @@
+export { MODULE_NAME };
+
+const MODULE_NAME = 'settingsSearch';
+async function addSettingsSearchHTML() {
+
+ const html = `
+
`
+
+ $("#user-settings-block").prepend(html);
+}
+
+async function searchSettings() {
+ removeHighlighting(); // Remove previous highlights
+ let searchString = $("#settingsSearch").val();
+ let searchableText = $("#user-settings-block-content"); // Get the HTML block
+ if (searchString.trim() !== "") {
+ highlightMatchingElements(searchableText[0], searchString); // Highlight matching elements
+ }
+}
+function isParentHeader(element) {
+ return $(element).closest('h4, h3').length > 0;
+}
+function highlightMatchingElements(element, searchString) {
+ $(element).contents().each(function () {
+ const isTextNode = this.nodeType === Node.TEXT_NODE;
+ const isElementNode = this.nodeType === Node.ELEMENT_NODE;
+
+ if (isTextNode && this.nodeValue.trim() !== "" && !isParentHeader(this)) {
+ const parentElement = $(this).parent();
+ const elementText = this.nodeValue;
+
+ if (elementText.toLowerCase().includes(searchString.toLowerCase())) {
+ parentElement.addClass('highlighted'); // Add CSS class to highlight matched elements
+ }
+ } else if (isElementNode && !$(this).is("h4")) {
+ highlightMatchingElements(this, searchString);
+ }
+ });
+}
+function removeHighlighting() {
+ $(".highlighted").removeClass("highlighted"); // Remove CSS class from previously highlighted elements
+}
+jQuery(() => {
+ addSettingsSearchHTML();
+ $('#settingsSearch').on('input change', searchSettings);
+});
+
+
+
+
+
+
+
diff --git a/public/scripts/extensions/settingsearch/manifest.json b/public/scripts/extensions/settingsearch/manifest.json
new file mode 100644
index 000000000..fd743c535
--- /dev/null
+++ b/public/scripts/extensions/settingsearch/manifest.json
@@ -0,0 +1,11 @@
+{
+ "display_name": "Settings Search",
+ "loading_order": 15,
+ "requires": [],
+ "optional": [],
+ "js": "index.js",
+ "css": "style.css",
+ "author": "RossAscends",
+ "version": "1.0.0",
+ "homePage": "https://github.com/SillyTavern/SillyTavern"
+}
\ No newline at end of file
diff --git a/public/scripts/extensions/settingsearch/style.css b/public/scripts/extensions/settingsearch/style.css
new file mode 100644
index 000000000..100ed2a7c
--- /dev/null
+++ b/public/scripts/extensions/settingsearch/style.css
@@ -0,0 +1,5 @@
+.highlighted {
+ color: black;
+ background-color: yellow;
+ text-shadow: none !important;
+}
\ No newline at end of file