NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #1353 by repository stars
Last release 9 days ago
28 Sep 2026
Ships unpredictably
gaps range from 9 days to 1.3 years
Most releases are documented
notes for 11 of 13 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
21 releases · first in 2023
One column per quarter.
Nothing published for this version
Reliability release. The main theme is honest error reporting: engines now tell you why a search returned nothing instead of handing back an empty lis
Reliability release. The main theme is honest error reporting: engines now tell you why a search returned nothing instead of handing back an empty list. Plus batch URL extraction and a rebuilt browser fingerprinting layer.
Engines no longer silently return empty results. Captcha pages, soft blocks and genuine "no results" pages are now classified separately and surfaced as captcha_detected, blocked or empty_result error codes. The detection is shared between the browser and raw HTTP paths, so /<engine>/search and /<engine>/parse behave the same across Google, Bing, DuckDuckGo, Yandex, Baidu and Ecosia. Google's /sorry/ interstitial is detected explicitly. This addresses the confusing empty responses reported in #36 and #33.
POST /extract/batch - extract content from up to 20 URLs in one call, returning the {page_content, metadata} array shape Open WebUI's external web loader expects. A URL that fails validation or extraction gets metadata.error and empty content instead of failing the whole batch; each item carries its own took_ms. Contributed by @AIWintermuteAI in #39.
DuckDuckGo pagination fixed. Non-zero offsets returned wrong results because DDG's pagination doesn't work off URL params - the engine now drives the "More results" button. Fixes #40, contributed by @subediparas5 in #41.
Browser fingerprinting moved to native CDP. Dropped the injected patch.js and localized profile files in favor of CDP-level overrides, which is both faster and less detectable. Docker image now ships an updated Chrome.
err_tunnel_connection_failed is now treated as a retryable proxy network errorblock_resources and block_trackers config options to skip heavy subresources in browser modeX-Proxy-Attempts and X-Use-Profile added to the default CORS allow-listdocker-compose.yaml now mounts config.yaml by default, with proxy config examples/extract/batch documented and exempted from the default request timeoutproxies.allow_request_proxy_url now defaults to true. If you expose OpenSERP publicly and don't want callers supplying their own proxy URL, set it back to false.200 with an empty array may now return an error with captcha_detected / blocked. Handle those codes if your client treats empty as success.Thanks to @AIWintermuteAI and @subediparas5 - both first-time contributors.
Full Changelog: v0.8.6...v0.8.12
Added structured CLI search output via openserp search <engine> <query> .
Full diff: v0.8.3...v0.8.6
openserp search <engine> <query>.
json, markdown, text, and ndjson with --format.--limit, --lang, --region, --start, --site, --file, --extract, --features, --full, and --search-timeout.X-Proxy-Attempts response header for proxy retry visibility.extract_top with extract=N.tls-client with Chrome-like TLS fingerprints, Client Hints, and header ordering.RankState.features=false now consistently disables feature extraction.app.block_resources values no longer cause request panics.serp_features.features=false is now respected by Baidu, Ecosia, Google, and Yandex raw search.feat(cli): clean search, add extract/format flags; harden engines & p…
feat(cli): clean search, add extract/format flags; harden engines & p…
Added URL content extraction via GET /extract and POST /extract .
Full diff: v0.7.15...v0.8.3
GET /extract and POST /extract.
json, markdown, text, and ndjson responses.auto, fast, and rendered.extract=trueextract_topextract_modemin_runesllms.txt / llms-full.txt probing for root URL extraction when enabled.docs/ADDING_AN_ENGINE.mddocs/GOOD_FIRST_ISSUES.mddocs/CONTRIBUTING.mdMakefile targets for build, test, integration tests, lint, run, and fmt.0.8.3.2.2.0.limit is now 10.features now defaults to true, enabling SERP feature extraction unless explicitly disabled.karust/openserp:latest image.golangci-lint and uses the repository lint config.ErrSearchTimeout instead of a successful empty result.extract region/UULE resolution into dependency-free core/region subpa…
extract region/UULE resolution into dependency-free core/region subpa…
…ckage
This release larger API refresh: Ecosia support, v2.1 response envelopes, HTML parsing endpoints, region targeting, faster mega search modes, and more
This release larger API refresh: Ecosia support, v2.1 response envelopes, HTML parsing endpoints, region targeting, faster mega search modes, and more observable browser/proxy behavior.
Added Ecosia as a supported search engine.
/ecosia/search and /ecosia/image.Added HTML SERP parser endpoints.
POST /{engine}/parse for parsing raw SERP HTML into the normalized OpenSERP response envelope.Introduced the v2.1 search response shape.
meta.version is now 2.1.type values such as organic, ad, answer_box, people_also_ask, and related SERP modules.position.absolute preserves the mixed on-page SERP position.meta.engines_responded and meta.engine_errors are available for multi-engine requests.Added region targeting.
region query parameter is accepted on search and image endpoints.Added mega search execution modes.
mode=balanced keeps the existing parallel aggregation behavior and remains the default.mode=any tries engines sequentially until the first successful response.mode=fast chooses the fastest available engine based on circuit-breaker latency history.dedupe and merge controls tune aggregation behavior.app.mega_timeout bounds total mega request time and returns partial results when slower engines miss the deadline.Added response headers:
X-Network-Bytes reports counted network bytes for the request.X-Browser-Profile-Id reports the browser profile IDs used during browser-mode requests.Added request header:
X-Use-Profile lets debug/controlled requests force a known browser profile ID.Error responses now include request_id when available.
Search errors now expose more precise machine-readable codes, including:
all_engines_failedcircuit_openrequest_timeoutrequest_canceledMega search failures now include sanitized per-engine error details in meta.engine_errors.
The public JSON response schema changed from v1 to v2.1.
is_ad was removed; use type == "ad" instead.position.page and position.on_page were removed; use pagination plus position.absolute.domain_info booleans such as is_gov, is_edu, and is_social were replaced by domain_info.category.classification fields are now omitted when empty.limit now means the number of organic results requested. Ads may be returned in addition to the requested organic limit.
Query parameters are now trimmed before validation and cache key generation, so whitespace-only queries are rejected consistently and equivalent query inputs share cache entries.
Mega search cache keys now include mode, dedupe, merge, region, and normalized engine lists. mode=fast responses are not cached.
X-Use-Profile validation for forced profile selection.2.1.0.app.mega_timeout, Ecosia engine settings, and current rate-limit defaults.Full Changelog: v0.7.2...v0.7.13
New API response envelope for search and image endpoints.
json, markdown, text, ndjson.Added JSON response envelopes with:
querymetaresultspaginationengines_respondedengines_failedAdded normalized Result model with:
Added dedicated image response envelope and image result structure.
Added result clustering for /mega/search, grouping same URLs across engines.
Added Bing redirect URL unwrapping before result hashing.
Accept-Language.1..100.Added GitHub CI workflow.
Added integration workflow.
Added integration tests for:
Added sanitized real SERP HTML fixtures.
Added raw HTML parser tests.
Added server endpoint coverage.
Added browser, profile, captcha, middleware, retry, proxy, locale, and response tests.
chromedp/headless.results instead of treating the whole response as an array.reason values.limit is now validated and must be between 1 and 100.Full Changelog: v0.6.0...v0.7.2
This release focuses on server reliability, proxy control, and deployment readiness.
This release focuses on server reliability, proxy control, and deployment readiness.
/health endpoint for lightweight service checks.X-Use-Proxy header./stats, /stats/cache, /stats/proxy, and /stats/cb.filter support and broader start pagination support.proxies.global, proxies.entries, and per-engine proxy tags.config.yaml to use safe direct-traffic defaults instead of local proxy test endpoints.docker-compose.yaml environment keys to the current server.* config names.--config loading so a provided config file path is actually used.0.6.0 implementation was reviewed, reworked, debugged, and adapted further in the main codebase to match OpenSERP's current project vision and configuration model.Full Changelog: v0.5.4...v0.6.0
Fix duckduck date and limit filtering.
New Megasearch + Megaimage APIs
v0.4.1 Compare # Choose a tag to compare
v0.4.1
Compare
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →