open-wa logoopen-wa
DocsGuides

Create a project

Create an Easy API or SDK project with JavaScript or TypeScript, browser selection, and optional plugins.

Create a project

Use Node.js 22.21.1 or newer and npm. Run the interactive wizard:

npm init @open-wa@latest my-bot
cd my-bot
npm start

The wizard asks for Easy API or SDK, JavaScript or TypeScript, a browser, and optional plugins. Use the project builder to make the same choices on this site, preview every generated file, and copy a complete command or a shareable link. Both interfaces use the same options and templates.

Choose your project

Easy API runs the HTTP server and Neo dashboard. It discovers wa.config.js or wa.config.ts automatically. Open Neo after starting the project.

SDK creates a persistent bot in index.js or index.ts. It imports your config and passes it to create(). Once connected, send !ping from another WhatsApp account to receive pong; add your own handlers in the entry file. SDK mode runs without an HTTP server or Neo. Choose Easy API for those controls.

JavaScript projects use .js files. TypeScript projects use .ts files and include tsconfig.json and editor types. Node.js runs the generated TypeScript directly; you don't need a separate compile step or Bun.

Browser choices

ChoiceWhat happens
Detect at startupReuse installed Chrome or a cached browser. Ask what to download if none is available.
Use installed ChromeRequire a local Chrome installation. Never download a browser.
Download ChromeUse managed Chrome for Testing, downloading only when missing. Recommended for calls and media.
Download ChromiumUse managed Chromium, downloading only when missing. Some audio/video codecs may be unavailable.

The terminal wizard shows the Chrome installation it detects. The website can't inspect installed applications, so its command performs that check locally. Browser downloads happen when you start the project and are cached for reuse. Choose an explicit download option for an unattended first start.

Plugins and credentials

Select Voxtral, Webhooks, or Chatwoot. Chatwoot needs Easy API webhook routes and is unavailable in SDK mode. Selecting Voxtral also asks whether to handle voice notes, calls, or both. Calls need a calling-enabled open-wa license.

The initializer writes plugin settings into the config and puts the required environment variable names in .env.example. Copy that file to .env and fill in your values before starting the integrations. The generated config loads .env; existing environment variables take precedence. Keys stay on your computer and aren't included in the builder's command or share link.

Only selected plugins are downloaded, on demand at startup, then reused from the project's plugin cache. There is no separate plugin installation command.

Repeatable commands

Pass flags to skip their questions. Partial flags leave the remaining questions interactive. Add --yes to use defaults for any missing choices:

npm init @open-wa@latest my-api -- --mode easy-api --language js --browser chrome --plugins none --yes

For a TypeScript SDK voice assistant:

npm init @open-wa@latest voice-bot -- --mode sdk --language ts --browser chrome --plugins voxtral --voxtral-mode both --yes
FlagValues
--modeeasy-api, sdk
--languagejs, ts
--browserauto, system-chrome, chrome, chromium
--pluginsvoxtral, webhook, chatwoot, comma-separated; or none
--voxtral-modevoice-notes, calls, both
--no-installWrite the files and let you run npm install later.
--yesUse defaults for unanswered choices.
--helpShow usage without creating files.

Defaults are Easy API, JavaScript, browser detection, no plugins, voice-note mode when Voxtral is selected, and dependency installation enabled. Use . as the project directory to create files in the current folder.

Generated files

Every project includes package.json, wa.config.js or wa.config.ts, .gitignore, and README.md. SDK projects also include their index.js or index.ts entry point. TypeScript adds tsconfig.json. Projects with API keys or integration settings include .env.example.

The initializer checks for existing destination files before writing and refuses to overwrite them. If dependency installation fails, keep the generated files, resolve the npm error, and run npm install from the project directory.

The existing npx @open-wa/wa-automate init my-bot entry point opens the same wizard and supports the same flags.

Run npm start, then open WhatsApp → Linked devices → Link a device on your phone and scan the QR code. Keep the project running to handle messages or calls. Stop with Ctrl+C; restart from the same project directory to reuse a valid saved login. Treat session storage and .env as private credentials.

Next: Easy API quick start, SDK quick start, or the Voxtral guide.

Text and voice assistants

Select Jev chat assistant to answer text messages, and optionally Voxtral for voice notes and calls. Both choices are available in the terminal wizard and project builder. Fill in MISTRAL_API_KEY and JEV_API_KEY once in the generated .env; both plugins share conversation context and chat actions. See Jev and Voxtral.

Was this helpful?

Your answer includes the page path and docs version.

On this page