| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 | 
							- <!DOCTYPE html>
 
- <html lang="en" data-content_root="../../">
 
-   <head>
 
-     <meta charset="utf-8" />
 
-     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 
-   <meta name="viewport" content="width=device-width, initial-scale=1">
 
-     <title>Plugin Development — SearXNG Documentation (2025.8.3+2e62eb5d6)</title>
 
-     <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=6625fa76" />
 
-     <link rel="stylesheet" type="text/css" href="../../_static/searxng.css?v=52e4ff28" />
 
-     <script src="../../_static/documentation_options.js?v=f5eb0a7b"></script>
 
-     <script src="../../_static/doctools.js?v=9a2dae69"></script>
 
-     <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
 
-     <script data-project="searxng" data-version="2025.8.3+2e62eb5d6" src="../../_static/describe_version.js?v=fa7f30d0"></script>
 
-     <link rel="index" title="Index" href="../../genindex.html" />
 
-     <link rel="search" title="Search" href="../../search.html" />
 
-     <link rel="next" title="Built-in Plugins" href="builtins.html" />
 
-     <link rel="prev" title="Plugins" href="index.html" /> 
 
-   </head><body>
 
-     <div class="related" role="navigation" aria-label="Related">
 
-       <h3>Navigation</h3>
 
-       <ul>
 
-         <li class="right" style="margin-right: 10px">
 
-           <a href="../../genindex.html" title="General Index"
 
-              accesskey="I">index</a></li>
 
-         <li class="right" >
 
-           <a href="../../py-modindex.html" title="Python Module Index"
 
-              >modules</a> |</li>
 
-         <li class="right" >
 
-           <a href="builtins.html" title="Built-in Plugins"
 
-              accesskey="N">next</a> |</li>
 
-         <li class="right" >
 
-           <a href="index.html" title="Plugins"
 
-              accesskey="P">previous</a> |</li>
 
-         <li class="nav-item nav-item-0"><a href="../../index.html">SearXNG Documentation (2025.8.3+2e62eb5d6)</a> »</li>
 
-           <li class="nav-item nav-item-1"><a href="../index.html" >Developer documentation</a> »</li>
 
-           <li class="nav-item nav-item-2"><a href="index.html" accesskey="U">Plugins</a> »</li>
 
-         <li class="nav-item nav-item-this"><a href="">Plugin Development</a></li> 
 
-       </ul>
 
-     </div>  
 
-     <div class="document">
 
-       <div class="documentwrapper">
 
-         <div class="bodywrapper">
 
-           <div class="body" role="main">
 
-             
 
-   <section id="module-searx.plugins">
 
- <span id="plugin-development"></span><span id="dev-plugin"></span><h1>Plugin Development<a class="headerlink" href="#module-searx.plugins" title="Link to this heading">¶</a></h1>
 
- <aside class="sidebar">
 
- <p class="sidebar-title">Further reading ..</p>
 
- <ul class="simple">
 
- <li><p><a class="reference internal" href="../../admin/plugins.html#plugins-admin"><span class="std std-ref">List of plugins</span></a></p></li>
 
- <li><p><a class="reference internal" href="../../admin/settings/settings_plugins.html#settings-plugins"><span class="std std-ref">SearXNG settings</span></a></p></li>
 
- </ul>
 
- </aside>
 
- <p>Plugins can extend or replace functionality of various components of SearXNG.</p>
 
- <p>Entry points (hooks) define when a plugin runs.  Right now only three hooks are
 
- implemented.  So feel free to implement a hook if it fits the behaviour of your
 
- plugin / a plugin doesn’t need to implement all the hooks.</p>
 
- <ul class="simple">
 
- <li><p>pre search: <a class="reference internal" href="#searx.plugins.Plugin.pre_search" title="searx.plugins.Plugin.pre_search"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin.pre_search</span></code></a></p></li>
 
- <li><p>post search: <a class="reference internal" href="#searx.plugins.Plugin.post_search" title="searx.plugins.Plugin.post_search"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin.post_search</span></code></a></p></li>
 
