Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Engine Catalog

4got ships with 274 engine configurations in data/engines.kdl plus 18 handwritten engines in Go. Engines are grouped by category. Most require no API key; exceptions are noted.

Disabled engines are included but inactive by default. Enable them by setting disabled false in engines.kdl.

Handwritten engines (Go)

These are implemented directly in Go for speed, reliability, or because they need custom scraping logic.

EngineIDCategoriesNotes
Bravebraveweb, images, newsHTML scraping
DuckDuckGoduckduckgowebHTML scraping
GooglegooglewebHTML scraping
StartpagestartpagewebHTML scraping
WikipediawikipediawebMediaWiki API
MojeekmojeekwebHTML scraping
MarginaliamarginaliawebJSON API
WibywibywebJSON API
Hacker NewshackernewsnewsAlgolia API
YouTubeyoutubevideosHTML scraping
SoundCloudsoundcloudmusicJSON API
FlickrflickrimagesJSON API
PexelspexelsimagesJSON API
Yandexyandexweb, imagesHTML scraping
Qwantqwantweb, images, newsJSON API
Bingbingweb, images, news, videosHTML scraping
BaidubaiduwebHTML scraping
Yahooyahooweb, newsHTML scraping

Sidecar engines (Python + Playwright)

These require the Python sidecar for JavaScript rendering:

EngineWhat it handles
Google (sidecar)JS-heavy Google SERPs
Qwant (sidecar)Qwant’s SPA rendering
Yandex (sidecar)Yandex captcha bypass

KDL-configured engines by category

Web (159 engines)

General web search. The largest category.

