Config Explorer
Every open-wa config option and the CLI or environment adapters that actually support it.
open-wa has one configuration schema. The runtime exposes each schema field in the config file, while the CLI and environment adapters cover smaller, explicitly supported subsets:
- in a config file (
wa.config.json/wa.config.mjs), by its key - as a CLI flag where the v5 CLI parser supports that option
- as an environment variable where the environment loader supports that key
Use the explorer below to search every option, filter by group, and switch
between the three forms. The table and copy-paste snippet update to match the
format you pick. Options are grouped by area (browser, session, server,
logging, and so on) from the config schema itself. Nested fields are shown under
their full config path, and a config file only label means the selected
adapter does not accept that field.
For the complete source-backed option reference, including full types and defaults, see Configuration and CLI.
JSON config supports every schema field. CLI flags and environment variables appear only where the runtime adapter accepts them.
Session & Authentication (12)
When true, prevents auto-derivation of userDataDir from sessionId. The browser launches with an ephemeral temp profile that is discarded on exit. Useful for testing without leaving _IGNORE_ directories behind.
License key for unknown number messaging.
Link code for new login method.
Deprecated compatibility input for JSON or base64 session restore. This MD-obsolete flow remains only for legacy migration. Prefer userDataDir for persistent auth state.
Deprecated legacy path for .data.json session restore files. This only exists for MD-obsolete JSON session compatibility. Prefer userDataDir.
Name of the session. Must be unique.
Deprecated legacy flag for .data.json session persistence. This only affects the MD-obsolete JSON restore path. Prefer userDataDir-managed persistence.
Browser profile directory used for persistent session storage.
Browser Configuration (28)
Allow known-dangerous chromium args (--single-process, --no-zygote) that are normally stripped. Unsupported: these cause detached-frame crash loops on modern Chrome.
Specific browser revision to download and use.
Connect to existing chrome window (Experimental).
Disable cors (bypass pagesetbypasscspenabled).
Custom chrome/chromium argument strings. Note: --single-process and --no-zygote are stripped by default because they crash WhatsApp Web with "Navigating frame was detached" on modern Chrome; set allowDangerousBrowserArgs to force them.
Bypass web security to fix CORS issues.
Path to chrome instance.
Run browser in headless mode.
Lightpanda local mode configuration.
Disable Lightpanda telemetry for deterministic startup.
Override path to Lightpanda binary.
Lightpanda bind address.
First Lightpanda port to try.
How long to wait for Lightpanda readiness.
Proxy server credentials.
Proxy Server address. This can include the port e.g '127.0.0.1:5005'
Password for Proxy Server authentication
The protocol on which the proxy is running. E.g `http`, `https`, `socks4` or `socks5`
Username for Proxy Server authentication
Enable Raspberry Pi OS support.
Sync viewport size with window size.
Automatically detect chrome instance.
Enable Lightpanda local browser mode.
Use native proxy system.
Enable/disable puppeteer stealth plugin.
Page height in pixels
Page width in pixels
QR Code Configuration (7)
Enable easy QR code endpoint.
QR code output format.
Skip logging QR Code to console.
Automatically kill the process after a set amount of qr codes.
Downgraded legacy QR convenience flag. v5 may still expose QR PNG output, but popup and local QR parity is not a guaranteed runtime contract.
QR code output quality (0.1 - 1.0).
Wait time for QR scan before killing process. 0 to wait forever.
Authentication & Timeouts (4)
Wait time for session authentication.
Wait time for client method resolution.
Phone out of reach check timeout.
Wait time for session to load fully. 0 to wait forever.
Popup & UI (1)
Downgraded legacy compatibility option. Opens a local browser window for status or manual inspection, but v5 does not guarantee legacy popup QR parity.
Logging & Debugging (11)
Enable remote devtools.
Password for devtools
Username for devtools
Disable spins in logs (for docker).
Log console messages from browser.
Log error messages from browser.
Log debug info as object instead of console.table.
Create log file for all actions.
Winston logging transport configurations.
Log all internal wa web events.
Logging level (VERBOSE, INFO, ERROR, SILENT).
Process Behavior (5)
Kill client when logout detected.
Kill process when temporary ban detected.
Kill process when browser closes.
Kill process on auth/qr timeout.
Function to call upon restart if page crashes.
Safety & Error Handling (15)
onError"AS_STRING" | "RETURN_FALSE" | "THROW" | "LOG_AND_FALSE" | "LOG_AND_STRING" | "RETURN_ERROR" | "NOTHING"default: "NOTHING"Error handling strategy.
Check if page is valid before each command.
Run explicit per-chat user code in a worker, process, or container sandbox.
Throw error if session blocked or unable to get QR.
Return false if session data expired.
Features & Behavior (22)
Run gc() before every command sent to the browser.
Automatically refresh QR codes (Deprecated).
Block all assets from loading.
Block network calls to crash log servers.
Save local copy of patches.json.
Enable/disable cache.
Custom user agent.
Delete session data file on logout.
Makes sure the headless session is usable even on first login.
Automatically register SimpleListener events.
Use default cached raw github link for patches.
Language of host notification.
Attempt to correct invalid chatIds.
Don't implicitly determine if the host logged out.
Try to infer config from environment variables.
Always start with latest version (Alpha).
Roll back on late beta features.
QR refresh interval (Deprecated).
Screenshot on unexpected initialization error.
Bypass health check before startup.
Bypass latest version check.
Wait for a valid headful session.
Stickers & Messaging (3)
Automatic emoji detection character.
URL of serverless meta grabber.
Sticker server endpoint.
Preprocessors & Cloud Upload (13)
Options for cloud upload preprocessor.
Message preprocessor options.
Default pqueue options.
Filter for message preprocessor.
Session Limits (3)
Your Discord ID to get onto the sticker leaderboard.
Maximum amount of chats to be present in a session.
Maximum amount of messages to be present in a session.
Multi-device (2)
Enable multi-device support (Beta).
Base64 encoded S3 Bucket & Authentication object.
v5 Specific Features (6)
When to start the API: immediate, after connection, or hybrid (QR only first).
Launch the session management dashboard. Disable with --no-dashboard.
Port for the dashboard sidecar. Defaults to 3000.
Integration configurations (chatwoot, webhook, n8n, etc.). Changes require restart.
Host of the Cloudflare session proxy worker, e.g. wss://proxy.account.workers.dev
Token used to authenticate this session with the Cloudflare proxy upstream.
Server Configuration (5)
ElasticSearch Monitoring (6)
ElasticSearch buffer size.
ElasticSearch index prefix.
ElasticSearch password.
ElasticSearch ingest pipeline.
ElasticSearch URL.
ElasticSearch username.
MCP (4)
Easy API MCP configuration. Hosted MCP requires apiKey.
Enable the hosted MCP endpoint for Easy API. Requires apiKey.
Expose /meta/mcp-tools.json for dashboard and debugging.
Hosted MCP endpoint path for Easy API.
Plugin System (2)
Plugin configuration keyed by plugin name.
Plugin references to load (npm packages or file paths).
Session Sync (9)
S3 Session Synchronization configuration
AWS access key ID
S3 bucket name
Enable local session compression
Custom S3 endpoint
PicoS3 support
S3 region
AWS secret access key
Sync interval in ms
Show the 158 shown options as wa.config.json
{
"aggressiveGarbageCollection": true,
"allowDangerousBrowserArgs": true,
"apiKey": "<apiKey>",
"apiLifecycle": "hybrid",
"authTimeout": 60,
"autoEmoji": ":",
"autoRefresh": true,
"blockAssets": false,
"blockCrashLogs": true,
"browserRevision": "<browserRevision>",
"browserWSEndpoint": "<browserWSEndpoint>",
"bypassCSP": false,
"cachedPatch": false,
"cacheEnabled": false,
"callTimeout": 0,
"chromiumArgs": [],
"cloudUploadOptions": {
"accessKeyId": "<cloudUploadOptions.accessKeyId>",
"bucket": "<cloudUploadOptions.bucket>",
"directory": "<cloudUploadOptions.directory>",
"headers": {},
"ignoreHostAccount": true,
"provider": "<cloudUploadOptions.provider>",
"public": true,
"region": "<cloudUploadOptions.region>",
"secretAccessKey": "<cloudUploadOptions.secretAccessKey>"
},
"cors": "*",
"corsFix": false,
"customUserAgent": "<customUserAgent>",
"dashboard": true,
"dashboardPort": 3000,
"deleteSessionDataOnLogout": false,
"devtools": {
"pass": "<devtools.pass>",
"user": "<devtools.user>"
},
"disableSpins": false,
"discord": "<discord>",
"elasticBufferSize": 50,
"elasticIndexPrefix": "open-wa-",
"elasticPassword": "<elasticPassword>",
"elasticPipeline": "<elasticPipeline>",
"elasticUrl": "<elasticUrl>",
"elasticUsername": "<elasticUsername>",
"ensureHeadfulIntegrity": true,
"ephemeral": false,
"eventMode": true,
"executablePath": "<executablePath>",
"ezqr": true,
"ghPatch": false,
"headless": true,
"host": "localhost",
"hostNotificationLang": "<hostNotificationLang>",
"idCorrection": false,
"ignoreNuke": true,
"inDocker": false,
"integrations": {},
"keepUpdated": false,
"killClientOnLogout": false,
"killProcessOnBan": true,
"killProcessOnBrowserClose": false,
"killProcessOnTimeout": false,
"legacy": false,
"licenseKey": {},
"lightpanda": {
"disableTelemetry": false,
"executablePath": "<lightpanda.executablePath>",
"host": "127.0.0.1",
"portStart": 9000,
"startupTimeoutMs": 30000
},
"linkCode": "<linkCode>",
"linkParser": "https://link.openwa.cloud/api",
"logConsole": false,
"logConsoleErrors": false,
"logDebugInfoAsObject": false,
"logFile": false,
"logging": [],
"logInternalEvents": true,
"logLevel": "<logLevel>",
"maxChats": 0,
"maxMessages": 0,
"mcp": {
"enabled": false,
"exposeToolsMeta": true,
"path": "/mcp"
},
"messagePreprocessor": "<messagePreprocessor>",
"multiDevice": true,
"onError": "NOTHING",
"oorTimeout": 60,
"pluginConfig": {},
"plugins": [],
"popup": false,
"port": 8080,
"pQueueDefault": "<pQueueDefault>",
"preprocFilter": "<preprocFilter>",
"proxyHost": "<proxyHost>",
"proxyServerCredentials": {
"address": "<proxyServerCredentials.address>",
"password": "<proxyServerCredentials.password>",
"protocol": "<proxyServerCredentials.protocol>",
"username": "<proxyServerCredentials.username>"
},
"proxyToken": "<proxyToken>",
"qrFormat": "png",
"qrLogSkip": false,
"qrMax": 0,
"qrPopUpOnly": true,
"qrQuality": 1,
"qrRefreshS": 0,
"qrTimeout": 60,
"raspi": false,
"resizable": true,
"restartOnCrash": "<restartOnCrash>",
"s3Sync": {
"accessKeyId": "<s3Sync.accessKeyId>",
"bucket": "<s3Sync.bucket>",
"enableLocalCompression": true,
"endpoint": "<s3Sync.endpoint>",
"host": "<s3Sync.host>",
"region": "<s3Sync.region>",
"secretAccessKey": "<s3Sync.secretAccessKey>",
"syncInterval": 600000
},
"safeMode": false,
"sandboxChats": {
"capabilities": [
"sendText"
],
"concurrency": 1,
"env": "none",
"filesystem": "none",
"idleTimeoutMs": 300000,
"isolation": "process",
"memoryMb": 256,
"network": "none",
"networkAllowlist": [],
"timeoutMs": 30000
},
"screenshotOnInitializationBrowserError": false,
"sessionData": {
"WABrowserId": "<sessionData.WABrowserId>",
"WASecretBundle": "<sessionData.WASecretBundle>",
"WAToken1": "<sessionData.WAToken1>",
"WAToken2": "<sessionData.WAToken2>"
},
"sessionDataBucketAuth": "<sessionDataBucketAuth>",
"sessionDataPath": "",
"sessionId": "session",
"skipBrokenMethodsCheck": false,
"skipSessionSave": false,
"skipUpdateCheck": false,
"stickerServerEndpoint": "https://sticker-api.openwa.dev",
"throwErrorOnTosBlock": true,
"throwOnExpiredSessionData": false,
"useChrome": false,
"useLightpanda": false,
"useNativeProxy": false,
"userDataDir": "<userDataDir>",
"useStealth": false,
"viewport": {
"height": 900,
"width": 1440
},
"waitForRipeSession": true,
"waitForRipeSessionTimeout": 5,
"webhook": "<webhook>"
}This page is generated from @open-wa/config's schema plus the v5 CLI and
environment adapters, so the displayed forms describe what each runtime path
actually accepts.
Was this helpful?
Your answer includes the page path and docs version.