- <li><p>on each result item: <a class="reference internal" href="#searx.plugins.Plugin.on_result" title="searx.plugins.Plugin.on_result"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin.on_result</span></code></a></p></li>
 
- </ul>
 
- <p>Below you will find some examples, for more coding examples have a look at the
 
- built-in plugins <a class="extlink-origin reference external" href="https://github.com/searxng/searxng/blob/master/searx/plugins/">git://searx/plugins/</a> or <a class="reference external" href="https://github.com/return42/tgwf-searx-plugins/">Only show green hosted results</a>.</p>
 
- <section id="add-answer-example">
 
- <h2>Add Answer example<a class="headerlink" href="#add-answer-example" title="Link to this heading">¶</a></h2>
 
- <p>Here is an example of a very simple plugin that adds a “Hello World” into the
 
- answer area:</p>
 
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">flask_babel</span><span class="w"> </span><span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
 
- <span class="kn">from</span><span class="w"> </span><span class="nn">searx.plugins</span><span class="w"> </span><span class="kn">import</span> <span class="n">Plugin</span>
 
- <span class="kn">from</span><span class="w"> </span><span class="nn">searx.result_types</span><span class="w"> </span><span class="kn">import</span> <span class="n">Answer</span>
 
- <span class="k">class</span><span class="w"> </span><span class="nc">MyPlugin</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
 
-     <span class="nb">id</span> <span class="o">=</span> <span class="s2">"hello world"</span>
 
-     <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">plg_cfg</span><span class="p">):</span>
 
-         <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">plg_cfg</span><span class="p">)</span>
 
-         <span class="bp">self</span><span class="o">.</span><span class="n">info</span> <span class="o">=</span> <span class="n">PluginInfo</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">_</span><span class="p">(</span><span class="s2">"Hello"</span><span class="p">),</span> <span class="n">description</span><span class="o">=</span><span class="n">_</span><span class="p">(</span><span class="s2">"demo plugin"</span><span class="p">))</span>
 
-     <span class="k">def</span><span class="w"> </span><span class="nf">post_search</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">search</span><span class="p">):</span>
 
-         <span class="k">return</span> <span class="p">[</span> <span class="n">Answer</span><span class="p">(</span><span class="n">answer</span><span class="o">=</span><span class="s2">"Hello World"</span><span class="p">)</span> <span class="p">]</span>
 
- </pre></div>
 
- </div>
 
- </section>
 
- <section id="filter-urls-example">
 
- <span id="id1"></span><h2>Filter URLs example<a class="headerlink" href="#filter-urls-example" title="Link to this heading">¶</a></h2>
 
- <aside class="sidebar">
 
- <p class="sidebar-title">Further reading ..</p>
 
- <ul class="simple">
 
- <li><p><a class="reference internal" href="../result_types/base_result.html#searx.result_types._base.Result.filter_urls" title="searx.result_types._base.Result.filter_urls"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Result.filter_urls(..)</span></code></a></p></li>
 
- </ul>
 
- </aside>
 
- <p>The <a class="reference internal" href="../result_types/base_result.html#searx.result_types._base.Result.filter_urls" title="searx.result_types._base.Result.filter_urls"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Result.filter_urls(..)</span></code></a>
 
- can be used to filter and/or modify URL fields.  In the following example, the
 
- filter function <code class="docutils literal notranslate"><span class="pre">my_url_filter</span></code>:</p>
 
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">my_url_filter</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">field_name</span><span class="p">,</span> <span class="n">url_src</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span> <span class="o">|</span> <span class="nb">str</span><span class="p">:</span>
 
-     <span class="k">if</span> <span class="s2">"google"</span> <span class="ow">in</span> <span class="n">url_src</span><span class="p">:</span>
 
-         <span class="k">return</span> <span class="kc">False</span>              <span class="c1"># remove URL field from result</span>
 
-     <span class="k">if</span> <span class="s2">"facebook"</span> <span class="ow">in</span> <span class="n">url_src</span><span class="p">:</span>
 
-         <span class="n">new_url</span> <span class="o">=</span> <span class="n">url_src</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"facebook"</span><span class="p">,</span> <span class="s2">"fb-dummy"</span><span class="p">)</span>
 
