engine:

In the code example below a full fledged example of a YAML setup from a dummy engine is shown. Most of the options have a default value or even are optional.

Hint

A few more options are possible, but they are pretty specific to some engines (Engine Implementations).

- name: example engine
  engine: example
  shortcut: demo
  base_url: 'https://{language}.example.com/'
  send_accept_language_header: false
  categories: general
  timeout: 3.0
  api_key: 'apikey'
  disabled: false
  language: en_US
  tokens: [ 'my-secret-token' ]
  weight: 1
  display_error_messages: true
  about:
     website: https://example.com
     wikidata_id: Q306656
     official_api_documentation: https://example.com/api-doc
     use_official_api: true
     require_api_key: true
     results: HTML

  # overwrite values from section 'outgoing:'
  enable_http2: false
  retries: 1
  max_connections: 100
  max_keepalive_connections: 10
  keepalive_expiry: 5.0
  using_tor_proxy: false
  proxies:
    http:
      - http://proxy1:8080
      - http://proxy2:8080
    https:
      - http://proxy1:8080
      - http://proxy2:8080
      - socks5://user:password@proxy3:1080
      - socks5h://user:password@proxy4:1080

  # other network settings
  enable_http: false
  retry_on_http_error: true # or 403 or [404, 429]
name :

Name that will be used across SearXNG to define this engine. In settings, on the result page…

engine :

Name of the python file used to handle requests and responses to and from this search engine.

shortcut :

Code used to execute bang requests (in this case using !bi)

base_urloptional

Part of the URL that should be stable across every request. Can be useful to use multiple sites using only one engine, or updating the site URL without touching at the code.

send_accept_language_header :

Several engines that support languages (or regions) deal with the HTTP header Accept-Language to build a response that fits to the locale. When this option is activated, the language (locale) that is selected by the user is used to build and send a Accept-Language header in the request to the origin search engine.

categoriesoptional

Specifies to which categories the engine should be added. Engines can be assigned to multiple categories.

Categories can be shown as tabs (categories_as_tabs:) in the UI. A search in a tab (in the UI) will query all engines that are active in this tab. In the preferences page (/preferences) – under engines – users can select what engine should be active when querying in this tab.

Alternatively, !bang can be used to search all engines in a category, regardless of whether they are active or not, or whether they are in a tab of the UI or not. For example, !dictionaries can be used to query all search engines in that category (group).

timeoutoptional

Timeout of the search with the current search engine. Overwrites request_timeout from outgoing:. Be careful, it will modify the global timeout of SearXNG.

api_keyoptional

In a few cases, using an API needs the use of a secret key. How to obtain them is described in the file.

disabledoptional

To disable by default the engine, but not deleting it. It will allow the user to manually activate it in the settings.

inactive: optional

Remove the engine from the settings (disabled & removed).

languageoptional

If you want to use another language for a specific engine, you can define it by using the ISO code of language (and region), like fr, en-US, de-DE.

tokensoptional

A list of secret tokens to make this engine private, more details see Private Engines (tokens).

weightdefault 1

Weighting of the results of this engine.

display_error_messagesdefault true

When an engine returns an error, the message is displayed on the user interface.

networkoptional

Use the network configuration from another engine. In addition, there are two default networks:

  • ipv4 set local_addresses to 0.0.0.0 (use only IPv4 local addresses)

  • ipv6 set local_addresses to :: (use only IPv6 local addresses)

enable_httpoptional

Enable HTTP for this engine (by default only HTTPS is enabled).

retry_on_http_erroroptional

Retry request on some HTTP status code.

Example:

  • true : on HTTP status code between 400 and 599.

  • 403 : on HTTP status code 403.

  • [403, 429]: on HTTP status code 403 and 429.

proxies :

Overwrites proxy settings from outgoing:.

using_tor_proxy :

Using tor proxy (true) or not (false) for this engine. The default is taken from using_tor_proxy of the outgoing:.

max_keepalive_connection#s :
Pool limit configuration, overwrites value pool_maxsize from

outgoing: for this engine.

max_connections :

Pool limit configuration, overwrites value pool_connections from outgoing: for this engine.

keepalive_expiry :

Pool limit configuration, overwrites value keepalive_expiry from outgoing: for this engine.

Private Engines (tokens)

Administrators might find themselves wanting to limit access to some of the enabled engines on their instances. It might be because they do not want to expose some private information through Offline Engines. Or they would rather share engines only with their trusted friends or colleagues.

To solve this issue the concept of private engines exists.

A new option was added to engines named tokens. It expects a list of strings. If the user making a request presents one of the tokens of an engine, they can access information about the engine and make search requests.

Example configuration to restrict access to the Arch Linux Wiki engine:

- name: arch linux wiki
  engine: archlinux
  shortcut: al
  tokens: [ 'my-secret-token' ]

Unless a user has configured the right token, the engine is going to be hidden from him/her. It is not going to be included in the list of engines on the Preferences page and in the output of /config REST API call.

Tokens can be added to one’s configuration on the Preferences page under “Engine tokens”. The input expects a comma separated list of strings.

The distribution of the tokens from the administrator to the users is not carved in stone. As providing access to such engines implies that the admin knows and trusts the user, we do not see necessary to come up with a strict process. Instead, we would like to add guidelines to the documentation of the feature.