EngineIDNotes
MDN Web DocsmdnJSON API
StackExchangestackexchangeAPI, Q&A results
Open LibraryopenlibBook search
npmnpmPackage registry
AnacondaanacondaHTML scraping
Arch WikiarchwikiREST API
WikidatawikidataJSON API
CrossrefcrossrefAcademic DOIs
Apple App Storeapple_app_storeiTunes API
BoardreaderboardreaderForum search
bpb.debpbGerman civic education
CachyOScachy_os
crates.iocratesRust packages
Docker Hubdocker_hub
GitHubgithubRepo search
GitHub Codegithub_codeCode search
GitHub Issuesgithub_issues
GitHub Topicsgithub_topics
GitLabgitlab
GitLab Snippetsgitlab_snippets
Grokipediagrokipedia
Hacker NewshackernewsAlgolia API
hex.pmhexElixir packages
Hugging FacehuggingfaceAI models
LemmylemmyFediverse forums
MastodonmastodonFediverse posts
Microsoft Learnmicrosoft_learn
mwmblmwmblOpen-source index
NVDnvdCVE/vulnerability DB
OpenAlexopenalexAcademic
OpenLibraryopenlibrary
Pirate BaypiratebayTorrents
Redditreddit
tagesschau.detagesschauGerman news (web+news)
TootfindertootfinderMastodon search
Void Linuxvoidlinux
Wikipediawikipedia
Simple Wikipediasimple_wikipedia
Wikibookswikibooks
Wikinewswikinews
Wikiquotewikiquote
Wikisourcewikisource
Wikivoyagewikivoyage
Wiktionarywiktionary
Wikimedia Commonswikicommons
Internet Archiveinternet_archive
LibreTranslatelibre_translate
PubMedpubmed
RubyGemsrubygems
CTANctanLaTeX packages
cdnjscdnjsJS CDN
pub.devpub_devDart packages
CocoaPodscocoapodsiOS packages
OpenBSD Portsopenbsd_ports
TVmazetvmazeTV shows
TMDBtmdbMovies
OpenLibrary Booksopenlibrary_search
LibriVoxlibrivoxAudiobooks
Project GutenberggutenbergFree ebooks
GiphygiphyGIFs; uses public API key
OpenStreetMapopenstreetmapNominatim
PhotonphotonGeocoder
Open-Meteoopen_meteoWeather data
Alpine Packagesalpine_packages
HomebrewhomebrewDisabled
Flathubflathub
Snapcraftsnapcraft
YTSytsMovie torrents
Discogsdiscogs
Last.fmlastfm
Urban Dictionaryurban_dictionary
DDG Definitionsduckduckgo_definitions
SVGReposvgrepo
SteamsteamGames
PyPIpypiPython packages
1337x1337xTorrents
APKMirrorapkmirrorAndroid APKs
eBayebay
F-DroidfdroidFOSS Android apps
Solid Torrentssolidtorrents
WordnikwordnikDictionary
fyydfyydPodcasts; disabled
Podcast Indexpodcast_index
Semantic Scholarsemantic_scholarAcademic
SourceHutsourcehut
Giteagitea
lib.rslibrs / lib_rsRust crate search
Lobsterslobste_rs
PackagistpackagistPHP packages
Radio Browserradio_browser
Dailymotiondailymotion
Bandcampbandcamp
Stack Overflow Tagsstackoverflow_main
Anaconda Cloudanaconda_cloud
arXivarxivAcademic preprints
DBLPdblpCS bibliography
IA Scholarinternet_archive_scholar
NyaanyaaAnime torrents
Library Genesislibgen
Codebergcodeberg
pkg.go.devpkg_go_devGo packages
HackagehackageHaskell packages
NuGetnuget.NET packages
MavenmavenJava packages
pkgs.orgpkgs_orgCross-distro package search
Libraries.iolibraries_ioMulti-registry
Anna’s Archiveannas_archive
Z-Libraryz_library
Metacriticmetacritic
Rotten Tomatoesrotten_tomatoes
Letterboxdletterboxd
AniDBanidb
VNDBvndbVisual novels
PCGamingWikipcgamingwiki
IsThereAnyDealisthereanydealGame prices
BoardGameGeekboardgamegeek
WordReferencewordreference
Lingueelinguee
DeepLdeeplDisabled
Brave Gogglesbrave_goggles
SearXsearxMeta-meta-search
Whooglewhoogle
Stractstract
Yepyep
Rightdaoright_dao
Presearchpresearch
Alexandriaalexandria
Petal Searchpetalsearch
Swisscowsswisscows
MetaGermetager
eToolsetools
Dogpiledogpile
Gibirugibiru
searx.spacesearx_spaceInstance list
Monoclesmonocles
Mullvad Letamullvad_leta
4get.ca4get_caSibling metasearch
Emojipediaemojipedia
Color Hexcolorhex
AlternativeToalternativeto
Goodreadsgoodreads
IMDBimdb_search
itch.ioitch_ioIndie games
Are.naare_na
Kickstarterkickstarter
Product Huntproduct_hunt
IEEE Xploreieee
Springerspringer_open
COREcoreAcademic
DOAJdoajOpen access journals
ZenodozenodoResearch data
ORCIDorcid
UnpaywallunpaywallOpen access finder
OSFosfPreprints
ANN AnimeannDisabled
KitsukitsuAnime/manga
MyAnimeListjikanVia Jikan API
RAWGrawgGames
MangaDexmangadex
Open Food Factsopenfoodfacts
MusicBrainzmusicbrainz
OpenAIREopenairedatasets
Exchange Rateexchangerate
EcosiaecosiaDisabled
MojeekmojeekDisabled
MarginaliamarginaliaDisabled
Etsyetsy
CRANcranR packages; disabled
CPANcpanPerl packages
Conda-Forgeconda_forgeDisabled
RepologyrepologyDisabled
HowLongToBeathowlongtobeatDisabled
IGDBigdbDisabled
BASE Academicbase_search
Fatcat Scholarfatcat
Google Scholargoogle_scholarDisabled

Images (15 engines)

EngineIDNotes
Art Institute of Chicagoartic
ArtStationartstationPOST API
findthatmemefindthatmemeMeme search
OpenverseopenverseCC-licensed
Pixabaypixabay
Adobe Stockadobe_stock
Unsplashunsplash
Wallhavenwallhaven
Pexelspexels
Flickrflickr
Wikimedia Commonswikicommons_images
Giphygiphy
SVGReposvgrepoVector graphics
DeviantArtdeviantartDisabled
PixivpixivDisabled

Videos (13 engines)

EngineIDNotes
BilibilibilibiliChinese video
BitChutebitchute
CCC Mediaccc_mediaChaos Computer Club
Dailymotiondailymotion
IMDbimdb
Internet Archive Videoarchive_video
InvidiousinvidiousYouTube frontend
OdyseeodyseeLBRY
PeerTubepeertubeFediverse video
Vimeovimeo
YouTube (no API)youtube_noapiDisabled
RumblerumbleDisabled
360kan360search_videosDisabled

News (10 engines)