-         <span class="k">return</span> <span class="n">new_url</span>            <span class="c1"># return modified URL</span>
 
-     <span class="k">return</span> <span class="kc">True</span>                   <span class="c1"># leave URL in field unchanged</span>
 
- </pre></div>
 
- </div>
 
- <p>is applied to all URL fields in the <a class="reference internal" href="#searx.plugins.Plugin.on_result" title="searx.plugins.Plugin.on_result"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin.on_result</span></code></a> hook:</p>
 
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">MyUrlFilter</span><span class="p">(</span><span class="n">Plugin</span><span class="p">):</span>
 
-     <span class="o">...</span>
 
-     <span class="k">def</span><span class="w"> </span><span class="nf">on_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span> <span class="o">-></span> <span class="nb">bool</span><span class="p">:</span>
 
-         <span class="n">result</span><span class="o">.</span><span class="n">filter_urls</span><span class="p">(</span><span class="n">my_url_filter</span><span class="p">)</span>
 
-         <span class="k">return</span> <span class="kc">True</span>
 
- </pre></div>
 
- </div>
 
- </section>
 
- <section id="implementation">
 
- <h2>Implementation<a class="headerlink" href="#implementation" title="Link to this heading">¶</a></h2>
 
- <dl class="py class">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin">
 
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">searx.plugins.</span></span><span class="sig-name descname"><span class="pre">Plugin</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plg_cfg</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#searx.plugins.PluginCfg" title="searx.plugins._core.PluginCfg"><span class="pre">PluginCfg</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#Plugin"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.Plugin" title="Link to this definition">¶</a></dt>
 
- <dd><p>Abstract base class of all Plugins.</p>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.id">
 
- <span class="sig-name descname"><span class="pre">id</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">''</span></em><a class="headerlink" href="#searx.plugins.Plugin.id" title="Link to this definition">¶</a></dt>
 
- <dd><p>The ID (suffix) in the HTML form.</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.active">
 
- <span class="sig-name descname"><span class="pre">active</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/typing.html#typing.ClassVar" title="(in Python v3.13)"><span class="pre">ClassVar</span></a><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><span class="pre">bool</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#searx.plugins.Plugin.active" title="Link to this definition">¶</a></dt>
 
- <dd><p>Plugin is enabled/disabled by default (<a class="reference internal" href="#searx.plugins.PluginCfg.active" title="searx.plugins.PluginCfg.active"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PluginCfg.active</span></code></a>).</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.keywords">
 
- <span class="sig-name descname"><span class="pre">keywords</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)"><span class="pre">list</span></a><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a><span class="p"><span class="pre">]</span></span></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">[]</span></em><a class="headerlink" href="#searx.plugins.Plugin.keywords" title="Link to this definition">¶</a></dt>
 
- <dd><p>Keywords in the search query that activate the plugin.  The <em>keyword</em> is
 
- the first word in a search query.  If a plugin should be executed regardless
 
- of the search query, the list of keywords should be empty (which is also the
 
- default in the base class for Plugins).</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.info">
 
- <span class="sig-name descname"><span class="pre">info</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference internal" href="#searx.plugins.PluginInfo" title="searx.plugins._core.PluginInfo"><span class="pre">PluginInfo</span></a></em><a class="headerlink" href="#searx.plugins.Plugin.info" title="Link to this definition">¶</a></dt>
 
- <dd><p>Information about the <em>plugin</em>, see <a class="reference internal" href="#searx.plugins.PluginInfo" title="searx.plugins.PluginInfo"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PluginInfo</span></code></a>.</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.log">
 
- <span class="sig-name descname"><span class="pre">log</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/logging.html#logging.Logger" title="(in Python v3.13)"><span class="pre">Logger</span></a></em><a class="headerlink" href="#searx.plugins.Plugin.log" title="Link to this definition">¶</a></dt>
 
- <dd><p>A logger object, is automatically initialized when calling the
 
- constructor (if not already set in the subclass).</p>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.init">
 
