SSD Nodes Learn Hosting plans →
Guías Matt ConnorPor Matt Connor

Searx vs SearXNG: ¿Searx está abandonado?

Searx no recibe commits de código desde abril de 2023 y su README dice que no tiene mantenimiento. Comprueba el estado y descubre qué cambia al instalar SearXNG.

Searx o SearXNG: ¿cuál debe instalar?

Searx y SearXNG son dos proyectos distintos con nombres casi idénticos, pero sólo uno de ellos sigue recibiendo correcciones. Instale SearXNG. El Searx original no ha recibido ningún commit de código desde abril de 2023 y su propio README lo indica claramente en una línea: «Searx ya no recibe mantenimiento».

Esto plantea un problema práctico, no filosófico. Los dos proyectos comparten una captura de pantalla, gran parte del archivo de configuración y la mitad del nombre, por lo que una guía escrita para uno parece aplicarse al otro. No es así. El archivo de configuración está en otra ubicación, la protección contra bots es nueva y el nombre del paquete ya no está disponible en las versiones actuales de Ubuntu. A continuación se explica la diferencia, se incluyen los comandos para comprobar el estado por cuenta propia y se enumeran los cambios que afectan a quien pone en marcha una instancia.

Qué es Searx y de dónde surgió SearXNG

Searx es un metabuscador. No mantiene un índice propio. Recibe la consulta, la reenvía a otros servicios de búsqueda, como Bing, DuckDuckGo o Wikipedia, y combina las respuestas en una sola página de resultados. La ventaja es que esos servicios ven la dirección del servidor en lugar de la del usuario. El coste es el mantenimiento. Cada motor es un pequeño componente de código que analiza el HTML o la API de otra entidad, por lo que deja de funcionar cuando cambia ese servicio externo. La estabilidad de un metabuscador depende de las personas que corrigen sus módulos de motores.

El repositorio searx se creó en octubre de 2013. En abril de 2021, un antiguo mantenedor inició SearXNG como una bifurcación del proyecto. «NG» significa next generation. El README de searx describe ambos proyectos uno junto al otro, y esa descripción sigue siendo el resumen más claro de la separación:

SearxNG es una bifurcación de searx, creada por un antiguo mantenedor de searx.
SearxNG publica versiones continuamente, actualiza las dependencias con más frecuencia y corrige los motores más rápido.

El desacuerdo que motivó la bifurcación estaba relacionado con los diagnósticos. Searx consideraba que una instancia no debía conservar datos de uso, y su configuración predeterminada lo indica explícitamente: enable_stats: False # activate /stats page - note: it may leak usage data. SearXNG tomó la decisión contraria e incluye enable_metrics: true de forma predeterminada. Esas métricas rellenan las barras de tiempo de respuesta y las páginas de error que facilitan localizar y corregir un motor averiado. Ambas posturas son defendibles. Sólo una de ellas mantuvo la publicación de código.

¿Está muerto Searx? Cómo comprobarlo por cuenta propia

«Muerto» no es un estado que GitHub informe, así que lea las dos señales disponibles y saque sus propias conclusiones. La primera es comprobar si el repositorio está archivado y cuándo recibió su último push.

curl -s https://api.github.com/repos/searx/searx | jq -r '.archived, .pushed_at'
curl -s https://api.github.com/repos/searxng/searxng | jq -r '.archived, .pushed_at'

El 10 de octubre de 2026, el primer comando imprime false y 2026-05-14T10:02:22Z. El segundo imprime false y una marca de tiempo reciente, normalmente del último día o de los dos últimos días. Observe el primer valor. El repositorio de searx no está archivado y nadie lo ha bloqueado, por eso la pregunta sigue apareciendo.

pushed_at es una señal débil por sí sola, porque cambia cuando se hace push a cualquier rama, incluso para modificar una sola línea de documentación. Consulte la lista de commits.

curl -s 'https://api.github.com/repos/searx/searx/commits?per_page=5' \
  | jq -r '.[] | .commit.committer.date[:10] + "  " + (.commit.message | split("\n")[0])'

A fecha del 10 de octubre de 2026, muestra lo siguiente:

