# SPDX-License-Identifier: AGPL-3.0-or-later """.. sidebar:: Further reading .. - :ref:`plugins admin` - :ref:`SearXNG settings ` - :ref:`builtin plugins` Plugins can extend or replace functionality of various components of SearXNG. Here is an example of a very simple plugin that adds a "Hello" into the answer area: .. code:: python from flask_babel import gettext as _ from searx.plugins import Plugin from searx.result_types import Answer class MyPlugin(Plugin): id = "self_info" default_on = True def __init__(self): super().__init__() info = PluginInfo(id=self.id, name=_("Hello"), description=_("demo plugin")) def post_search(self, request, search): return [ Answer(answer="Hello") ] 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. - pre search: :py:obj:`Plugin.pre_search` - post search: :py:obj:`Plugin.post_search` - on each result item: :py:obj:`Plugin.on_result` For a coding example have a look at :ref:`self_info plugin`. ---- .. autoclass:: Plugin :members: .. autoclass:: PluginInfo :members: .. autoclass:: PluginStorage :members: .. autoclass:: searx.plugins._core.ModulePlugin :members: :show-inheritance: """ from __future__ import annotations __all__ = ["PluginInfo", "Plugin", "PluginStorage"] from ._core import PluginInfo, Plugin, PluginStorage STORAGE: PluginStorage = PluginStorage() def initialize(app): STORAGE.load_builtins() STORAGE.init(app)