{"id":13496000,"url":"https://github.com/jarun/ddgr","last_synced_at":"2025-04-23T20:56:23.876Z","repository":{"id":41243335,"uuid":"62723181","full_name":"jarun/ddgr","owner":"jarun","description":":duck: DuckDuckGo from the terminal","archived":false,"fork":false,"pushed_at":"2025-01-12T03:21:37.000Z","size":543,"stargazers_count":3051,"open_issues_count":4,"forks_count":142,"subscribers_count":58,"default_branch":"main","last_synced_at":"2025-04-23T20:55:50.530Z","etag":null,"topics":["cli","command-line","console","duckduckgo","duckduckgo-bang","privacy-aware","standalone","terminal","web-search"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jarun.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"jarun"}},"created_at":"2016-07-06T13:30:54.000Z","updated_at":"2025-04-22T18:31:19.000Z","dependencies_parsed_at":"2022-07-12T18:18:03.767Z","dependency_job_id":"ebc708d8-05c4-41fd-bc08-db450f29339e","html_url":"https://github.com/jarun/ddgr","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jarun%2Fddgr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jarun%2Fddgr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jarun%2Fddgr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jarun%2Fddgr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jarun","download_url":"https://codeload.github.com/jarun/ddgr/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250514767,"owners_count":21443208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","command-line","console","duckduckgo","duckduckgo-bang","privacy-aware","standalone","terminal","web-search"],"created_at":"2024-07-31T19:01:40.578Z","updated_at":"2025-04-23T20:56:23.850Z","avatar_url":"https://github.com/jarun.png","language":"Python","readme":"\u003ch1 align=\"center\"\u003eddgr\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/jarun/ddgr/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/release/jarun/ddgr.svg?maxAge=600\" alt=\"Latest release\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://repology.org/project/ddgr/versions\"\u003e\u003cimg src=\"https://repology.org/badge/tiny-repos/ddgr.svg?header=repos\" alt=\"Availability\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pypi.org/project/ddgr/\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/ddgr.svg?maxAge=600\" alt=\"PyPI\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://circleci.com/gh/jarun/workflows/ddgr\"\u003e\u003cimg src=\"https://img.shields.io/circleci/project/github/jarun/ddgr.svg\" alt=\"Build Status\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://en.wikipedia.org/wiki/Privacy-invasive_software\"\u003e\u003cimg src=\"https://img.shields.io/badge/privacy-✓-crimson\" alt=\"Privacy Awareness\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/jarun/ddgr/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-GPLv3-yellowgreen.svg?maxAge=2592000\" alt=\"License\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://asciinema.org/a/212198\"\u003e\u003cimg src=\"https://asciinema.org/a/212198.svg\" alt=\"Asciicast\" width=\"734\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n`ddgr` is a cmdline utility to search DuckDuckGo ([html version](https://html.duckduckgo.com/html/)) from the terminal. While [googler](https://github.com/jarun/googler) is extremely popular among cmdline users, in many forums the need of a similar utility for privacy-aware DuckDuckGo came up. [DuckDuckGo Bangs](https://duckduckgo.com/bang) are super-cool too! So here's `ddgr` for you!\n\nUnlike the web interface, you can specify the number of search results you would like to see per page. It's more convenient than skimming through 30-odd search results per page. The default interface is carefully designed to use minimum space without sacrificing readability.\n\nA big advantage of `ddgr` over `googler` is DuckDuckGo works over the Tor network.\n\n`ddgr` isn't affiliated to DuckDuckGo in any way.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=RMLTQ76JSXJ4Q\"\u003e\u003cimg src=\"https://img.shields.io/badge/donate-@PayPal-1eb0fc.svg\" alt=\"Donate via PayPal!\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n### Table of contents\n\n- [Features](#features)\n- [Installation](#installation)\n  - [Dependencies](#dependencies)\n  - [From a package manager](#from-a-package-manager)\n  - [From source](#from-source)\n  - [Running standalone](#running-standalone)\n  - [Shell completion](#shell-completion)\n- [Usage](#usage)\n  - [Cmdline options](#cmdline-options)\n  - [Configuration file](#configuration-file)\n  - [Text-based browser integration](#text-based-browser-integration)\n  - [Colors](#colors)\n- [Examples](#examples)\n- [Troubleshooting](#troubleshooting)\n- [Notes](#notes)\n- [Collaborators](#collaborators)\n- [In the Press](#in-the-press)\n\n### Features\n\n- Fast and clean; custom color\n- Designed for maximum readability at minimum space\n- Instant answers (supported by DDG html version)\n- Custom number of results per page\n- Navigation, browser integration\n- Search and option completion scripts (Bash, Fish, Zsh)\n- DuckDuckGo Bangs (along with completion)\n- Open the first result in browser (I'm Feeling Ducky)\n- REPL for continuous searches\n- Keywords (e.g. `filetype:mime`, `site:somesite.com`)\n- Limit search by time, specify region, disable safe search\n- HTTPS proxy support, optionally disable User Agent\n- Do Not Track set by default\n- Supports custom url handler script or cmdline utility\n- Privacy-aware (no unconfirmed user data collection)\n- Thoroughly documented, man page with examples\n- Minimal dependencies\n\n### Installation\n\n#### Dependencies\n\n`ddgr` requires Python 3.8 or later. Only the latest patch release of each minor version is supported.\n\nTo copy url to clipboard at the omniprompt, `ddgr` looks for `wl-copy` (only under Wayland) or `xsel` or `xclip` or `termux-clipboard-set` (in the same order) on Linux, `pbcopy` (default installed) on OS X, `clip` (default installed) on Windows and `clipboard` (default installed) on Haiku. It also supports GNU Screen and tmux copy-paste buffers in the absence of X11.\n\nNote: v1.1 and below require the Python3 `requests` library to make HTTPS requests. This dependency is removed in the later releases.\n\n#### From a package manager\n\nInstall `ddgr` from your package manager. If the version available is dated try an alternative installation method.\n\n\u003cdetails\u003e\u003csummary\u003ePackaging status (expand)\u003c/summary\u003e\n\u003cp\u003e\n\u003cbr\u003e\n\u003ca href=\"https://repology.org/project/ddgr/versions\"\u003e\u003cimg src=\"https://repology.org/badge/vertical-allrepos/ddgr.svg\" alt=\"Packaging status\"\u003e\u003c/a\u003e\n\u003c/p\u003e\nUnlisted packagers:\n\u003cp\u003e\n\u003cbr\u003e\n● \u003ca href=\"https://github.com/shinokada/awesome\"\u003eAwesome\u003c/a\u003e (\u003ccode\u003eawesome -install jarun/ddgr\u003c/code\u003e)\u003cbr\u003e\n● \u003ca href=\"https://pypi.org/project/ddgr/\"\u003ePyPI\u003c/a\u003e (\u003ccode\u003epip3 install ddgr\u003c/code\u003e)\u003cbr\u003e\n● \u003ca href=\"https://snapcraft.io/ddgr/\"\u003eSnap Store\u003c/a\u003e (\u003ccode\u003esnap install ddgr\u003c/code\u003e)\u003cbr\u003e\n● \u003ca href=\"http://codex.sourcemage.org/test/utils/ddgr/\"\u003eSource Mage\u003c/a\u003e (\u003ccode\u003ecast ddgr\u003c/code\u003e)\u003cbr\u003e\n● Termux (\u003ccode\u003epip3 install ddgr\u003c/code\u003e)\u003cbr\u003e\n\u003c/p\u003e\n\u003c/details\u003e\n\n#### From source\n\nIf you have git installed, clone this repository. Otherwise download the [latest stable release](https://github.com/jarun/ddgr/releases/latest) or [development version](https://github.com/jarun/ddgr/archive/master.zip).\n\nTo install to the default location (`/usr/local`):\n\n    $ sudo make install\n\nTo remove `ddgr` and associated docs, run\n\n    $ sudo make uninstall\n\n`PREFIX` is supported, in case you want to install to a different location.\n\n#### Running standalone\n\n`ddgr` is a standalone executable (and can run even on environments like Termux). From the containing directory:\n\n    $ ./ddgr\n\n#### Shell completion\n\nSearch keyword and option completion scripts for Bash, Fish and Zsh can be found in respective subdirectories of [`auto-completion/`](auto-completion). Please refer to your shell's manual for installation instructions.\n\n### Usage\n\n#### Cmdline options\n\n```\nusage: ddgr [-h] [-n N] [-r REG] [--colorize [{auto,always,never}]] [-C]\n            [--colors COLORS] [-j] [-t SPAN] [-w SITE] [-x] [-p URI]\n            [--unsafe] [--noua] [--json] [--gb] [--np] [--url-handler UTIL]\n            [--show-browser-logs] [-v] [-d]\n            [KEYWORD [KEYWORD ...]]\n\nDuckDuckGo from the terminal.\n\npositional arguments:\n  KEYWORD               search keywords\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -n N, --num N         show N (0\u003c=N\u003c=25) results per page (default 10); N=0\n                        shows actual number of results fetched per page\n  -r REG, --reg REG     region-specific search e.g. 'us-en' for US (default);\n                        visit https://duckduckgo.com/params\n  --colorize [{auto,always,never}]\n                        whether to colorize output; defaults to 'auto', which\n                        enables color when stdout is a tty device; using\n                        --colorize without an argument is equivalent to\n                        --colorize=always\n  -C, --nocolor         equivalent to --colorize=never\n  --colors COLORS       set output colors (see man page for details)\n  -j, --ducky           open the first result in a web browser; implies --np\n  -t SPAN, --time SPAN  time limit search [d (1 day), w (1 wk), m (1 month), y (1 year)]\n  -w SITE, --site SITE  search sites using DuckDuckGo\n  -x, --expand          Show complete url in search results\n  -p URI, --proxy URI   tunnel traffic through an HTTPS proxy; URI format:\n                        [http[s]://][user:pwd@]host[:port]\n  --unsafe              disable safe search\n  --noua                disable user agent\n  --json                output in JSON format; implies --np\n  --gb, --gui-browser   open a bang directly in gui browser\n  --np, --noprompt      perform search and exit, do not prompt\n  --rev, --reverse      list entries in reversed order\n  --url-handler UTIL    custom script or cli utility to open results\n  --show-browser-logs   do not suppress browser output (stdout and stderr)\n  -v, --version         show program's version number and exit\n  -d, --debug           enable debugging\n\nomniprompt keys:\n  n, p, f               fetch the next, prev or first set of search results\n  index                 open the result corresponding to index in browser\n  o [index|range|a ...] open space-separated result indices, ranges or all\n  O [index|range|a ...] like key 'o', but try to open in a GUI browser\n  d keywords            new DDG search for 'keywords' with original options\n                        should be used to search omniprompt keys and indices\n  x                     toggle url expansion\n  c index               copy url to clipboard\n  q, ^D, double Enter   exit ddgr\n  ?                     show omniprompt help\n  *                     other inputs are considered as new search keywords\n```\n\n#### Configuration file\n\n`ddgr` doesn't have any! Use aliases, environment variables and auto-completion scripts.\n\n#### Text-based browser integration\n\n`ddgr` works out of the box with several text-based browsers if the `BROWSER` environment variable is set. For instance,\n\n    $ export BROWSER=w3m\n\nor for one-time use,\n\n    $ BROWSER=w3m ddgr query\n\nDue to certain graphical browsers spewing messages to the console, `ddgr` suppresses browser output by default unless `BROWSER` is set to one of the known text-based browsers: currently `elinks`, `links`, `lynx`, `w3m` or `www-browser`. If you use a different text-based browser, you will need to explicitly enable browser output with the `--show-browser-logs` option. If you believe your browser is popular enough, please submit an issue or pull request and we will consider whitelisting it. See the man page for more details on `--show-browser-logs`.\n\nIf you need to use a GUI browser with `BROWSER` set, use the omniprompt key `O`. `ddgr` will try to ignore text-based browsers and invoke a GUI browser. Browser logs are always suppressed with `O`.\n\n#### Colors\n\nThe color configuration is similar to that of [`googler` colors](https://github.com/jarun/googler#colors). The default color string is `oCdgxy`. `ddgr` recognizes the environment variable `DDGR_COLORS`. Details are available in the `ddgr` man page.\n\n### Examples\n\n1. DuckDuckGo **hello world**:\n\n       $ ddgr hello world\n2. **I'm Feeling Ducky** search:\n\n       $ ddgr -j lucky ducks\n3. **DuckDuckGo Bang** search `hello world` in Wikipedia:\n\n       $ ddgr !w hello world\n       $ ddgr \\!w hello world // in (some) shells (e.g. bash, zsh, tcsh) '!' character need to be escaped\n    Bangs work at the omniprompt too. To look up bangs, visit https://duckduckgo.com/bang?#bangs-list.\n4. **Bang alias** to fire from the cmdline, open results in a GUI browser and exit:\n\n       alias bang='ddgr --gb --np'\n       $ bang !w hello world\n       $ bang \\!w hello world // in (some) shells (e.g. bash, zsh, tcsh) '!' character need to be escaped\n5. **Website specific** search:\n\n       $ ddgr -w amazon.com digital camera\n    Site specific search continues at omniprompt.\n6. Search for a **specific file type**:\n\n       $ ddgr instrumental filetype:mp3\n7. Fetch results on IPL cricket from **India** in **English**:\n\n       $ ddgr -r in-en IPL cricket\n    To find your region parameter token visit https://duckduckgo.com/params.\n8. Search **quoted text**:\n\n       $ ddgr it\\'s a \\\"beautiful world\\\" in spring\n9. Show **complete urls** in search results (instead of only domain name):\n\n       $ ddgr -x ddgr\n10. Use a **custom color scheme**, e.g., one warm color scheme designed for Solarized Dark:\n\n        $ ddgr --colors bjdxxy hello world\n        $ DDGR_COLORS=bjdxxy ddgr hello world\n11. Tunnel traffic through an **HTTPS proxy**, e.g., a local Privoxy instance listening on port 8118:\n\n        $ ddgr --proxy localhost:8118 hello world\n    By default the environment variable `https_proxy` (or `HTTPS_PROXY`) is used, if defined.\n12. Look up `n`, `p`, `o`, `O`, `q`, `d keywords` or a result index at the **omniprompt**: as the omniprompt recognizes these keys or index strings as commands, you need to prefix them with `d`, e.g.,\n\n        d n\n        d g keywords\n        d 1\n\n### Troubleshooting\n\n1. Some users have reported problems with a colored omniprompt (refer to issue [#40](https://github.com/jarun/ddgr/issues/40)) with iTerm2 on OS X. To force a plain omniprompt:\n\n       export DISABLE_PROMPT_COLOR=1\n\n### Notes\n\n1. The Albert Launcher python plugins repo\n([awesome-albert-plugins](https://github.com/bergercookie/awesome-albert-plugins))\nincludes suggestions-enabled search plugins for a variety of websites using\n`ddgr`. Refer to the latter for demos and usage instructions.\n\n### Collaborators\n\n- [Arun Prakash Jana](https://github.com/jarun)\n- [Johnathan Jenkins](https://github.com/shaggytwodope)\n- [SZ Lin](https://github.com/szlin)\n- [Alex Gontar](https://github.com/mosegontar)\n\nCopyright © 2016-2025 [Arun Prakash Jana](mailto:engineerarun@gmail.com)\n\n### In the Press\n\n- [Fossbytes](https://fossbytes.com/search-duckduckgo-from-terminal-ddgr/)\n- [Hacker News](https://news.ycombinator.com/item?id=19606101)\n- [Information Security Squad](http://itsecforu.ru/2017/11/21/%D0%BA%D0%B0%D0%BA-%D0%B8%D1%81%D0%BA%D0%B0%D1%82%D1%8C-%D0%B2-duckduckgo-%D0%B8%D0%B7-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8-linux/)\n- [LinOxide](https://linoxide.com/tools/search-duckduckgo-command-line/)\n- [OMG! Ubuntu!](http://www.omgubuntu.co.uk/2017/11/duck-duck-go-terminal-app)\n- [Tecmint](https://www.tecmint.com/search-duckduckgo-from-linux-terminal/)\n","funding_links":["https://github.com/sponsors/jarun","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=RMLTQ76JSXJ4Q"],"categories":["Python","Plugins","Command Line Utilities","Searching","Command-Line Productivity","cli","[](#table-of-contents) Table of contents","Tools and Plugins","\u003ca name=\"online\"\u003e\u003c/a\u003eOnline search and resources","terminal"],"sub_categories":["Internet","[](#filesharing-search-engines)Filesharing Search Engines","Windows"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjarun%2Fddgr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjarun%2Fddgr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjarun%2Fddgr/lists"}