{"description":"Searches Docker Hub container images by name or keyword: repository name, short description, star count, pull count, whether it is an official image, and link. First page of results (up to 25). Returns an empty list when nothing matches.","effect":"read","id":"hub.docker.com/search-packages","keywords":["docker","docker hub","dockerhub","container","containers","image","images","registry","hub.docker.com","devops","postgres","nginx","redis"],"output":{"schema":{"properties":{"images":{"items":{"properties":{"description":{"type":["string","null"]},"name":{"description":"Repository name; includes the namespace for non-official images, e.g. 'bitnami/postgresql'","type":"string"},"official":{"type":"boolean"},"pulls":{"description":"Total pulls","type":"integer"},"stars":{"type":"integer"},"url":{"type":"string"}},"required":["name","url"],"type":"object"},"type":"array"},"query":{"type":"string"}},"required":["query","images"],"type":"object"},"value":"{query: params.query, images: steps.search.repos[].{name: repo_name, description: short_description || `null`, stars: star_count || `0`, pulls: pull_count || `0`, official: is_official == `true`, url: (is_official && join('', ['https://hub.docker.com/_/', repo_name])) || join('', ['https://hub.docker.com/r/', repo_name])}}"},"params":{"additionalProperties":false,"properties":{"query":{"description":"Image name or keyword, e.g. 'postgres', 'nginx', 'python 3.12'","maxLength":100,"minLength":2,"type":"string"}},"required":["query"],"type":"object"},"provenance":{"method":"har","notes":"The search page /search?q= renders its cards from client-side data. Docker Hub's public JSON search API /v2/search/repositories/?query= answers a plain GET with no key and returns the same repository fields (repo_name, short_description, star_count, pull_count, is_official). The recipe calls that API, not the page. Official images link to /_/<name>, others to /r/<namespace>/<name>.","recorded_at":"2026-11-08T15:55:00.000Z","recorded_by":"wield-forge (claude-haiku agent)"},"requires_login":false,"schema":"https://wield.run/schema/recipe/v1.json","site":{"country":"US","id":"hub.docker.com","language":"en","name":"Docker Hub","origin":"https://hub.docker.com","origins":["https://hub.docker.com"]},"steps":[{"description":"Docker Hub's public repository search API, a plain read-only GET with no key. Results are in results[]; each has repo_name (with the namespace for non-official images), short_description, star_count, pull_count and is_official.","expect":{"content_type":"json","status":[200]},"extract":{"json":{"repos":"results[?repo_name]"}},"id":"search","request":{"headers":{"Accept":"application/json"},"method":"GET","query":{"page_size":"25","query":"{{params.query}}"},"url":"/v2/search/repositories/"}}],"task":"Search Docker images","tos":{"notes":"Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.","reviewed":false},"verify":{"checks":["length(output.images) > `0`","length(output.images[?starts_with(url, 'https://hub.docker.com/')]) == length(output.images)","length(output.images[?name != `null`]) == length(output.images)","length(output.images[?official == `true`]) > `0`"],"example_params":{"query":"postgres"},"max_ms":5000},"version":1}