diff --git a/docs/css/instantsearch.css b/docs/css/instantsearch.css
new file mode 100644
index 00000000..ac504cf8
--- /dev/null
+++ b/docs/css/instantsearch.css
@@ -0,0 +1,150 @@
+.md-content {
+    margin: 0 auto;
+}
+
+footer.md-footer {
+    left: 0;
+}
+
+.md-content .ais-InstantSearch {
+    letter-spacing: 0.12px;
+}
+
+.md-content .ais-InstantSearch h1 {
+    font-size: 32px;
+    line-height: 36px;
+    letter-spacing: 0.17px;
+    margin: 8px 0 40px;
+}
+
+.md-content .ais-InstantSearch .ais-SearchBox .ais-SearchBox-submit {
+    left: 16px;
+}
+
+.md-content .ais-InstantSearch .ais-SearchBox .ais-SearchBox-submitIcon {
+    width: 16px;
+}
+
+.md-content .ais-InstantSearch .ais-SearchBox .ais-SearchBox-input {
+    font-size: 14px;
+    line-height: 21px;
+    height: 48px;
+    padding-left: 48px;
+    border-color: #A0A4A8;
+}
+
+.md-content .ais-InstantSearch .ais-Hits-list {
+    margin-left: 0;
+}
+
+.md-content .ais-InstantSearch .ais-Hits-item {
+    padding: 0px;
+    width: initial;
+    margin: 0;
+    border: 0;
+    box-shadow: none;
+}
+
+.md-content .ais-InstantSearch .ais-Hits-item + .ais-Hits-item {
+    border-top: 1px solid #E0E0E8;
+    margin-top: 16px;
+    padding-top: 16px;
+}
+
+.md-content .ais-InstantSearch .ais-Highlight-highlighted {
+    background-color: #ECF4FF;
+    color: #4191FF;
+    font-size: inherit;
+    line-height: inherit;
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry {
+    display: block;
+    color: var(--ibexa-dusk-black);
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry:hover,
+.md-content .ais-InstantSearch .instantsearch__entry:hover .instantsearch__entry-header,
+.md-content .ais-InstantSearch .instantsearch__entry:hover .instantsearch__entry-content {
+    color: var(--ibexa-jazzberry)
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry:hover mark,
+.md-content .ais-InstantSearch .instantsearch__entry:hover .instantsearch__entry-header mark,
+.md-content .ais-InstantSearch .instantsearch__entry:hover .instantsearch__entry-content mark {
+    color: var(--ibexa-jazzberry)
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry-header {
+    font-size: 18px;
+    line-height: 20px;
+    letter-spacing: 0.12px;
+    margin: 4px 0;
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry-header .ais-Highlight-highlighted {
+    font-size: 18px;
+    line-height: 20px;
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry-content {
+    color: #3B424A;
+    font-size: 14px;
+    line-height: 21px;
+    letter-spacing: 0.12px;
+    margin-top: 10px;
+    padding-left: 10px;
+    border-left: 2px solid var(--mid-grey);
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry-content .ais-Highlight-highlighted {
+    font-size: 14px;
+    line-height: 21px;
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry-breadcrumbs {
+    font-size: 12px;
+    line-height: 21px;
+    letter-spacing: 0.12px;
+}
+
+.md-content .ais-InstantSearch .instantsearch__entry-breadcrumbs-item:after {
+    content: '›';
+    display: inline-block;
+    padding: 0 5px;
+}
+
+.md-content .ais-InstantSearch .ais-Pagination .ais-Pagination-list:not([hidden]) {
+    display: flex;
+    list-style: none;
+    margin: 15px 0 0;
+    display: flex;
+    justify-content: flex-end;
+}
+
+.md-content .ais-InstantSearch .ais-Pagination .ais-Pagination-list .ais-Pagination-item {
+    margin: 0;
+}
+
+.md-content .ais-InstantSearch .ais-Pagination .ais-Pagination-link {
+    border: none;
+    font-size: 14px;
+    line-height: 21px;
+    letter-spacing: 0.12px;
+    color: var(--ibexa-dusk-black);
+    height: 40px;
+    min-width: 40px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.md-content .ais-InstantSearch .ais-Pagination .ais-Pagination-item--selected .ais-Pagination-link,
+.md-content .ais-InstantSearch .ais-Pagination .ais-Pagination-link:hover {
+    background-color: #F3F3F6;
+    border-radius: 5px;
+}
+
+#version {
+    display: none;
+}
diff --git a/docs/css/instantsearch.js b/docs/css/instantsearch.js
new file mode 100644
index 00000000..8bf9d071
--- /dev/null
+++ b/docs/css/instantsearch.js
@@ -0,0 +1,166 @@
+(function(global, doc) {
+    let match;
+    const search_query = (match = doc.location.search.match(/sq=(.*?)(&|$)/)) ? match[1] : '';
+    const parsed_search_query = decodeURI(search_query.replaceAll('+', ' '));
+    const search_page = (match = doc.location.search.match(/p=(\d*?)(&|$)/)) ? match[1] : 1;
+    const parsed_search_page = parseInt(search_page);
+    let version = doc.location.pathname.split('/')[2];
+    if (!/^\d+\.\d+$/.test(version) && version !== 'latest') {
+        version = 'master';
+    }
+    const hitsContainer = '#hits';
+    const statsContainer = '#stats';
+    const paginationContainer = '#pagination';
+    const search = instantsearch({
+        indexName: 'ezplatform',
+        searchClient: algoliasearch('2DNYOU6YJZ', '21ce3e522455e18e7ee16cf7d66edb4b'),
+        initialUiState: {
+            ezplatform: {
+                query: parsed_search_query,
+                refinementList: { version: [version] },
+                page: parsed_search_page,
+            },
+        },
+        searchFunction(helper) {
+            if (helper.state.query) {
+                helper.search();
+                $(statsContainer).css('visibility', 'visible');
+                $(paginationContainer).show();
+            } else {
+                $(hitsContainer).empty();
+                $(statsContainer).css('visibility', 'hidden');
+                $(paginationContainer).hide();
+            }
+        },
+    });
+
+    getNextSearchURL = () => {
+        const searchInputElements = document.getElementsByClassName('ais-SearchBox-input');
+        const text = searchInputElements[0].value.trim();
+        const selectedPaginationItemElements = doc.getElementsByClassName('ais-Pagination-item--selected');
+        const page = selectedPaginationItemElements.length ? parseInt(selectedPaginationItemElements[0].innerText) : 1;
+        const url = new URL(window.location);
+        url.searchParams.set('sq', text);
+        url.searchParams.set('p', page);
+        return url;
+    };
+
+    let idleTimer;
+    const startIdleTimer = (url) => {
+        stopIdleTimer();
+        idleTimer = window.setTimeout(() => {
+            window.history.pushState({}, '', url);
+        }, 1500);
+    };
+    const stopIdleTimer = () => {
+        window.clearTimeout(idleTimer);
+    };
+
+    doc.getElementById('searchbox').addEventListener('keyup', function(event) {
+        const url = getNextSearchURL();
+        if (url.searchParams.get('sq') != (new URL(window.location)).searchParams.get('sq')) {
+            url.searchParams.set('p', 1);
+            startIdleTimer(url);
+        }
+    });
+
+    doc.getElementById('pagination').addEventListener('click', function(event) {
+        stopIdleTimer();
+        const url = getNextSearchURL();
+        window.history.pushState({}, '', url);
+    });
+
+    window.onpopstate = (event) => {
+        window.location.reload();
+    };
+
+    search.addWidgets([
+        instantsearch.widgets.configure({
+            hitsPerPage: 10,
+        }),
+        instantsearch.widgets.stats({
+            container: statsContainer,
+            templates: {
+                text: `
+                Search results ({{#helpers.formatNumber}}{{nbHits}}{{/helpers.formatNumber}})
+            
`,
+            },
+        }),
+        instantsearch.widgets.searchBox({
+            container: '#searchbox',
+        }),
+        instantsearch.widgets.hits({
+            container: hitsContainer,
+            templates: {
+                item: (hit) => {
+                    const hierarchy = Object.entries(hit.hierarchy).filter(([, value]) => value);
+                    const breadcrumbsKeys = hierarchy.map(([key]) => key);
+                    const entryNameKey = breadcrumbsKeys.pop();
+
+                    const headerHTML = ``;
+
+                    let breadcrumbsHTML = '';
+                    let contentHTML = '';
+
+                    if (hit.content && hit._highlightResult.content.matchedWords.length && (!hit._highlightResult.content.fullyHighlighted || 1 < hit._highlightResult.content.matchedWords.length)) {
+                        contentHTML = `
+                            ${instantsearch.highlight({
+                            attribute: `content`,
+                            highlightedTagName: 'mark',
+                            hit: hit,
+                        }).replaceAll('&', '&')}
+                        
`;
+                    }
+
+                    breadcrumbsKeys?.forEach((breadcrumbKey) => {
+                        breadcrumbsHTML += `
+                            ${instantsearch.highlight({
+                            attribute: `hierarchy.${breadcrumbKey}`,
+                            highlightedTagName: 'mark',
+                            hit: hit,
+                        })}
+                        `;
+                    });
+
+                    return resultHTML = `
+                        
+                            ${breadcrumbsHTML}
+                        
+                        ${headerHTML}
+                        ${contentHTML}
+                    `;
+                },
+            },
+        }),
+        instantsearch.widgets.pagination({
+            container: paginationContainer,
+            padding: 2,
+            templates: {
+                first: ``,
+                previous: ``,
+                next: ``,
+                last: ``,
+            },
+        }),
+        instantsearch.widgets.refinementList({
+            container: document.querySelector('#version'),
+            attribute: 'version',
+        }),
+    ]);
+
+    search.start();
+})(window, window.document);
diff --git a/docs/css/search.css b/docs/css/search.css
new file mode 100644
index 00000000..883da560
--- /dev/null
+++ b/docs/css/search.css
@@ -0,0 +1,137 @@
+.md-header .md-search .algolia-autocomplete .ds-dataset-1 {
+    padding: 0;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion {
+    padding: 0;
+}
+
+.md-header .md-search .algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content {
+    background-color: transparent;
+    color: var(--ibexa-jazzberry);
+}
+
+.md-header .md-search .algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--wrapper * {
+    color: var(--ibexa-jazzberry);
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--highlight {
+    background-color: #ECF4FF;
+    color: #4191FF !important;
+    box-shadow: none;
+    padding: 0;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main {
+    padding: 0 0 14px 0;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion:not(.algolia-docsearch-suggestion__main) {
+    padding: 14px 0;
+    border-top: 1px solid #E0E0E8;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header {
+    display: flex;
+    align-items: center;
+    font-size: 14px;
+    line-height: 21px;
+    letter-spacing: 0.12px;
+    height: 40px;
+    margin: 16px 0;
+    padding: 0 40px;
+    border: 0;
+    background-color: #F2F2F5;
+    color: var(--ibexa-dusk-black);
+    font-weight: 600;
+}
+
+.md-header .md-search .algolia-autocomplete .ds-suggestions > .ds-suggestion:first-child .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header {
+    margin-top: 0;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper {
+    padding: 0;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content {
+    float: none;
+    width: 100%;
+    text-align: left;
+    padding: 0;
+    margin: 0 40px;
+    color: var(--ibexa-dusk-black);
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title {
+    font-size: 18px;
+    line-height: 20px;
+    letter-spacing: 0.12px;
+    font-weight: 600;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column {
+    float: none;
+    width: 100%;
+    text-align: left;
+    color: #3B424A;
+    font-size: 12px;
+    line-height: 21px;
+    letter-spacing: 0.12px;
+    padding: 0;
+    margin: 0px 40px 4px;
+    display: flex;
+    flex-direction: column-reverse;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content::before {
+    display: none;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--text {
+    color: #3B424A;
+    font-size: 14px;
+    line-height: 21px;
+    letter-spacing: 0.12px;
+    margin-top: 10px;
+    padding-left: 10px;
+    border-left: 2px solid var(--mid-grey);
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-suggestion .aa-suggestion-title-separator {
+    padding: 0 5px;
+}
+
+.md-header .md-search .algolia-autocomplete .ds-dataset-1 {
+    z-index: 1;
+    padding-bottom: 70px;
+}
+
+.md-header .md-search .algolia-autocomplete .search-page-link-wrapper {
+    position: absolute;
+    z-index: 2;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    background-color: #F2F2F5;
+    width: 100%;
+    height: 60px;
+    padding: 0 40px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.md-header .md-search .algolia-autocomplete .search-page-link {
+    color: var(--link);
+    transition: color 125ms;
+}
+
+.md-header .md-search .algolia-autocomplete .search-page-link:hover {
+    color: var(--ibexa-jazzberry);
+    transition: color 125ms;
+}
+
+.md-header .md-search .algolia-autocomplete .algolia-docsearch-footer {
+    margin-right: 10px;
+}
diff --git a/docs/images/caret-back.svg b/docs/images/caret-back.svg
new file mode 100644
index 00000000..d1f332c1
--- /dev/null
+++ b/docs/images/caret-back.svg
@@ -0,0 +1,4 @@
+
diff --git a/docs/images/caret-double-back.svg b/docs/images/caret-double-back.svg
new file mode 100644
index 00000000..7e3a53b1
--- /dev/null
+++ b/docs/images/caret-double-back.svg
@@ -0,0 +1,10 @@
+
diff --git a/docs/images/caret-double-next.svg b/docs/images/caret-double-next.svg
new file mode 100644
index 00000000..41d13ea6
--- /dev/null
+++ b/docs/images/caret-double-next.svg
@@ -0,0 +1,10 @@
+
diff --git a/docs/images/caret-next.svg b/docs/images/caret-next.svg
new file mode 100644
index 00000000..50e97f27
--- /dev/null
+++ b/docs/images/caret-next.svg
@@ -0,0 +1,4 @@
+
diff --git a/docs/js/custom.js b/docs/js/custom.js
index 28eeaa1f..efa40eaa 100644
--- a/docs/js/custom.js
+++ b/docs/js/custom.js
@@ -3,8 +3,8 @@ let jquery = jQuery;
 
 $(document).ready(function() {
     // replace edit url
-    var branchName = 'master',
-        branchNameRegexp = /\/en\/([a-z0-9-_.]*)\//g.exec(document.location.href);
+    let branchName = 'master';
+    const branchNameRegexp = /\/en\/([a-z0-9-_.]*)\//g.exec(document.location.href);
 
     if (branchNameRegexp !== null && branchNameRegexp.hasOwnProperty(1) && branchNameRegexp[1].length) {
         branchName = branchNameRegexp[1];
@@ -15,7 +15,7 @@ $(document).ready(function() {
             'href',
             $(this)
                 .attr('href')
-                .replace('master/docs/', branchName + '/docs/')
+                .replace('master/docs/', branchName + '/docs/'),
         );
     });
 
@@ -37,7 +37,7 @@ $(document).ready(function() {
     var update = setInterval(function() {
         let ready = false, version = '';
         if ($('readthedocs-flyout').length) {
-            $('dl.versions', $('readthedocs-flyout').prop('shadowRoot')).appendTo('.version-switcher .switcher__list');
+            $('dl.versions', $('readthedocs-flyout').prop('shadowRoot')).prependTo('.version-switcher .switcher__list');
             $('readthedocs-flyout').remove();
             version = $('.switcher__list dl.versions dd strong a').text();
             ready = true;
@@ -59,7 +59,9 @@ $(document).ready(function() {
             $('.rst-other-versions.switcher__list dl.versions dd strong').parent().addClass('rtd-current-item');
 
             if ('master' !== (vl = $('.rst-other-versions.switcher__list dl.versions')).find('dd:first').text()) {
-                vl.find('dd').each(function() {$(this).detach().prependTo(vl)});
+                vl.find('dd').each(function() {
+                    $(this).detach().prependTo(vl);
+                });
             }
         }
     }, 300);
@@ -81,42 +83,71 @@ $(document).ready(function() {
         })
         .addClass('external');
 
-    docsearch({
+    const hitsPerPage = 10;
+    let search = docsearch({
         container: '#docsearch',
         appId: 'WLX2XJZTRM',
         apiKey: '40ac288790bce56f11de4f1fb8e8ded4',
         indexName: 'ezplatform_userguide',
         inputSelector: '#search_input',
         transformData: function(hits) {
-            let removedPattern = '¶';
-            $.each(hits, function(index, hit) {
-                for (let lvl=2; lvl<=6; lvl++) {
-                    if (null !== hit.hierarchy['lvl'+lvl]) {
-                        hits[index].hierarchy['lvl' + lvl] = hit.hierarchy['lvl' + lvl].replace(removedPattern, '');
-                    }
-                    if ('undefined' !== typeof hit._highlightResult.hierarchy['lvl'+lvl]) {
-                        hits[index]._highlightResult.hierarchy['lvl'+lvl].value = hit._highlightResult.hierarchy['lvl'+lvl].value.replace(removedPattern, '');
-                    }
-                }
-            });
+            let link = $('.ds-dropdown-menu a.search-page-link');
+            if (!link.length) {
+                $('.ds-dropdown-menu').append(``);
+                link = $('.ds-dropdown-menu a.search-page-link');
+            }
+            const href = '/projects/userguide/en/' + branchName + '/search_results/?sq=' + encodeURI($('#search_input').val()) + '&p=1';
+            link.attr('href', href).toggle(hits.length >= hitsPerPage);
         },
         algoliaOptions: {
             facetFilters: ['lang:en', 'version:' + branchName],
-            hitsPerPage: 10,
+            hitsPerPage: hitsPerPage,
+        },
+        handleSelected: function(input, event, suggestion, datasetNumber, context) {
+            if (context.selectionMethod == 'click') {
+                window.location = suggestion.url;
+            } else if (context.selectionMethod == 'enterKey') {
+                window.location = $('.ds-dropdown-menu a.search-page-link').attr('href');
+            }
         },
         debug: false,
     });
+    search.autocomplete.on('autocomplete:updated', event => {
+        $('.ds-cursor').removeClass('ds-cursor');
+        const searchedText = $('#search_input')[0].value.trim();
+        const separatorText = '›';
+        const separatorClass = 'aa-suggestion-title-separator';
+        const separatorHtml = ' ' + separatorText + ' ';
+        $('.algolia-docsearch-suggestion--wrapper').each((index, element) => {
+            const title = $(element).find('.algolia-docsearch-suggestion--title');
+            const category = $(element).find('.algolia-docsearch-suggestion--subcategory-column-text');
+            category.append(separatorHtml);
+            if (title.find('.' + separatorClass).length) {
+                const titleParts = title.html().split(separatorHtml);
+                for (let i = 0; i < titleParts.length - 1; i++) {
+                    category.html(category.html() + titleParts[i] + separatorHtml);
+                }
+                title.html(titleParts[titleParts.length - 1]);
+            }
+            if (separatorText != category.text().trim().slice(-1)) {
+                category.append(separatorHtml);
+            }
+            const displayedText = $(element).find('.algolia-docsearch-suggestion--text');
+            if (displayedText.length && displayedText.text() == searchedText + '…') {
+                displayedText.remove();
+            }
+        });
+    });
 
-    $(document).on('keypress', '#search_input', function(event) {
-        if (event.keyCode == 13) {
+    $(document).on('keydown keypress', 'form.md-search__form', function(event) {
+        if (-1 != $.inArray(event.key, ['Enter', 'ArrowDown', 'ArrowUp'])) {
             event.preventDefault();
-        }
-    });
+            $('.ds-cursor').removeClass('ds-cursor');
 
-    $(document).on('blur', '#search_input', function(event) {
-        setTimeout(() => {
-            $('#search_input').val('');
-        }, 0);
+            return false;
+        }
     });
 
     $('#search_input, label.md-search__icon').on('click', function() {
@@ -139,14 +170,16 @@ $(document).ready(function() {
         $(this).hide();
     });
 
-    $('.md-sidebar--primary .md-sidebar__scrollwrap')[0].scrollTop =
-        $('.md-sidebar--primary .md-nav__item--active:not(.md-nav__item--nested)')[0].offsetTop - 33;
+    if ($('.md-sidebar--primary .md-sidebar__scrollwrap')[0] && $('.md-sidebar--primary .md-nav__item--active:not(.md-nav__item--nested)')[0]) {
+        $('.md-sidebar--primary .md-sidebar__scrollwrap')[0].scrollTop =
+            $('.md-sidebar--primary .md-nav__item--active:not(.md-nav__item--nested)')[0].offsetTop - 33;
+    }
 
     $(document).scroll(function() {
         if ($('.md-sidebar--secondary .md-nav__link--active').length) {
             $('.md-sidebar--secondary .md-nav__link--active')[0].scrollIntoView({
                 behavior: 'instant',
-                block: 'nearest'
+                block: 'nearest',
             });
         } else {
             $('.md-sidebar--secondary .md-sidebar__scrollwrap').scrollTop(0);
@@ -164,5 +197,5 @@ $(document).ready(function() {
     });
 
     // Mark higher-level nodes with "New" pill, not only the actual item
-    $(".pill.new:not([hidden])").parents(".md-nav__item").children('label').children(".pill.new[hidden]").removeAttr('hidden');
+    $('.pill.new:not([hidden])').parents('.md-nav__item').children('label').children('.pill.new[hidden]').removeAttr('hidden');
 });
diff --git a/docs/js/instantsearch.js b/docs/js/instantsearch.js
new file mode 100644
index 00000000..8bf9d071
--- /dev/null
+++ b/docs/js/instantsearch.js
@@ -0,0 +1,166 @@
+(function(global, doc) {
+    let match;
+    const search_query = (match = doc.location.search.match(/sq=(.*?)(&|$)/)) ? match[1] : '';
+    const parsed_search_query = decodeURI(search_query.replaceAll('+', ' '));
+    const search_page = (match = doc.location.search.match(/p=(\d*?)(&|$)/)) ? match[1] : 1;
+    const parsed_search_page = parseInt(search_page);
+    let version = doc.location.pathname.split('/')[2];
+    if (!/^\d+\.\d+$/.test(version) && version !== 'latest') {
+        version = 'master';
+    }
+    const hitsContainer = '#hits';
+    const statsContainer = '#stats';
+    const paginationContainer = '#pagination';
+    const search = instantsearch({
+        indexName: 'ezplatform',
+        searchClient: algoliasearch('2DNYOU6YJZ', '21ce3e522455e18e7ee16cf7d66edb4b'),
+        initialUiState: {
+            ezplatform: {
+                query: parsed_search_query,
+                refinementList: { version: [version] },
+                page: parsed_search_page,
+            },
+        },
+        searchFunction(helper) {
+            if (helper.state.query) {
+                helper.search();
+                $(statsContainer).css('visibility', 'visible');
+                $(paginationContainer).show();
+            } else {
+                $(hitsContainer).empty();
+                $(statsContainer).css('visibility', 'hidden');
+                $(paginationContainer).hide();
+            }
+        },
+    });
+
+    getNextSearchURL = () => {
+        const searchInputElements = document.getElementsByClassName('ais-SearchBox-input');
+        const text = searchInputElements[0].value.trim();
+        const selectedPaginationItemElements = doc.getElementsByClassName('ais-Pagination-item--selected');
+        const page = selectedPaginationItemElements.length ? parseInt(selectedPaginationItemElements[0].innerText) : 1;
+        const url = new URL(window.location);
+        url.searchParams.set('sq', text);
+        url.searchParams.set('p', page);
+        return url;
+    };
+
+    let idleTimer;
+    const startIdleTimer = (url) => {
+        stopIdleTimer();
+        idleTimer = window.setTimeout(() => {
+            window.history.pushState({}, '', url);
+        }, 1500);
+    };
+    const stopIdleTimer = () => {
+        window.clearTimeout(idleTimer);
+    };
+
+    doc.getElementById('searchbox').addEventListener('keyup', function(event) {
+        const url = getNextSearchURL();
+        if (url.searchParams.get('sq') != (new URL(window.location)).searchParams.get('sq')) {
+            url.searchParams.set('p', 1);
+            startIdleTimer(url);
+        }
+    });
+
+    doc.getElementById('pagination').addEventListener('click', function(event) {
+        stopIdleTimer();
+        const url = getNextSearchURL();
+        window.history.pushState({}, '', url);
+    });
+
+    window.onpopstate = (event) => {
+        window.location.reload();
+    };
+
+    search.addWidgets([
+        instantsearch.widgets.configure({
+            hitsPerPage: 10,
+        }),
+        instantsearch.widgets.stats({
+            container: statsContainer,
+            templates: {
+                text: `
+                Search results ({{#helpers.formatNumber}}{{nbHits}}{{/helpers.formatNumber}})
+            
`,
+            },
+        }),
+        instantsearch.widgets.searchBox({
+            container: '#searchbox',
+        }),
+        instantsearch.widgets.hits({
+            container: hitsContainer,
+            templates: {
+                item: (hit) => {
+                    const hierarchy = Object.entries(hit.hierarchy).filter(([, value]) => value);
+                    const breadcrumbsKeys = hierarchy.map(([key]) => key);
+                    const entryNameKey = breadcrumbsKeys.pop();
+
+                    const headerHTML = ``;
+
+                    let breadcrumbsHTML = '';
+                    let contentHTML = '';
+
+                    if (hit.content && hit._highlightResult.content.matchedWords.length && (!hit._highlightResult.content.fullyHighlighted || 1 < hit._highlightResult.content.matchedWords.length)) {
+                        contentHTML = `
+                            ${instantsearch.highlight({
+                            attribute: `content`,
+                            highlightedTagName: 'mark',
+                            hit: hit,
+                        }).replaceAll('&', '&')}
+                        
`;
+                    }
+
+                    breadcrumbsKeys?.forEach((breadcrumbKey) => {
+                        breadcrumbsHTML += `
+                            ${instantsearch.highlight({
+                            attribute: `hierarchy.${breadcrumbKey}`,
+                            highlightedTagName: 'mark',
+                            hit: hit,
+                        })}
+                        `;
+                    });
+
+                    return resultHTML = `
+                        
+                            ${breadcrumbsHTML}
+                        
+                        ${headerHTML}
+                        ${contentHTML}
+                    `;
+                },
+            },
+        }),
+        instantsearch.widgets.pagination({
+            container: paginationContainer,
+            padding: 2,
+            templates: {
+                first: ``,
+                previous: ``,
+                next: ``,
+                last: ``,
+            },
+        }),
+        instantsearch.widgets.refinementList({
+            container: document.querySelector('#version'),
+            attribute: 'version',
+        }),
+    ]);
+
+    search.start();
+})(window, window.document);
diff --git a/docs/search_results.md b/docs/search_results.md
new file mode 100644
index 00000000..73ca2745
--- /dev/null
+++ b/docs/search_results.md
@@ -0,0 +1,5 @@
+---
+title: Developer Documentation Search
+description: Search for keywords in the Developer Documentation
+template: instantsearch.html
+---
diff --git a/mkdocs.yml b/mkdocs.yml
index 00df6e95..c31022ac 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -189,6 +189,7 @@ extra_css:
   - css/custom.css
   - css/page-not-found.css
   - css/navigation.css
+  - css/search.css
   - css/docs.switcher.css
   - css/jquery-ui.min.css
   - '//cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css'
diff --git a/theme/instantsearch.html b/theme/instantsearch.html
new file mode 100644
index 00000000..5b0fbdc5
--- /dev/null
+++ b/theme/instantsearch.html
@@ -0,0 +1,35 @@
+{% extends "main.html" %}
+
+{% block styles %}
+  {{ super() }}
+
+  
+  
+{% endblock %}
+
+{% block scripts %}
+  {{ super() }}
+
+  
+  
+  
+{% endblock %}
+
+{% block site_nav %}
+{% endblock %}
+
+{% block content %}
+  {% raw %}
+    
+      
+        - Documentation >+
- Search results+
+      
+      
+      
+      
+      
+