EngineIDNotes
Yahoo Newsyahoo_news
Hacker Newshackernews_news
Reutersreuters
tagesschau.detagesschauGerman; also in web
Wikinewswikinews
The Guardianthe_guardianUses test API key
ANSA NewsansaItalian wire service
AP Newsap_newsDisabled
Bing Newsbing_newsDisabled
Google Newsgoogle_newsDisabled

Music (13 engines)

EngineIDNotes
Bandcampbandcamp
Deezerdeezer
Discogsdiscogs
Geniusgenius
JamendojamendoCC music
Last.fmlastfm
LibriVoxlibrivoxAudiobooks
Mixcloudmixcloud
MusicBrainzmusicbrainz
Radio Browserradio_browserInternet radio
SoundCloudsoundcloud
YouTube (no API)youtube_noapiAlso videos; disabled
FreesoundfreesoundDisabled; needs API key

Science (12 engines)

EngineIDNotes
arXivarxiv
BASEbase_search_sciBielefeld Academic
COREcore_sci
Crossrefcrossref_sci
dblpdblpCS papers
DOAJdoaj_sciOpen access
IA Scholarinternet_archive_scholar
OpenAlexopenalex_sci
PubMedpubmed_sci
Semantic Scholarsemantic_scholar_sci
Zenodozenodo_sci
Google Scholargoogle_scholarDisabled

IT (15 engines)

EngineIDNotes
Codebergcodeberg
crates.iocrates_ioRust
Docker Hubdocker_hub_it
GitHub Reposgithub_repos_it
GitLabgitlab_it
hex.pmhex_itElixir
MDNmdn_it
npmnpm_search
NuGetnuget_it.NET
Packagistpackagist_itPHP
pkg.go.devpkg_go_devGo
pub.devpub_dev_itDart
PyPIpypi_packagesPython
RubyGemsrubygems_it
Stack Overflowstackoverflow

Files (9 engines)

EngineIDNotes
1337x1337x_files
Anna’s Archiveannas_archive_files
Library Genesislibgen
NyaanyaaAnime torrents
Pirate Baypiratebay_files
Solid Torrentssolidtorrents_files
YTSyts_filesMovie torrents
BT4Gbt4gDisabled
TorrentGalaxytorrentgalaxyDisabled

Social (6 engines)

EngineIDNotes
Hacker Newshackernews_social
Lemmylemmy_social
Lobsterslobsters_social
Mastodonmastodon_social
Redditreddit_social
Tootfindertootfinder_social

Books (4 engines)

EngineIDNotes
Goodreadsgoodreads_books
Internet Archiveinternet_archive_books
Open Libraryopenlibrary_books
Project Gutenberggutenberg_books

Q&A (6 engines)

EngineIDNotes
Ask Ubuntuaskubuntu_qa
Math SEmath_se_qa
Server Faultserverfault_qa
StackExchangestackexchange_qa
Super Usersuperuser_qa
Unix & Linux SEunix_se_qa

Packages (9 engines)

EngineIDNotes
Alpine Packagesalpine_packages_pkg
Arch Wikiarchwiki_packages
AURaur
Flathubflathub_pkg
Gentoo Wikigentoo_wiki
NixOS Packagesnixos_packages
Void Linuxvoid_packages_pkg
Homebrewhomebrew_pkgDisabled
RepologyrepologyDisabled

Maps (2 engines)

EngineIDNotes
OpenStreetMap (Nominatim)nominatim_maps
Photon Geocoderphoton_maps

Weather (2 engines)

EngineIDNotes
wttr.inwttr_in
Open-Meteoopen_meteo_weather

Lyrics (1 engine)

EngineIDNotes
Genius Lyricsgenius_lyrics

Oracles

Oracles are instant-answer widgets shown above search results. They trigger on specific query patterns and provide rich, interactive answers without requiring a click-through. Oracles are checked in CheckOracles() in oracles.go. Access can be restricted per-group via oracle-permissions.kdl.

Local oracles (no external calls)

These run entirely on the server with no network requests. They are mutually exclusive — the first match wins and skips all remaining oracles.

