SearXNG Local

Search the web using a self-hosted SearXNG instance. Privacy-respecting metasearch that aggregates results from multiple engines.

تثبيت
$clawhub install searxng-local

SearXNG Search Skill

Search the web using your self-hosted SearXNG instance. Privacy-respecting metasearch that aggregates results from Google, DuckDuckGo, Brave, Startpage, and 70+ other engines.

Prerequisites

SearXNG running locally or on a server. Quick Docker setup:

mkdir -p ~/Projects/searxng/searxng
cd ~/Projects/searxng

# Create 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

Configuration

Set the SearXNG URL (defaults to http://localhost:8080): bash export SEARXNG_URL="http://localhost:8080"

Usage Examples

curl "http://localhost:8080/search?q=your+query&format=json" | jq '.results[:5]'

Search with Categories

# 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"

Search with Language/Region

curl "http://localhost:8080/search?q=query&language=en-US&format=json"
curl "http://localhost:8080/search?q=query&language=de-DE&format=json"

Paginated Results

# Page 2 (results 11-20)
curl "http://localhost:8080/search?q=query&pageno=2&format=json"

Response Format

Each result includes: - title - Result title - url - Link to the result
- content - Snippet/description - engines - Array of search engines that returned this result - score - Relevance score (higher = better) - category - Result category

Shell Function

Add 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

Docker Management

# Start
cd ~/Projects/searxng && docker compose up -d

# Stop
docker compose down

# View logs
docker compose logs -f searxng

# Restart
docker compose restart

Troubleshooting

Container won't start: bash 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.

Why SearXNG?

  • Privacy: No tracking, no ads, no data collection
  • Aggregation: Combines results from 70+ search engines
  • Self-hosted: Your data stays on your machine
  • API: JSON output for automation
  • Free: No API keys or rate limits