duck-ai
v1.0.0
Published
Unofficial DuckDuckGo AI Chat client for Node.js
Maintainers
Readme
duck-ai
Unofficial DuckDuckGo AI Chat client for Node.js. No API key required.
Install
npm install duck-aiRequires Node.js 18+. Uses a real browser under the hood via puppeteer-real-browser.
Quick Start
import { init } from "duck-ai"
const agent = init()
const chat = await agent.newChat("gpt-4o-mini")
const reply = await chat.ask("What is the capital of France?")
console.log(reply)
await agent.destroy()API
init(options?): Agent
Creates a new agent and optionally pre-warms the browser.
const agent = init({ fast: true })agent.newChat(model?): Promise<Chat>
Opens a new chat session. Defaults to "gpt-5-mini".
const chat = await agent.newChat("claude-haiku-4-5")chat.ask(prompt): Promise<string>
Sends a message and returns the full response text.
const reply = await chat.ask("Explain black holes in one sentence.")agent.getChat(id, model?): Promise<Chat>
Resumes an existing chat by ID, or opens a new one if the ID is not found.
const resumed = await agent.getChat(chat.id)agent.getAvailableModels(): DiscoveredModel[] | null
Returns the model list fetched from DuckDuckGo at startup. Available after the first newChat() call.
agent.destroy(): Promise<void>
Closes the browser and clears all chat sessions.
Models
| ID | Aliases | Provider |
|----|---------|----------|
| gpt-5-mini | gpt-5, o3-mini | OpenAI |
| gpt-4o-mini | gpt4o-mini | OpenAI |
| gpt-oss-120b | gpt-oss | OpenAI |
| llama-4-scout | llama, llama-4 | Meta |
| claude-haiku-4-5 | claude-haiku, claude-3-haiku | Anthropic |
| mistral-small-3 | mistral, mixtral | Mistral |
import { models } from "duck-ai"
console.log(models)Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| fast | boolean | false | Pre-warms the browser when the agent is created |
| headless | boolean | false | Run browser in headless mode (or set DUCK_BROWSER_HEADLESS=true) |
| verbose | boolean | false | Log browser events to stdout |
| args | string[] | [] | Extra Chromium launch arguments |
Notes
- This library automates a real Chromium browser to interact with duck.ai. It is not affiliated with or endorsed by DuckDuckGo.
- The first
newChat()call takes several seconds to launch the browser and pass bot detection. - Use
fast: trueto pre-warm the browser at agent creation time.
License
MIT
