NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2068 most downloaded on PyPI
Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine.
Last release 1 years ago
06 Jul 2025
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
159 releases · first in 2021
One column per quarter.
bump pyreqwest_impersonate to 0.4.6
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.1...v6.1.2
* text(): bugfix region param * README: update Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.0...v6.1.1
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.0...v6.1.1
* Implement AI chat function Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.0.0...v6.1.0
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.0.0...v6.1.0
v6.0.0 Migrate to pyreqwest_impersonate, AsyncDDGS: all functions with a by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/216
pyreqwest_impersonate, AsyncDDGS: all functions with a by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/216Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.3.1...v6.0.0
Mypy: add # type ignore to bypass errors
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.3.0...v5.3.1
Version with httpx * Update headers list * Update requirements Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.3.0b4...v5.3.1b1
Version with httpx
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.3.0b4...v5.3.1b1
add proxy, deprecate proxies parameter
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.2.2...v5.3.0
Handling exceptions more gracefully when using asyncio.gather()
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.3.0b3...v5.3.0b4
AsyncDDGS, DDGS: bugfix instance closing
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.3.0b2...v5.3.0b3
Migrate from curl_cffi to httpx
curl_cffi to httpxorjson optionalFull Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.2.2...v5.3.0b2
This is a special release that uses the `httpx` library
This is a special release that uses the httpx library
[BUGFIX] Improved instance closing, set stream to False when making a request
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.2.1...v5.2.2
[[BUGFIX] AsyncDDGS._text_api(): change payload to prevent blocking]
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.2.0...v5.2.1
Improve exception handling and add RatelimitException and TimeoutException by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/201
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.1.0...v5.2.0
BUGFIX: _text_api() - update request payload (api blocks requests)
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.0...v5.1.0
[BREAKING CHANGES] DDGS, AsyncDDGS : all functions are now not generators, but return a list of dictionaries
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.5.0...v5.0
AsyncDDGS, DDGS: remove max_clients parameter (unclear behavior).
max_clients parameter (unclear behavior).concurrency parameter to limit the number of concurrent requests (using asyncio.Semaphore).Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v5.0b...v5.0b1
[BRAKING CHANGES!!!] DDGS, AsyncDDGS : all functions are now not generators, but return results as a list of dictionaries,
max_clients parameter to regulate the number of concurrent HTTP clients.with block).Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.5.0...v5.0b
remove nest-asyncio, run new event loop in thread to bypass 'loop already running',
nest-asyncio, run new event loop in thread to bypass 'loop already running',AsyncDDGS.translate() - recode to AsyncGenerator, DDGS.translate() - to Generator,v4.5.0 by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/189
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.4.3...v4.5.0
Bugfix in maps(): no result was returned if only the zip parameter was used
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.4.2...v4.4.3
DDGS: using asyncio.run instead of manipulating the loops by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/186
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.4.1...v4.4.2
DDGS: recode using asyncio loop
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.4...v4.4.1
Bugfix: add nest_asyncio to run DDGS in an async loop by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/182
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.3.2...v4.4
CLI bugfix: add colors to print maps result by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/179
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.3...v4.3.1
DDGS - remove code, wrap AsyncDDGS by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/167
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v4.2...v4.3
Removed deprecated functions: ddg, ddg_answers, ddg_images, ddg_maps, ddg_news, ddg_suggestions, ddg_translate, ddg_videos,
_get_url(): bugfix exception message,
random browser in each class instance (headers are set automatically),
migrate from httpx to curl_cffi
bugfix in images(): httpx.Client(verify=False) to get around an unexpected error in httpx
text(backend="api"): extract json from html,
text(backend="html"/"lite"): removed ad results,
raise ApiException if resp.status_code==403,
BUGFIX text(): skip resp if resp.status_code==202,
BUGFIX in images() function: add "Accept" parameter to requests,
Nothing published for this version
BUGFIX - fixing the region parameter in the text() function.
small improvements to the code,
def _text_api(): update payload,
CLI: download_file - bugfix exceptions,
bugfix in DDGS.text(backend='lite'): removed duplicated results
proxy and threads parameters to ddgs text and ddgs imagesdel sleep() in text(backend='api') and images()
normalize urls (unquote and replace spaces with +),
update USERAGENTS (only the most popular ones are left),
1) add brotli dependency, 2) update USERAGENTS.
text(backend="lite") - normalize title and body
Migrate from requests to httpx
Migrate from requests to httpx
DDGS().text() - add new parameter backend: api - collect data from duckduckgo.com, html - collect data from html.duckduckgo.com, lite - collect data l
DDGS().text() - bugfix in next_page finding
DDGS().text() - bugfix in next_page finding
Nothing published for this version
get_url() will raise an exception after unsuccessful retries instead of returning None,
Bugfix in useragent: remove anti_useragent
Bugfix in useragent: remove anti_useragent
Sleep 1 sec if HTTPError to prevent ip blocking
Remove '=' from f-strings for python 3.7 compatibility
Remove '=' from f-strings for python 3.7 compatibility
BUGFIX in _get_vqd(). Replace ' by " https://github.com/deedy5/duckduckgo_search/commit/56908f82c7ea5b079ade64842c59f60339afef5e
' by " https://github.com/deedy5/duckduckgo_search/commit/56908f82c7ea5b079ade64842c59f60339afef5erefresh_vqd if '506.js' in resp.url
refresh_vqd if '506.js' in resp.url
don't close VQD_CACHE after each access operation
store the cache in the module directory by default
store the cache in the module directory by default
1) save vqd's to vqd_cache file, 2) add diskcache to requirements.
Folder name error when using site:
Folder name error when using site:
Your coding agent can read these notes before it upgrades. Set up the MCP server →