- <span class="sig-name descname"><span class="pre">init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://flask.palletsprojects.com/en/stable/api/#flask.Flask" title="(in Flask v3.1.x)"><span class="pre">flask.Flask</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><span class="pre">bool</span></a></span></span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#Plugin.init"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.Plugin.init" title="Link to this definition">¶</a></dt>
 
- <dd><p>Initialization of the plugin, the return value decides whether this
 
- plugin is active or not.  Initialization only takes place once, at the
 
- time the WEB application is set up.  The base method always returns
 
- <code class="docutils literal notranslate"><span class="pre">True</span></code>, the method can be overwritten in the inheritances,</p>
 
- <ul class="simple">
 
- <li><p><code class="docutils literal notranslate"><span class="pre">True</span></code> plugin is active</p></li>
 
- <li><p><code class="docutils literal notranslate"><span class="pre">False</span></code> plugin is inactive</p></li>
 
- </ul>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.pre_search">
 
- <span class="sig-name descname"><span class="pre">pre_search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../extended_types.html#searx.extended_types.SXNG_Request" title="searx.extended_types.SXNG_Request"><span class="pre">SXNG_Request</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">search</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../../src/searx.search.html#searx.search.SearchWithPlugins" title="searx.search.SearchWithPlugins"><span class="pre">SearchWithPlugins</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><span class="pre">bool</span></a></span></span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#Plugin.pre_search"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.Plugin.pre_search" title="Link to this definition">¶</a></dt>
 
- <dd><p>Runs BEFORE the search request and returns a boolean:</p>
 
- <ul class="simple">
 
- <li><p><code class="docutils literal notranslate"><span class="pre">True</span></code> to continue the search</p></li>
 
- <li><p><code class="docutils literal notranslate"><span class="pre">False</span></code> to stop the search</p></li>
 
- </ul>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.on_result">
 
- <span class="sig-name descname"><span class="pre">on_result</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../extended_types.html#searx.extended_types.SXNG_Request" title="searx.extended_types.SXNG_Request"><span class="pre">SXNG_Request</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">search</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../../src/searx.search.html#searx.search.SearchWithPlugins" title="searx.search.SearchWithPlugins"><span class="pre">SearchWithPlugins</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">result</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../result_types/base_result.html#searx.result_types._base.Result" title="searx.result_types._base.Result"><span class="pre">Result</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><span class="pre">bool</span></a></span></span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#Plugin.on_result"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.Plugin.on_result" title="Link to this definition">¶</a></dt>
 
- <dd><p>Runs for each result of each engine and returns a boolean:</p>
 
- <ul class="simple">
 
- <li><p><code class="docutils literal notranslate"><span class="pre">True</span></code> to keep the result</p></li>
 
- <li><p><code class="docutils literal notranslate"><span class="pre">False</span></code> to remove the result from the result list</p></li>
 
- </ul>
 
- <p>The <code class="docutils literal notranslate"><span class="pre">result</span></code> can be modified to the needs.</p>
 
- <div class="admonition hint">
 
- <p class="admonition-title">Hint</p>
 
- <p>If <a class="reference internal" href="../result_types/base_result.html#searx.result_types._base.Result.url" title="searx.result_types._base.Result.url"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Result.url</span></code></a> is modified,
 
- <a class="reference internal" href="../result_types/base_result.html#searx.result_types._base.Result.parsed_url" title="searx.result_types._base.Result.parsed_url"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Result.parsed_url</span></code></a> must
 
- be changed accordingly:</p>
 
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">result</span><span class="p">[</span><span class="s2">"parsed_url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">urlparse</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"url"</span><span class="p">])</span>
 
- </pre></div>
 
- </div>
 
- </div>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.Plugin.post_search">
 