OraclePermission keyTrigger patternsWhat it shows
Calculatorcalculator2+2, sqrt(16), 15% of 200, sin(1.5), 2^8Arithmetic, trig, logarithms, percentage calculations
Unit Converterunit_converter10 km to miles, 72 fahrenheit to celsius, 5 gallons to liters, 100 fl oz to mlLength, weight, volume, speed, data storage, cooking units, temperature, force/mass
Base Converterbase_converter0xff in decimal, 255 in hex, 255 in binary, 0b1010 in decimal, 0o77 in hexDecimal, hex, binary, octal conversions
Colorcolor#FF5500, #f50, rgb(255,85,0), hsl(20,100%,50%)Color swatch with hex/RGB/HSL conversions
Private IPprivate_ipBare IPv4/IPv6 addresses in private ranges (192.168.1.1, 10.0.0.1)Identifies the private range and offers HTTP/HTTPS links
Timezonetimezonetime in tokyo, time in new york, time in UTC+5Current time in 70+ cities and IANA timezones
UUIDuuidAny UUID string (e.g. 550e8400-e29b-41d4-a716-446655440000)Version, variant, and embedded timestamp (v1/v7)
Timestamptimestamp10-digit or 13-digit numbers, now, current timestamp, unix timestampConverts Unix timestamps to human dates, or shows current timestamp
JWTjwtAny header.payload.signature JWT tokenDecodes header and payload, shows algorithm and expiry
CIDRcidr192.168.1.0/24, 10.0.0.0/8Network, broadcast, host range, usable hosts, netmask
Hash/Base64hashMD5 (32 hex), SHA-1 (40 hex), SHA-256 (64 hex), SHA-512 (128 hex), or base64 strings (40+ chars)Identifies hash type, or decodes base64 to text
Croncron5-field cron expressions like 0 */2 * * 1-5Human-readable schedule description with per-field explanation
DOIdoi10.1000/xyz123 or doi.org/10.1000/xyz123Links to publisher (doi.org) and Sci-Hub
Timertimertimer 5 minutes, timer 30s, countdown 10m, stopwatchInteractive countdown timer or stopwatch widget
Randomrandomflip a coin, roll a die, roll 3d20, random 1 to 100Coin flip, dice rolls (NdX), random number in range (crypto/rand)
Passwordpasswordpassword, generate password, password 32 charsCryptographically random password with copy button (4-256 chars)
QR Codeqrqr https://example.com, qr code hello worldInline SVG QR code (up to ~271 bytes, versions 1-10)
Chmodchmodchmod 755, chmod rwxr-xr-xNumeric-to-symbolic and symbolic-to-numeric conversion with explanation
Roman NumeralromanXIV in decimal, 42 in romanRoman numeral to/from decimal conversion (1-3999)
Date Arithmeticdate_arithmeticdays between Jan 1 and Dec 31, 30 days from now, days until Christmas, 90 days agoDay counts, future/past dates, with IFC calendar dates

Network oracles (external API calls, no key required)

These make external network requests but do not require any API key.