2026-05-14  [doc] add hister reference
2023-09-07  Searx is no longer maintained
2023-04-05  Fix quoting issue in search_operator plugin (#3479)
2023-04-04  Bump pallets-sphinx-themes from 2.0.2 to 2.0.3 (#3450)
2023-04-04  Update searx.data - update_wikidata_units.py (#3454)

Léala desde abajo hacia arriba. La actividad normal se detiene en abril de 2023. El commit de septiembre de 2023 corresponde a los mantenedores incorporando el aviso al README. El único commit posterior es de documentación, porque el autor original se pasó a Hister, una herramienta de búsqueda que indexa las páginas y los archivos que usted elige en lugar de consultar otros motores. Es una idea diferente y útil si lo que realmente quiere es un motor de búsqueda personal sobre su propio contenido.

La segunda señal es el empaquetado, en el que dependen silenciosamente la mayoría de los tutoriales antiguos.

  • PyPI contiene veinte versiones searx, desde la 0.1.2 de enero de 2014 hasta la 0.17.0 de julio de 2020, y todas siguen disponibles para descargar. pip install searx funciona y le proporciona la más reciente, la 0.17.0, que corresponde a código de nueve meses antes de que existiera el fork.
  • Debian incluyó searx 1.1.0 en Debian 12 (bookworm) y todavía lo mantiene en unstable. Se eliminó de testing en octubre de 2023, por lo que Debian 13 (trixie) no incluye ningún paquete de searx.
  • Ubuntu lo incluyó por última vez en 22.04, en la versión 1.0.0. En Ubuntu 24.04, sudo apt install searx termina con E: Unable to locate package searx.
  • searx.space, el directorio de instancias públicas al que el proyecto siempre remitía a los usuarios, ahora muestra instancias de SearXNG.

Este es el estado real. El código es público, sigue funcionando y puede clonarlo e iniciarlo hoy mismo. Lo que no obtiene son correcciones para los motores ni actualizaciones de seguridad, y esa es la función principal de un metabuscador. Los motores se degradan según el calendario de terceros. Una instancia sin mantenimiento devuelve menos resultados cada mes sin que nadie toque el servidor.

Qué cambió en el fork para una instancia nueva

El archivo de configuración cambió de ubicación y ahora es una superposición

En Searx editabas searx/settings.yml dentro del árbol de código fuente. En SearXNG, el archivo está en /etc/searxng/settings.yml y el proceso lo encuentra mediante la variable de entorno SEARXNG_SETTINGS_PATH. La plantilla que el instalador copia allí es breve:

use_default_settings: true

general:
  debug: false
  instance_name: "SearXNG"

search:
  safe_search: 2
  autocomplete: 'duckduckgo'
  formats:
    - html

server:
  # Is overwritten by ${SEARXNG_SECRET}
  secret_key: "ultrasecretkey"
  limiter: true
  image_proxy: true

valkey:
  # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}.
  url: valkey://localhost:6379/0

use_default_settings: true es la línea que cambia la forma de trabajar. Con ella, el archivo contiene sólo anulaciones, y cada clave que omitas procede de los valores predeterminados incluidos en el paquete. Sin ella, el archivo debe describir toda la configuración, motor por motor. Así es como una instancia puede iniciarse correctamente y no encontrar nada. Un archivo de configuración antiguo de Searx pegado en esta ruta es una configuración completa con nombres de clave diferentes, por lo que sigue la segunda ruta y lo hace de forma incorrecta.

La clave secreta detiene el proceso

sudo -H sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" \
              "/etc/searxng/settings.yml"

Ejecuta esto una vez, después de copiar la plantilla. Si lo omites, SearXNG registra una línea y termina con el estado 1, porque webapp.py compara la clave con el valor de la plantilla antes de atender cualquier petición:

server.secret_key is not changed. Please use something else instead of ultrasecretkey.

La comprobación se omite cuando general.debug es true, por lo que una instancia puede funcionar correctamente en una sesión de depuración y negarse a iniciar con systemd o en un contenedor. Si un contenedor se reinicia en bucle y esa línea aparece en docker compose logs, la causa es esta comprobación, no una imagen dañada.

El limitador es nuevo y necesita Valkey

Searx no tenía limitación de tasa dentro de la aplicación. Las instancias públicas de Searx colocaban servicios independientes delante: filtron para filtrar peticiones y morty para procesar mediante proxy el contenido de los resultados. Ninguno de los dos repositorios ha recibido un commit desde enero de 2023: el último commit de filtron es de ese mes y el de morty es de abril de 2021.

SearXNG realiza ese trabajo por sí mismo. La limitación de tasa y la detección de bots corresponden al limitador, que se activa con server.limiter. Está en false en los valores predeterminados distribuidos y en true en la plantilla del instalador, y necesita una base de datos Valkey para almacenar sus contadores. Valkey es un fork de Redis y Ubuntu 24.04 lo incluye en sus paquetes:

sudo apt install -y valkey-server
server:
  limiter: true

valkey:
  url: valkey://localhost:6379/0

Las guías escritas antes de ese cambio de nombre configuran en su lugar un bloque redis:, así que copia el nombre de clave de la documentación actual del limitador. El ajuste detallado se encuentra en un segundo archivo, /etc/searxng/limiter.toml, y server.public_instance: true activa la detección de bots más estricta que necesita una instancia pública, incluido el método del token de enlace. El resultado visible es que algunas peticiones reciben HTTP 429 en lugar de resultados, incluidas tus propias peticiones si usas scripts contra la instancia. Esto tiene su propia página aquí: por qué una instancia de SearXNG responde 429 Too Many Requests.

Los motores se suspenden y los tiempos de espera son largos

Cuando un servicio ascendente responde con un CAPTCHA o una página de limitación de tasa, SearXNG genera una excepción tipada y deja de consultar ese motor durante un periodo determinado, en lugar de seguir reintentando hasta provocar un bloqueo. Los valores predeterminados se encuentran en searx/settings.yml, dentro de search.suspended_times. Estos son los 6 valores publicados a fecha de octubre de 2026:

GráficoSearXNG default engine suspension times, in seconds
Los datos de este gráfico
[
  {
    "label": "SearxEngineAccessDenied",
    "suspend_seconds": "180"
  },
  {
    "label": "SearxEngineCaptcha",
    "suspend_seconds": "3,600"
  },
  {
    "label": "SearxEngineTooManyRequests",
    "suspend_seconds": "180"
  },
  {
    "label": "cf_SearxEngineCaptcha",
    "suspend_seconds": "1,296,000"
  },
  {
    "label": "cf_SearxEngineAccessDenied",
    "suspend_seconds": "86,400"
  },
  {
    "label": "recaptcha_SearxEngineCaptcha",
    "suspend_seconds": "604,800"
  }
]

Una respuesta normal de acceso denegado suspende ese motor durante 180 segundos. Un CAPTCHA lo suspende durante 3,600 segundos. Un CAPTCHA de Cloudflare lo suspende durante 1,296,000 segundos, es decir, quince días, y un reCAPTCHA de Google durante 604,800 segundos, es decir, una semana. Los valores largos son intencionados, porque volver a consultar después de que un servicio ya haya marcado la dirección es la forma de que la IP de una instancia quede bloqueada permanentemente.

Mientras un motor está suspendido, la página de resultados lo omite y lo muestra en el bloque lateral titulado "Mensajes de los motores de búsqueda", y /stats/errors enumera los errores. Una instancia nueva que devuelve pocos resultados suele estar mostrando esto, no una instalación dañada.

La API JSON está desactivada de forma predeterminada

El valor predeterminado distribuido es formats: [html] y nada más, por lo que la API que necesita cualquier script permanece cerrada hasta que la abras.

curl -s -o /dev/null -w '%{http_code}\n' \
  'http://127.0.0.1:8888/search?q=test&format=json'

Esto muestra 403, porque la ruta de búsqueda llama a flask.abort(403) cuando el formato solicitado no aparece en search.formats. Añade el formato y reinicia el servicio:

search:
  formats:
    - html
    - json

El archivo de configuración de searx no tenía ninguna clave formats, por lo que su salida JSON estaba disponible directamente. Todos los scripts y fragmentos de código de esa época dan por supuesto lo mismo, y el modo de fallo es un 403 sin explicación. Si vas a integrar una instancia con herramientas, dar a un agente un endpoint de SearXNG para realizar búsquedas comienza con este ajuste.

Por qué fallan los tutoriales de Searx copiados y pegados

Cada una de estas líneas aparece en guías que todavía obtienen una buena posición en los resultados, y cada una falla o induce a error en una instalación actual.

  • sudo apt install searx en Ubuntu 24.04 se detiene en E: Unable to locate package searx porque el paquete se publicó por última vez para 22.04.
  • pip install searx se ejecuta correctamente e instala la versión 0.17.0, publicada en julio de 2020. No indica que sea anterior a la bifurcación.
  • git clone https://github.com/asciimoo/searx todavía funciona porque GitHub redirige el nombre del propietario anterior. Clona la rama predeterminada actual, donde un commit de documentación de mayo de 2026 se encuentra sobre código de la aplicación que dejó de cambiar en abril de 2023.
  • Los pasos que modifican searx/settings.yml en el árbol de código fuente no cambian nada en SearXNG, que lee /etc/searxng/settings.yml.
  • Los pasos que instalan filtron o morty están reconstruyendo componentes que SearXNG ya incluye.
  • Una URL redis: para el limitador está un cambio de nombre por detrás de la clave valkey: actual.

Las guías de SearXNG también quedan obsoletas, y la URL de clonación es la forma más rápida de fechar una. Los archivos de Compose se encontraban antes en un repositorio searxng-docker independiente. Ese repositorio ahora está archivado, su último push fue en marzo de 2026 y sus archivos se trasladaron a container/ en el repositorio principal. El inicio rápido actual con contenedores de la documentación es:

mkdir -p ./searxng/core-config/
cd ./searxng/
curl -fsSL \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
cp -i .env.example .env
nano .env
docker compose up -d

Modifique .env antes de ejecutar el último comando. La imagen asigna las variables de entorno a las claves de configuración, de modo que SEARXNG_SECRET se convierte en server.secret_key y SEARXNG_BASE_URL se convierte en server.base_url. La instalación automatizada en el host sigue un procedimiento diferente con el mismo resultado:

git clone https://github.com/searxng/searxng.git searxng
cd searxng
sudo -H ./utils/searxng.sh install all

Esto crea el usuario searxng, el entorno virtual en /usr/local/searxng y el servicio uWSGI, que es la configuración de referencia en la documentación de SearXNG. La explicación más extensa de este procedimiento está en instalar SearXNG en su propio VPS.

Instancia pública o su propia instancia

Una instancia pública es un servidor de otra persona que termina su conexión TLS (transport layer security), por lo que el software de ese servidor lee su consulta como texto sin cifrar. La documentación de SearXNG plantea claramente la cuestión de la confianza: debe confiar en el administrador y no puede saber si las solicitudes se registran, se agregan o se envían a terceros. La lista visible es breve y completa. La pila del operador puede ver el texto de la consulta, la hora, la dirección IP desde la que llega la solicitud, el agente de usuario del navegador y la cookie de preferencias que contiene su configuración. El operador también controla el código, por lo que cualquier parche que aplique se ejecuta en cada búsqueda que realice allí.

Una configuración predeterminada facilita que esto se registre por accidente. Searx enviaba las búsquedas mediante POST. SearXNG releases method: "GET", con el comentario de que POST mantiene las consultas fuera del historial del navegador, pero causa problemas de usabilidad. Con GET, la consulta queda en la línea de solicitud, por lo que se escribe de forma predeterminada en el registro de acceso del reverse proxy y en el historial del navegador. Ese es el comportamiento normal de un servidor web. Conviene saberlo antes de elegir en qué servidor ocurrirá.

Ejecutar tu propia instancia traslada la confianza, pero no la elimina. Controlas el código y los registros. Si prefieres no publicar un nombre de host ni un certificado TLS para una instancia de un solo usuario, acceder a ella mediante un servicio onion v3 mantiene la instancia fuera del DNS público y permite acceder a ella desde cualquier lugar. A cambio, los motores upstream ven una sola dirección para todas tus búsquedas. En una instancia de un solo usuario, cada consulta se puede asociar contigo en lugar de mezclarse con las de un grupo de usuarios. Una instancia pública con mucha actividad te proporciona ese grupo y evita que tengas que gestionar los registros. Elige la propiedad que te importe. Si primero quieres revisar todos los riesgos, si SearXNG es seguro de usar los analiza. El historial de ubicaciones requiere el mismo análisis, pero con más riesgos. Un teléfono que comunica su posición durante todo el día revela más información que cualquier registro de búsquedas. Comparar rastreadores de ubicación autoalojados es un buen punto de partida si quieres guardar esos datos en un servidor que controles.

Una nota práctica para un VPS. Los rangos de direcciones de los centros de datos se marcan más rápido que las conexiones domésticas, por lo que una instancia nueva encuentra CAPTCHA en algunos motores durante las primeras búsquedas. Ese es el comportamiento de suspensión descrito arriba, no un error de configuración. Si los mismos motores siguen apareciendo bloqueados después de que finalice su suspensión, leer el error real antes de cambiar nada evitará que tenga que adivinar las correcciones.

Si ya ejecuta una instancia de Searx

Nada deja de funcionar el día que lea esto. El servidor seguirá funcionando hasta que un cambio posterior rompa otro motor; después, la instancia permanecerá averiada. Planifique la migración y no copie el archivo de configuración. Empiece con la plantilla de SearXNG y vuelva a añadir sólo lo que haya cambiado de forma intencionada: el nombre de la instancia, safe_search, los motores que haya habilitado o deshabilitado por nombre y los valores predeterminados de la interfaz. Los nombres y las opciones de los motores cambiaron en el fork. Compruebe cada uno en la documentación actual en lugar de asumir que la clave sigue existiendo. Las reglas de Filtron y una URL de morty no tienen equivalente, porque esas funciones ahora forman parte de la aplicación.

Ejecute la nueva instancia en otro puerto mientras la antigua siga activa. La migración funciona cuando la página principal devuelve 200, una búsqueda devuelve resultados de más de un motor y /stats/errors está vacío o sólo muestra fallos que entiende. Después, cambie el reverse proxy a la nueva instancia y detenga el servicio antiguo.

FAQ

¿Sigue muerto Searx en 2026?

El repositorio no está archivado, por lo que nada impide clonarlo, pero el proyecto no recibe mantenimiento. El último commit de código se incorporó en abril de 2023 y el README incluye la frase «Searx is no longer maintained». Compruébelo usted mismo con curl -s https://api.github.com/repos/searx/searx | jq -r '.pushed_at' y después lea los mensajes de los commits recientes, porque una fecha de push por sí sola puede corresponder a una modificación de la documentación. En un metabuscador, la falta de mantenimiento hace que los resultados empeoren por sí solos, ya que cada módulo de motor depende de un sitio upstream que cambia continuamente.

¿Todavía puedo instalar Searx con apt o pip?

No en sistemas actuales, y tampoco de forma útil donde todavía sea posible. Ubuntu incluyó searx por última vez en 22.04, en la versión 1.0.0, por lo que sudo apt install searx en 24.04 devuelve E: Unable to locate package searx. Debian distribuyó la versión 1.1.0 en Debian 12 y la retiró de testing en octubre de 2023, por lo que Debian 13 no tiene ningún paquete. PyPI todavía ofrece todas las versiones de searx, y la más reciente es la 0.17.0, de julio de 2020, anterior al propio fork. Instale SearXNG en su lugar.

¿Funcionará mi archivo antiguo settings.yml de searx en SearXNG?

No. Copie los valores, no el archivo. SearXNG lee /etc/searxng/settings.yml y espera use_default_settings: true al principio, por lo que su archivo actúa como una capa sobre los valores predeterminados distribuidos. Un archivo antiguo de searx es una configuración completa con nombres de claves diferentes. Además, no contiene limiter, ni el bloque valkey, ni la lista formats. Empiece por la plantilla de utils/templates/etc/searxng/settings.yml y vuelva a añadir sus cambios de uno en uno.

¿Por qué mi propia instancia de SearXNG devuelve menos resultados que una instancia pública?

Algunos motores están suspendidos. Cuando un motor responde con un CAPTCHA o una página de límite de tasa, SearXNG deja de consultarlo durante un tiempo fijo: desde 180 segundos para un rechazo simple hasta 1,296,000 segundos para un CAPTCHA de Cloudflare. La página de resultados informa de ello en «Messages from the search engines», y /stats/errors enumera los fallos con sus motivos. Las direcciones de centros de datos se marcan antes que las conexiones domésticas, por lo que una instancia nueva en un VPS lo detecta pronto.

¿Debo usar una instancia pública de SearXNG o ejecutar la mía?

Ejecute la suya si quiere controlar el código y los registros, y acepta que los motores upstream verán una única dirección para todas sus búsquedas. Use una instancia pública si para usted es más importante mezclar sus consultas con las de otras personas que saber qué se registra. En una instancia pública, el operador puede ver el texto de la consulta, la hora, su dirección IP y su agente de usuario, y puede cambiar el código cuando quiera. Una política de registro declarada no se puede verificar desde el exterior.