- <span class="sig-name descname"><span class="pre">post_search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../extended_types.html#searx.extended_types.SXNG_Request" title="searx.extended_types.SXNG_Request"><span class="pre">SXNG_Request</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">search</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../../src/searx.search.html#searx.search.SearchWithPlugins" title="searx.search.SearchWithPlugins"><span class="pre">SearchWithPlugins</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference external" href="https://docs.python.org/3/library/constants.html#None" title="(in Python v3.13)"><span class="pre">None</span></a><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/typing.html#typing.Sequence" title="(in Python v3.13)"><span class="pre">Sequence</span></a><span class="p"><span class="pre">[</span></span><a class="reference internal" href="../result_types/base_result.html#searx.result_types._base.Result" title="searx.result_types._base.Result"><span class="pre">Result</span></a><span class="p"><span class="pre">]</span></span></span></span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#Plugin.post_search"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.Plugin.post_search" title="Link to this definition">¶</a></dt>
 
- <dd><p>Runs AFTER the search request.  Can return a list of
 
- <a class="reference internal" href="../result_types/base_result.html#searx.result_types._base.Result" title="searx.result_types._base.Result"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Result</span></code></a> objects to be added to the
 
- final result list.</p>
 
- </dd></dl>
 
- </dd></dl>
 
- <dl class="py class">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginInfo">
 
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">searx.plugins.</span></span><span class="sig-name descname"><span class="pre">PluginInfo</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">id:</span> <span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name:</span> <span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">description:</span> <span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">preference_section:</span> <span class="pre">~typing.Literal['general'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">'ui'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">'privacy'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">'query']</span> <span class="pre">|</span> <span class="pre">None</span> <span class="pre">=</span> <span class="pre">'general'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">examples:</span> <span class="pre">list[str]</span> <span class="pre">=</span> <span class="pre"><factory></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">keywords:</span> <span class="pre">list[str]</span> <span class="pre">=</span> <span class="pre"><factory></span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#PluginInfo"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.PluginInfo" title="Link to this definition">¶</a></dt>
 
- <dd><p>Object that holds information about a <em>plugin</em>, these infos are shown to
 
- the user in the Preferences menu.</p>
 
- <p>To be able to translate the information into other languages, the text must
 
- be written in English and translated with <a class="reference external" href="https://python-babel.github.io/flask-babel/index.html#flask_babel.gettext" title="(in Flask-Babel)"><code class="xref py py-obj docutils literal notranslate"><span class="pre">flask_babel.gettext</span></code></a>.</p>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginInfo.id">
 
- <span class="sig-name descname"><span class="pre">id</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a></em><a class="headerlink" href="#searx.plugins.PluginInfo.id" title="Link to this definition">¶</a></dt>
 
- <dd><p>The ID-selector in HTML/CSS <cite>#<id></cite>.</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginInfo.name">
 
- <span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a></em><a class="headerlink" href="#searx.plugins.PluginInfo.name" title="Link to this definition">¶</a></dt>
 
- <dd><p>Name of the <em>plugin</em>.</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginInfo.description">
 
- <span class="sig-name descname"><span class="pre">description</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a></em><a class="headerlink" href="#searx.plugins.PluginInfo.description" title="Link to this definition">¶</a></dt>
 
- <dd><p>Short description of the <em>answerer</em>.</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginInfo.preference_section">
 
- <span class="sig-name descname"><span class="pre">preference_section</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/typing.html#typing.Literal" title="(in Python v3.13)"><span class="pre">Literal</span></a><span class="p"><span class="pre">[</span></span><span class="s"><span class="pre">'general'</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="s"><span class="pre">'ui'</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="s"><span class="pre">'privacy'</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="s"><span class="pre">'query'</span></span><span class="p"><span class="pre">]</span></span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/constants.html#None" title="(in Python v3.13)"><span class="pre">None</span></a></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'general'</span></em><a class="headerlink" href="#searx.plugins.PluginInfo.preference_section" title="Link to this definition">¶</a></dt>
 
- <dd><p>Section (tab/group) in the preferences where this plugin is shown to the
 
- user.</p>
 
- <p>The value <code class="docutils literal notranslate"><span class="pre">query</span></code> is reserved for plugins that are activated via a
 
- <em>keyword</em> as part of a search query, see:</p>
 
- <ul class="simple">
 
- <li><p><a class="reference internal" href="#searx.plugins.PluginInfo.examples" title="searx.plugins.PluginInfo.examples"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PluginInfo.examples</span></code></a></p></li>
 
- <li><p><a class="reference internal" href="#searx.plugins.Plugin.keywords" title="searx.plugins.Plugin.keywords"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin.keywords</span></code></a></p></li>
 
- </ul>
 
- <p>Those plugins are shown in the preferences in tab <em>Special Queries</em>.</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginInfo.examples">
 
- <span class="sig-name descname"><span class="pre">examples</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)"><span class="pre">list</span></a><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#searx.plugins.PluginInfo.examples" title="Link to this definition">¶</a></dt>
 
