Plugins
-------

Plugins can extend/replace functionality of various components inside
searx.

example\_plugin.py
~~~~~~~~~~~~~~~~~~

.. code:: python

    name = 'Example plugin'
    description = 'This plugin extends the suggestions with the word "example"'
    default_on = False  # disable by default

    js_dependencies = tuple()  # optional, list of static js files
    css_dependencies = tuple()  # optional, list of static css files


    # attach callback to the post search hook
    #  request: flask request object
    #  ctx: the whole local context of the post search hook
    def post_search(request, ctx):
        ctx['search'].suggestions.add('example')
        return True

Currently implemented plugin entry points (a.k.a hooks)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-  Pre search hook (``pre_search``)
-  Post search hook (``post_search``)
-  Result hook (``on_result``) (is called if a new result is added (see
   https\_rewrite plugin))

Feel free to add more hooks to the code if it is required by a plugin.

TODO
~~~~

-  Better documentation
-  More hooks
-  search hook (is called while searx is requesting results (for
   example: things like math-solver), the different hooks are running
   parallel)