NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2186 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.
### This package (duckduckgo_search) has been renamed to ddgs! Use pip install ddgs instead. Full Changelog: https://github.com/deedy5/duckduckgo_sear
duckduckgo_search) has been renamed to ddgs! Use pip install ddgs instead.Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v8.1.0...v8.1.1
Add bing backend by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/320
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v8.0.5...v8.1.0
Update region parameter by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/315
region parameter by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/315Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v8.0.4...v8.0.5
Fix images ratelimit by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/310
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v8.0.3...v8.0.4
Remove http2_only Client parameter by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/308
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v8.0.2...v8.0.3
fix(DDGS.text): update headers by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/305
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v8.0.1...v8.0.2
* refactor: remove dead code * refactor: remove dead code * refactor: bump to primp=0.15.0 Full Changelog: https://github.com/deedy5/duckduckgo_search
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v8.0.0...v8.0.1
fix(typing): fix typing in cli and tests
Chat moved to duckai package.
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.5...v8.0.0
* fix(chat): add _chat_xfe Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.4...v7.5.5
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.4...v7.5.5
* fix(chat): x-vqd-hash-1 = "" Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.3...v7.5.4
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.3...v7.5.4
DDGS.chat: bugfix by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/294
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.2...v7.5.3
fix(temp): don't set Client.headers
fix(temp): don't set Client.headers
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.1...v7.5.2
Bugfix DDGS.text() payload by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/291
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.5.0...v7.5.1
tests: sleep 2 seconds between tests
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.3.2...v7.5.0
Chat: bugfix ConversationLimitException by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/288
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.4.4...v7.4.5
DDGS.chat: add mistral-small-3 by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/285
mistral-small-3 by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/285Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.4.3...v7.4.4
* feat: patch httpcore * feat: improve ssl_context Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.4.2...v7.4.3
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.4.2...v7.4.3
Use httpx for requests by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/282
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.3.2...v7.4.2
DDGS.chat: add llama-3.3-70b model by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/281
llama-3.3-70b model by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/281Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.3.1...v7.3.2
DDGS.chat: add o3-mini model by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/280
o3-mini model by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/280Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.3.0...v7.3.1
clarify exceptions in README by @vpoulailleau in https://github.com/deedy5/duckduckgo_search/pull/275
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.2.1...v7.3.0
DDGS._impersonates: add "firefox_128"
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.2.0...v7.2.1
DDGS._impersonates: add "firefox_117"
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.1.1...v7.2.0
DDGS.text: deprecate backend='api'
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.1.0...v7.1.1
DDGS._impersonates: delete okhttp*
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.0.2...v7.1.0
* Bump primp to v0.9.2 * DDGS._impersonates: update Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.0.1...v7.0.2
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v7.0.1...v7.0.2
[simplify]: remove AsyncDDGS, remove answers, maps, suggestions, translate; [text]: remove multithreading by @deedy5 in https://github.com/deedy5/duck
answers, maps, suggestions, translate; [text]: remove multithreading by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/268Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.4.2...v7.0.1
utils: _text_extract_json() bugfix
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.7...v6.4.2
added armv7 compatibility: Bump primp to v0.8.1
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.6...v6.3.7
DDGS._impersonates: add "chrome_131"
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.5...v6.3.6
CLI: 1)-dd to specify custom download directory, 2) -o can now set full filename by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/263
-dd to specify custom download directory, 2) -o can now set full filename by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/263Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.4...v6.3.5
CLI: images license parameter - add ShareCommercially
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.3...v6.3.4
DDGS._impersonates: add "chrome_130"
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.2...v6.3.3
Add verify parameter to skip SSL verification when making the requests by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/258
verify parameter to skip SSL verification when making the requests by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/258Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.1...v6.3.2
* DDGS._impersonates: updated * primp.Client: verify=True * primp: bump version to v0.6.4 Full Changelog: https://github.com/deedy5/duckduckgo_search/
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.3.0...v6.3.1
DDGS._get_vqd(): use "GET" request by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/255
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.13...v6.3.0
DDGS._impersonates: add chrome_129, safari_18, safari_ipad_18
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.12...v6.2.13
[[utils] bugfix _normalize_url() - replace space after unquote]
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.10...v6.2.12
[[utils] bugfix _normalize_url() - replace space after unquote]
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.8b1...v6.2.11b1
* Bump primp to 0.6.1 Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.9...v6.2.10
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.9...v6.2.10
DDGS._impersonates: add "safari_17.0"
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.8...v6.2.9
add timeout parameter to achat() by @arabianq in https://github.com/deedy5/duckduckgo_search/pull/243
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.7...v6.2.8
### Special version with HTTPX * use httpx for requests Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.8...v6.2.8b1
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.8...v6.2.8b1
chat: update "llama-3-70b" to "llama-3.1-70b"
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.6...v6.2.7
Changing the gpt-3.5 model to gpt-4o-mini by @mrgick in https://github.com/deedy5/duckduckgo_search/pull/242
gpt-3.5 model to gpt-4o-mini by @mrgick in https://github.com/deedy5/duckduckgo_search/pull/242Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.5...v6.2.6
bump primp to v0.5.5 - Update requirements
primp to v0.5.5 - Update requirementsFull Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.4...v6.2.5
rename pyreqwest_impersonate to primp
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.3...v6.2.4
chat(): bugfix token counting, rename _chat_conversation_size to _chat_tokens_count
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.2...v6.2.3
Bump `pyreqwest_impersonate` to v0.5.3, update requirements
pyreqwest_impersonate to v0.5.3, update requirementsConversationLimitException,_chat_conversation_size (show in CLI as contextsize)Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.1...v6.2.2
DDGS._impersonates: add "safari_17.5"
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.2.0...v6.2.1
Update requirements - bump `pyreqwest_impersonate` to v0.5.0
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.12...v6.2.0
chat(): bugfix (remove superfluous backslashes) by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/238
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.11...v6.1.12
Chat improving (parse response message without json.loads, add timeout parameter) by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/235
timeout parameter) by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/235Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.9...v6.1.11
Remove orjson from dependencies (tests show that the embedded json module is faster)
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.8...v6.1.9
CLI: chat() - rename save to load, remove click.wrap_text()
-p tb as an alias for socks5://127.0.0.1:9150Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.7...v6.1.8
CLI: chat(): add multiline and model options
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.6...v6.1.7
chat(): add models "llama-3-70b" add "mixtral-8x7b" by @deedy5 in https://github.com/deedy5/duckduckgo_search/pull/226
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.5...v6.1.6
text(): bugfix region parameter
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.4...v6.1.5
text(): max_results cutoff 2000
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.3...v6.1.4
Bump pyreqwest_impersonate to v0.4.7
Full Changelog: https://github.com/deedy5/duckduckgo_search/compare/v6.1.2...v6.1.3
Your coding agent can read these notes before it upgrades. Set up the MCP server →