OraclePermission keyTrigger patternsWhat it showsAPI used
Reverse DNSreverse_dnsrdns 8.8.8.8, reverse dns 1.1.1.1, nslookup 8.8.4.4, ptr <IP>PTR records for an IP addressSystem DNS resolver
DNS Lookupdns_digexample.com, dig example.com, dns example.comA, AAAA, MX, TXT recordsSystem DNS resolver
IP Geolocationip_geoBare public IPv4 like 8.8.8.8, where is 1.1.1.1, geolocate <IP>City, region, country, ISP, ASN, PTRipapi.co
My IPmy_ipmy ip, whats my ip, ip, show my ipUser’s public IP with geolocation and reverse DNSipapi.co
Currencycurrency100 usd to eur, 50 gbp in jpy, usd to eurExchange rate with forward and inverse ratesfawazahmed0/exchange-api (jsDelivr CDN)
WHOISwhoiswhois example.comDomain registrar, creation/expiry dates, nameserversRDAP (rdap.org)
Speedtestspeedtestspeedtest, speed test, internet speed, bandwidth testInteractive download/upload speed test with latency and jitterServer’s own /api/v1/speedtest/* endpoints
Benchmarkbenchmarkbenchmark, browser benchmark, system benchmarkJS/DOM/Crypto/Canvas/Memory benchmark with scores; includes speedtest if permittedClient-side JS + server speedtest
Translationtranslationtranslate hello to french, translate X to YText translation with language detectionConfigured translation backends
Auto-translatetranslation(Automatic on non-native-language queries)Detects foreign language queries and translates to user’s known languageConfigured translation backends
Mapmapmap of paris, map tokyo, directions to berlinOpenStreetMap tile with links to OSM, Apple, Google, HERE, Bing, OsmAnd, Waze, Yandex MapsNominatim geocoding + OSM tiles
WikipediawikipediaEntity-like queries (1-3 capitalized words), who is X, what is XInfobox card with image, summary, and Wikipedia linkWikipedia REST API
DDG Instant Answersddg_ia(Any query — lowest priority among knowledge oracles)Abstract, definition, or answer card from DuckDuckGoDuckDuckGo Instant Answer API
Package Versionpackageslatest lodash, npm lodash, pypi requests, pip flask versionLatest version with link to registrynpm Registry / PyPI
Radioradioradio new york, fm tokyo, radio stations in berlinUp to 5 radio stations with inline audio playersradio-browser.info
Sports Scoressportsnfl scores, nba scores, lakers scores, premier league scoresLive/recent scores for NFL, NBA, MLB, NHL, MLS, EPL, La Liga, Bundesliga, Serie A, Ligue 1, Champions League, WNBA, NCAAESPN API
SSL Certificatessl_certssl example.com, cert example.com, certificate example.comCertificate issuer, validity dates, SANs, protocol version, cipher suiteDirect TLS connection
Earthquakeearthquakeearthquakes, earthquakes today, recent earthquakes, earthquakes in californiaRecent significant earthquakes with magnitude, location, depth, and timeUSGS Earthquake API
Flightsflightsflight UA123, flight status AA456, flights from JFK to LAXLive flight tracking by callsign; route planning with bearing and distanceOpenSky Network API
Recipereciperecipe for pasta, how to make brownies, how to cook risottoStep-by-step recipe with ingredients, thumbnail, and source linkTheMealDB

API-keyed oracles (require configuration)

These oracles require API keys configured in config.kdl under api-keys { ... }. Without the key, the oracle silently returns nothing.

OraclePermission keyTrigger patternsWhat it showsAPI key configAPI used
Wolfram Alphawolfram(Any query — lowest priority knowledge oracle)Computational answers, facts, mathwolframalpha "..."Wolfram Alpha Short Answers API
Weatherweatherweather, weather in paris, forecast tokyo, temperature in londonCurrent temperature, humidity, wind, conditions with iconOptional: openweathermap "..."Open-Meteo (free, always); OpenWeatherMap (if key set, tabbed multi-source)
Dictionarydictionarydefine serendipity, meaning of ubiquitous, what does ephemeral mean, urban slangMulti-source tabbed definitionsOptional: mw_collegiate, mw_thesaurus, mw_learners, mw_medical, mw_spanish, mw_school, mw_elementary, mw_intermediate, mw_intermediate_thesaurus, wordnikFree Dictionary API + Wiktionary + Urban Dictionary (always); up to 9 Merriam-Webster products + Wordnik (with keys)
Stockstock$AAPL, TSLA stock, stock price MSFTPrice, change, open/high/low, previous closeOptional: alpha_vantage "...", twelvedata "...", finnhub "..."Alpha Vantage, Twelve Data, Finnhub (multi-source tabbed if multiple keys)
Cryptocrypto$BTC, bitcoin price, price of ethereum, crypto solanaUSD/EUR/BTC price, 24h change, market capNone (free API)CoinGecko
Inflation / CPIinflationinflation, cpi, consumer price index, dollar inflationAnnual inflation rate with 12-month sparkline chartNone (free API)Bureau of Labor Statistics
Purchasing Powerinflationpurchasing power of dollar, dollar worth in 1970Historical purchasing power table or year-specific comparisonNone (free API)Bureau of Labor Statistics CPI-U data
Air Qualityair_qualityair quality, aqi, pollution, air quality in beijingAQI value, category, dominant pollutant, color-coded displayOptional: aqicn "..."Open-Meteo Air Quality (free, always); AQICN (with key, tabbed multi-source)
Newsnewsnews about AI, latest news on climate, headlines technologyMulti-source news headlines with thumbnailsOptional: currentsapi "...", newsdata "...", gnews "..."Google News RSS (free, always); Currents API, Newsdata.io, GNews (with keys, tabbed)
Music / Spotifymusicplay bohemian rhapsody, listen to radiohead, song despacito, Artist — TrackSpotify embed player with album info and alternative service linksOptional: spotify-client-id "..." + spotify-client-secret "..."Spotify Web API (with keys); links-only fallback without keys

Knowledge oracles (fire concurrently)

Three knowledge oracles fire simultaneously on every query and the best result wins. Priority order: Wikipedia > DDG Instant Answers > Wolfram Alpha.

PriorityOraclePermission keyAPI
0 (highest)Wikipedia InfoboxwikipediaWikipedia REST API (no key)
1DDG Instant Answersddg_iaDuckDuckGo IA API (no key)
2 (lowest)Wolfram AlphawolframWolfram Alpha Short Answers API (requires key)

Smart tab oracles

When smart_tab_oracles is enabled (default: on), certain oracles auto-fire on category-specific tabs even without explicit trigger words:

TabAuto-fired oracles
MapsMap + Weather (for the displayed location), IP Geolocation
MusicMusic (with forced “play” prefix), Radio
ScienceCalculator, Unit Converter
ITMy IP, DNS Lookup, CIDR Calculator, Base Converter
WeatherWeather (with “weather” prefix)

AI Research tools

When AI mode is enabled (lite or full), the AI research agent has access to these tools. These are not query-triggered oracles but tools the AI can invoke during research:

ToolDescription
fetchFetches and extracts text from URLs; supports depth=2 for same-domain crawling
psychoscrapeCitation-aware web scraper that extracts structured claims with source attribution
youtube_transcriptExtracts timestamped transcripts/captions from YouTube videos
luaSandboxed Lua execution environment with HTTP, JSON, math, and string libraries
sendShows intermediate findings to the user during research
etaUpdates the user-facing ETA countdown
frictionLogs improvement suggestions for the server developer
pinPins a result to the top of the search results
forgetRemoves a result from the search results
friend_searchSearches federated peer instances for additional results

API keys

Most engines scrape public pages and need no key. Engines that benefit from or require API keys:

ServiceConfig keyRequired?
Wolfram Alphaapi-keys { wolframalpha "..." }Optional; enables Wolfram oracle
DeepLapi-keys { deepl "..." }Optional; translation backend
Freesoundapi-keys { freesound "..." }Required for freesound engine
Spotifyapi-keys { spotify-client-id / spotify-client-secret }Optional; enables Spotify embed in music oracle
OpenWeatherMapapi-keys { openweathermap "..." }Optional; adds second weather source
Alpha Vantageapi-keys { alpha_vantage "..." }Optional; stock quotes
Twelve Dataapi-keys { twelvedata "..." }Optional; stock quotes
Finnhubapi-keys { finnhub "..." }Optional; stock quotes
AQICNapi-keys { aqicn "..." }Optional; adds second air quality source
Currents APIapi-keys { currentsapi "..." }Optional; news oracle source
Newsdata.ioapi-keys { newsdata "..." }Optional; news oracle source
GNewsapi-keys { gnews "..." }Optional; news oracle source
MW Collegiateapi-keys { mw_collegiate "..." }Optional; dictionary source
MW Thesaurusapi-keys { mw_thesaurus "..." }Optional; dictionary source (synonyms/antonyms)
MW Learner’sapi-keys { mw_learners "..." }Optional; dictionary source
MW Medicalapi-keys { mw_medical "..." }Optional; dictionary source
MW Spanishapi-keys { mw_spanish "..." }Optional; bilingual dictionary source
MW Schoolapi-keys { mw_school "..." }Optional; dictionary source
MW Elementaryapi-keys { mw_elementary "..." }Optional; dictionary source
MW Intermediateapi-keys { mw_intermediate "..." }Optional; dictionary source
MW Int. Thesaurusapi-keys { mw_intermediate_thesaurus "..." }Optional; dictionary source
Wordnikapi-keys { wordnik "..." }Optional; dictionary source
GiphyHardcoded public keyNone needed
The GuardianHardcoded test keyNone needed
PexelsPer-engine header in engines.kdlOptional

Adding a new engine

Add an engine block to data/engines.kdl:

engine "my_engine" {
    name "My Engine"
    categories "web"
    search-url "https://api.example.com/search?q={query}&page={page}"
    method "GET"
    result-type "json"
    results-path "results"
    title-path "title"
    url-path "url"
    content-path "snippet"
    page-size 20
    paging true
    first-page 1
}

Restart 4got. The engine registers automatically.

Template variables: {query}, {page}/{pageno}, {offset}, {lang}.

For HTML scraping, set result-type "html" and use CSS selectors (results-selector, title-selector, url-selector, content-selector).