- <dd><p>List of short examples of the usage / of query terms.</p>
 
- </dd></dl>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginInfo.keywords">
 
- <span class="sig-name descname"><span class="pre">keywords</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#list" title="(in Python v3.13)"><span class="pre">list</span></a><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#searx.plugins.PluginInfo.keywords" title="Link to this definition">¶</a></dt>
 
- <dd><p>See <a class="reference internal" href="#searx.plugins.Plugin.keywords" title="searx.plugins.Plugin.keywords"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin.keywords</span></code></a></p>
 
- </dd></dl>
 
- </dd></dl>
 
- <dl class="py class">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginStorage">
 
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">searx.plugins.</span></span><span class="sig-name descname"><span class="pre">PluginStorage</span></span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#PluginStorage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.PluginStorage" title="Link to this definition">¶</a></dt>
 
- <dd><p>A storage for managing the <em>plugins</em> of SearXNG.</p>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginStorage.plugin_list">
 
- <span class="sig-name descname"><span class="pre">plugin_list</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#set" title="(in Python v3.13)"><span class="pre">set</span></a><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#searx.plugins.Plugin" title="searx.plugins._core.Plugin"><span class="pre">Plugin</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#searx.plugins.PluginStorage.plugin_list" title="Link to this definition">¶</a></dt>
 
- <dd><p>The list of <code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugins</span></code> in this storage.</p>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginStorage.load_settings">
 
- <span class="sig-name descname"><span class="pre">load_settings</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cfg</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#dict" title="(in Python v3.13)"><span class="pre">dict</span></a><span class="p"><span class="pre">[</span></span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.13)"><span class="pre">str</span></a><span class="p"><span class="pre">,</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#dict" title="(in Python v3.13)"><span class="pre">dict</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#PluginStorage.load_settings"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.PluginStorage.load_settings" title="Link to this definition">¶</a></dt>
 
- <dd><p>Load plugins configured in SearXNG’s settings <a class="reference internal" href="../../admin/settings/settings_plugins.html#settings-plugins"><span class="std std-ref">plugins:</span></a>.</p>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginStorage.register">
 
- <span class="sig-name descname"><span class="pre">register</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">plugin</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#searx.plugins.Plugin" title="searx.plugins._core.Plugin"><span class="pre">Plugin</span></a></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#PluginStorage.register"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.PluginStorage.register" title="Link to this definition">¶</a></dt>
 
- <dd><p>Register a <a class="reference internal" href="#searx.plugins.Plugin" title="searx.plugins.Plugin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin</span></code></a>.  In case of name collision (if two
 
- plugins have same ID) a <a class="reference external" href="https://docs.python.org/3/library/exceptions.html#KeyError" title="(in Python v3.13)"><code class="xref py py-obj docutils literal notranslate"><span class="pre">KeyError</span></code></a> exception is raised.</p>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginStorage.init">
 
- <span class="sig-name descname"><span class="pre">init</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">app</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://flask.palletsprojects.com/en/stable/api/#flask.Flask" title="(in Flask v3.1.x)"><span class="pre">flask.Flask</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference external" href="https://docs.python.org/3/library/constants.html#None" title="(in Python v3.13)"><span class="pre">None</span></a></span></span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#PluginStorage.init"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.PluginStorage.init" title="Link to this definition">¶</a></dt>
 
- <dd><p>Calls the method <a class="reference internal" href="#searx.plugins.Plugin.init" title="searx.plugins.Plugin.init"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Plugin.init</span></code></a> of each plugin in this
 
- storage.  Depending on its return value, the plugin is removed from
 
- <em>this</em> storage or not.</p>
 
