Set up web search
Karja's Web Search and Videos apps need a search backend. There's no shared default that works reliably, so it's bring-your-own — pick one of the two options below.
Brave Search API
Easiest. A free key — no credit card — with about 2,000 queries a month. A couple of minutes to set up.
SearXNG (self-hosted)
Most private. A metasearch engine you run yourself. More setup, but no third-party key and no query limit — and it unlocks ad-free embedded video.
Option A — Brave Search API
Get a free API key
Go to brave.com/search/api, sign up, and choose the Free plan — no credit card required. It allows about 2,000 queries per month.
Copy your key
From the Brave API dashboard, copy your subscription token (the API key).
Paste it into Karja
In Karja, open Settings → Search, choose Brave Search API, paste your key, and click Test connection. When it says Working, you're done.
Note: with Brave, the Videos app opens results in your browser. For ad-free video embedded inside Karja, use SearXNG below.
Option B — Self-hosted SearXNG
SearXNG is a free, open-source metasearch engine. Public instances almost always block the JSON API that Karja needs, so run your own — Docker is the easy path.
Run SearXNG with Docker
Follow the official Docker installation guide . The quickest start maps it to port 8888:
docker run -d --name searxng -p 8888:8080 searxng/searxng Your instance is then at http://localhost:8888.
Enable the JSON API
This is the step people miss: Karja reads results as JSON, which is
off by default. In your SearXNG settings.yml, add
json under search.formats:
search:
formats:
- html
- json Then restart the container so the change takes effect.
Point Karja at it
In Karja, open Settings → Search, choose
SearXNG (self-hosted), enter your instance URL
(e.g. http://localhost:8888), and click
Test connection.
Good to know
- The same provider powers both Web Search and Videos — set it once.
- SearXNG must stay running (on your machine or a home server) for search to work in Karja.
- Don't rely on a public SearXNG instance — they generally block the JSON API and will fail the connection test.