Hello All!
I know there are many great Ideas and (unfortunately) some bugs that have been lying dormant for a little bit now.
While we give Ben a much needed break, I've done some refactoring, updating, bug squashing, and new feature implementation.
Some of the most notable changes are:
- Migration from Python Requests to httpx. This comes with significant speed improvements and other features useful for the long term stability of the project
- Added support for the long requested parsable JSON results
- Fixed (hopefully) some bugs with alt links
- Refactored, updated, and fixed a number of outstanding security issues
Since I'm only one person, I'm only able to test what I can, so looking for feedback from community tests to make sure all these changes didn't actually break something in the process that I may have forgotten to test. Please test and provide your feedback!
Full Release notes below:
Whoogle Search — Beta Release (since v0.9.4)
- Version base: v0.9.4 → beta (
be83605
) - Changes: 30 files, +1074/−220
- Full Changelog:
v0.9.4...beta
Highlights
- HTTPX migration with optional HTTP/2 (toggle via
WHOOGLE_HTTP2
) - JSON search output:
?format=json
orAccept: application/json
- Optional static bundling:
WHOOGLE_BUNDLE_STATIC=1
servesbundle.css
/bundle.js
- Tor/proxy refactor and availability detection
- Global autocomplete toggle via
WHOOGLE_AUTOCOMPLETE
What’s Changed
- be83605 Update deps; context-managed file I/O; BeautifulSoup
string
usage (Don-Swanson) - ffdeeb5 Autocomplete env toggle; HTTP client reconnection; link extraction fix (Don-Swanson)
- 99c7c7b Config context fixes; tests updated; search fallback handling (Don-Swanson)
- 7f80eb1 feat(beta): httpx, Tor/proxy refactor, JSON results, optional bundling, HTTP/2 toggle, cleanup (Don-Swanson)
- 418d9df Merge dependabot: jinja2-3.1.6
- 3733d87 Merge dependabot: cryptography-45.0.7
New Environment Variables
Name | Default | Description |
---|---|---|
WHOOGLE_HTTP2
| 1
| Enable HTTP/2 for upstream httpx requests. Set 0 for HTTP/1.1.
|
WHOOGLE_BUNDLE_STATIC
| 0
| Serve bundled CSS/JS (bundle.css , bundle.js ) with cache-busting.
|
WHOOGLE_AUTOCOMPLETE
| 1
| Toggle autocomplete/search suggestions globally. |
Potentially Breaking Changes
- Upstream client switched to
httpx
; behavior differences fromrequests
possible. If issues arise, setWHOOGLE_HTTP2=0
.
Endpoint and Behavior Notes
- JSON results via
/{search}?q=...&format=json
or headerAccept: application/json
.- Returns 503 JSON when CAPTCHA-like content is detected.
- Returns 303 for invalid queries, honoring JSON
Accept
.
- Bundled css assets are auto-included by templates when
WHOOGLE_BUNDLE_STATIC=1
.
Dependency Changes
- Added:
httpx[http2,socks]==0.28.1
,httpcore>=1.0.9
,h11>=0.16.0
,cachetools==6.2.0
- Removed:
requests
,urllib3
,PySocks
(replaced byhttpx
stack) - Upgraded (highlights):
cryptography
(→ 46.0.1 non-armv7l),Jinja2
(→ 3.1.6),MarkupSafe
(→ 3.0.2),beautifulsoup4
(→ 4.13.5),cssutils
(→ 2.11.1),idna
(→ 3.10),pluggy
(→ 1.6.0),pycodestyle
(→ 2.14.0),pyOpenSSL
(→ 25.3.0 non-armv7l),soupsieve
(→ 2.8),validators
(→ 0.35.0),waitress
(→ 3.0.2),wcwidth
(→ 0.2.14),python-dotenv
(→ 1.1.1),certifi
(→ 2025.8.3),cffi
(→ 2.0.0),click
(→ 8.3.0),more-itertools
(→ 10.8.0),packaging
(→ 25.0),pyparsing
(→ 3.2.5) - Compatibility:
cryptography==3.3.2
retained forarmv7l
(for now)
Upgrade Tips
- Force HTTP/1.1 if needed: set
WHOOGLE_HTTP2=0
- Enable css bundling: set
WHOOGLE_BUNDLE_STATIC=1
and restart - Disable suggestions: set
WHOOGLE_AUTOCOMPLETE=0