- </dd></dl>
 
- <dl class="py method">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginStorage.post_search">
 
- <span class="sig-name descname"><span class="pre">post_search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../extended_types.html#searx.extended_types.SXNG_Request" title="searx.extended_types.SXNG_Request"><span class="pre">SXNG_Request</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">search</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="../../src/searx.search.html#searx.search.SearchWithPlugins" title="searx.search.SearchWithPlugins"><span class="pre">SearchWithPlugins</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">→</span> <span class="sig-return-typehint"><a class="reference external" href="https://docs.python.org/3/library/constants.html#None" title="(in Python v3.13)"><span class="pre">None</span></a></span></span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#PluginStorage.post_search"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.PluginStorage.post_search" title="Link to this definition">¶</a></dt>
 
- <dd><p>Extend <code class="xref py py-obj docutils literal notranslate"><span class="pre">search.result_container</span>
 
- <span class="pre"><searx.results.ResultContainer</span></code>> with result items from plugins listed
 
- in <code class="xref py py-obj docutils literal notranslate"><span class="pre">search.user_plugins</span></code>.</p>
 
- </dd></dl>
 
- </dd></dl>
 
- <dl class="py class">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginCfg">
 
- <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">searx.plugins.</span></span><span class="sig-name descname"><span class="pre">PluginCfg</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">active</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><span class="pre">bool</span></a></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../../_modules/searx/plugins/_core.html#PluginCfg"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#searx.plugins.PluginCfg" title="Link to this definition">¶</a></dt>
 
- <dd><p>Settings of a plugin.</p>
 
- <div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">mypackage.mymodule.MyPlugin</span><span class="p">:</span>
 
- <span class="w">  </span><span class="nt">active</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
 
- </pre></div>
 
- </div>
 
- <dl class="py attribute">
 
- <dt class="sig sig-object py" id="searx.plugins.PluginCfg.active">
 
- <span class="sig-name descname"><span class="pre">active</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.13)"><span class="pre">bool</span></a></em><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">False</span></em><a class="headerlink" href="#searx.plugins.PluginCfg.active" title="Link to this definition">¶</a></dt>
 
- <dd><p>Plugin is active by default and the user can <em>opt-out</em> in the preferences.</p>
 
- </dd></dl>
 
- </dd></dl>
 
- </section>
 
- </section>
 
-             <div class="clearer"></div>
 
-           </div>
 
-         </div>
 
-       </div>
 
-   <span id="sidebar-top"></span>
 
-       <div class="sphinxsidebar" role="navigation" aria-label="Main">
 
-         <div class="sphinxsidebarwrapper">
 
-   
 
-     
 
-             <p class="logo"><a href="../../index.html">
 
-               <img class="logo" src="../../_static/searxng-wordmark.svg" alt="Logo of SearXNG"/>
 
-             </a></p>
 
-   
 
- <h3><a href="../../index.html">Table of Contents</a></h3>
 
- <ul class="current">
 
- <li class="toctree-l1"><a class="reference internal" href="../../user/index.html">User information</a></li>
 
- <li class="toctree-l1"><a class="reference internal" href="../../own-instance.html">Why use a private instance?</a></li>
 
- <li class="toctree-l1"><a class="reference internal" href="../../admin/index.html">Administrator documentation</a></li>
 
- <li class="toctree-l1 current"><a class="reference internal" href="../index.html">Developer documentation</a><ul class="current">
 
- <li class="toctree-l2"><a class="reference internal" href="../quickstart.html">Development Quickstart</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../commits.html">Git Commits & Change Management</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../rtm_asdf.html">Runtime Management</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../contribution_guide.html">How to contribute</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../extended_types.html">Extended Types</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../engines/index.html">Engine Implementations</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../result_types/index.html">Result Types</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../templates.html">Simple Theme Templates</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../search_api.html">Search API</a></li>
 
- <li class="toctree-l2 current"><a class="reference internal" href="index.html">Plugins</a><ul class="current">
 
- <li class="toctree-l3 current"><a class="current reference internal" href="#">Plugin Development</a><ul>
 
