SearXNG Self-Hosted Search
Search the web using a self-hosted SearXNG instance. Privacy-respecting metasearch that aggregates results from multiple engines.
Search the web using a self-hosted SearXNG instance. Privacy-respecting metasearch that aggregates results from multiple engines.
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Search the web using your self-hosted SearXNG instance. Privacy-respecting metasearch that aggregates results from Google, DuckDuckGo, Brave, Startpage, and 70+ other engines.
SearXNG running locally or on a server. Quick Docker setup:
mkdir -p ~/Projects/searxng/searxng cd ~/Projects/searxngCreate docker-compose.yml
cat > docker-compose.yml << 'EOF' services: searxng: image: searxng/searxng:latest container_name: searxng ports: - "8080:8080" volumes: - ./searxng:/etc/searxng:rw environment: - SEARXNG_BASE_URL=http://localhost:8080/ restart: unless-stopped EOF
Create settings.yml with JSON API enabled
cat > searxng/settings.yml << 'EOF' use_default_settings: true server: secret_key: "change-me-to-random-string" bind_address: "0.0.0.0" port: 8080 search: safe_search: 0 autocomplete: "google" default_lang: "en" formats: - html - json EOF
Start SearXNG
docker compose up -d
Set the SearXNG URL (defaults to http://localhost:8080):
export SEARXNG_URL="http://localhost:8080"
curl "http://localhost:8080/search?q=your+query&format=json" | jq '.results[:5]'
# General web search curl "http://localhost:8080/search?q=query&categories=general&format=json"Images
curl "http://localhost:8080/search?q=query&categories=images&format=json"
News
curl "http://localhost:8080/search?q=query&categories=news&format=json"
Videos
curl "http://localhost:8080/search?q=query&categories=videos&format=json"
IT/Tech documentation
curl "http://localhost:8080/search?q=query&categories=it&format=json"
Science/Academic
curl "http://localhost:8080/search?q=query&categories=science&format=json"
curl "http://localhost:8080/search?q=query&language=en-US&format=json" curl "http://localhost:8080/search?q=query&language=de-DE&format=json"
# Page 2 (results 11-20) curl "http://localhost:8080/search?q=query&pageno=2&format=json"
Each result includes:
title - Result titleurl - Link to the resultcontent - Snippet/descriptionengines - Array of search engines that returned this resultscore - Relevance score (higher = better)category - Result categoryAdd to your
.zshrc or .bashrc:
searxng() { local query="$*" local url="${SEARXNG_URL:-http://localhost:8080}" curl -s "${url}/search?q=$(echo "$query" | sed 's/ /+/g')&format=json" | \ jq -r '.results[:10][] | "[\(.score | floor)] \(.title)\n \(.url)\n \(.content // "No description")\n"' }
Usage:
searxng how to make sourdough bread
# Start cd ~/Projects/searxng && docker compose up -dStop
docker compose down
View logs
docker compose logs -f searxng
Restart
docker compose restart
Container won't start:
docker compose logs searxng
JSON format not working: Ensure
formats: [html, json] is in your settings.yml
No results: Some engines may be rate-limited. Check logs for errors.
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.