- <li class="toctree-l4"><a class="reference internal" href="#add-answer-example">Add Answer example</a></li>
 
- <li class="toctree-l4"><a class="reference internal" href="#filter-urls-example">Filter URLs example</a></li>
 
- <li class="toctree-l4"><a class="reference internal" href="#implementation">Implementation</a><ul>
 
- <li class="toctree-l5"><a class="reference internal" href="#searx.plugins.Plugin"><code class="docutils literal notranslate"><span class="pre">Plugin</span></code></a></li>
 
- <li class="toctree-l5"><a class="reference internal" href="#searx.plugins.PluginInfo"><code class="docutils literal notranslate"><span class="pre">PluginInfo</span></code></a></li>
 
- <li class="toctree-l5"><a class="reference internal" href="#searx.plugins.PluginStorage"><code class="docutils literal notranslate"><span class="pre">PluginStorage</span></code></a></li>
 
- <li class="toctree-l5"><a class="reference internal" href="#searx.plugins.PluginCfg"><code class="docutils literal notranslate"><span class="pre">PluginCfg</span></code></a></li>
 
- </ul>
 
- </li>
 
- </ul>
 
- </li>
 
- <li class="toctree-l3"><a class="reference internal" href="builtins.html">Built-in Plugins</a></li>
 
- </ul>
 
- </li>
 
- <li class="toctree-l2"><a class="reference internal" href="../answerers/index.html">Answerers</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../translation.html">Translation</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../makefile.html">Makefile & <code class="docutils literal notranslate"><span class="pre">./manage</span></code></a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../reST.html">reST primer</a></li>
 
- <li class="toctree-l2"><a class="reference internal" href="../searxng_extra/index.html">Tooling box <code class="docutils literal notranslate"><span class="pre">searxng_extra</span></code></a></li>
 
- </ul>
 
- </li>
 
- <li class="toctree-l1"><a class="reference internal" href="../../utils/index.html">DevOps tooling box</a></li>
 
- <li class="toctree-l1"><a class="reference internal" href="../../src/index.html">Source-Code</a></li>
 
- </ul>
 
-   <h3>Project Links</h3>
 
-   <ul>
 
-     <li><a href="https://github.com/searxng/searxng/tree/master">Source</a>
 
-   
 
-     <li><a href="https://github.com/searxng/searxng/wiki">Wiki</a>
 
-   
 
-     <li><a href="https://searx.space">Public instances</a>
 
-   
 
-     <li><a href="https://github.com/searxng/searxng/issues">Issue Tracker</a>
 
-   </ul><h3>Navigation</h3>
 
- <ul>
 
-   <li><a href="../../index.html">Overview</a>
 
-     <ul>
 
-       <li><a href="../index.html">Developer documentation</a>
 
-         <ul>
 
-       <li><a href="index.html">Plugins</a>
 
-         <ul>
 
-           <li>Previous: <a href="index.html" title="previous chapter">Plugins</a>
 
-           <li>Next: <a href="builtins.html" title="next chapter">Built-in Plugins</a></ul>
 
-       </li></ul>
 
-       </li>
 
-     </ul>
 
-   </li>
 
- </ul>
 
- <search id="searchbox" style="display: none" role="search">
 
-   <h3 id="searchlabel">Quick search</h3>
 
-     <div class="searchformwrapper">
 
-     <form class="search" action="../../search.html" method="get">
 
-       <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
 
-       <input type="submit" value="Go" />
 
-     </form>
 
-     </div>
 
- </search>
 
- <script>document.getElementById('searchbox').style.display = "block"</script>
 
-   <div role="note" aria-label="source link">
 
-     <h3>This Page</h3>
 
-     <ul class="this-page-menu">
 
-       <li><a href="../../_sources/dev/plugins/development.rst.txt"
 
-             rel="nofollow">Show Source</a></li>
 
-     </ul>
 
-    </div>
 
-         </div>
 
-       </div>
 
-       <div class="clearer"></div>
 
-     </div>
 
-     <div class="footer" role="contentinfo">
 
-     © Copyright SearXNG team.
 
-     </div>
 
-   </body>
 
- </html>
 
 
  |