mrkeyoor.com_
Sat 12 Sept 15:51 UTC
Automationevaluationupdated 12 Sept 2026

wechaty review

Wechaty is a TypeScript toolkit for writing chatbots against one shared set of contacts, rooms, messages, and login events. A separate connector, called a puppet, links that bot code to WeChat, WeCom, WhatsApp, or another supported messaging service.

Verdict

Our Wechaty checkout installed 1,302 packages, failed both build and test, and reported 75 known vulnerabilities, including 4 critical. Existing users with a proven puppet may still value its common bot API, but a new production project should start elsewhere unless WeChat compatibility is non-negotiable. Test with an account you are authorized to automate only after resolving the toolchain and reviewing the connector's ban and trust risks.

We ran it

Lab card: what happened when we ran wechatyScreenshot of wechaty (wechaty.js.org)
Install✓ · 108s1302 packages · 500 MB
Build✗ · 4s
Tests✗ · 10sran, no count parsed
Known vulns754 critical · 23 high · 45 moderate · 3 low (npm audit)
Repo198 files~15,032 lines of source · 1.3 MB · 4 CI workflows · Dockerfile · tests dir

Answers from our run

Does wechaty build from source?

Dependencies installed in 108 seconds (1302 packages), and the build failed. We cloned commit 5a0520a into a clean Debian container with 3 CPUs and no project-specific setup.

Do wechaty's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does wechaty have known vulnerabilities in its dependencies?

npm audit flagged 75 known advisories in the dependency tree, including 4 critical at the time of our run.

Who should not use wechaty?

Teams that require a clean Node 22 build: our TypeScript compile failed on one unknown option and one removed option.

What are the alternatives to wechaty?

Rasa, Telegraf, Baileys. Our Wechaty checkout installed 1,302 packages, failed both build and test, and reported 75 known vulnerabilities, including 4 critical.

Setup1/51,302 packages installed; build and test both failed
Docs3/5Broad API and puppet guidance, but release and provider paths are dated
Community3/523,153 stars and 2026 issue traffic, but 200 open items
Maturity2/5Long-lived SDK; alpha source, failed checks, and 75 advisories

Who it’s for

Node.js teams that need one bot-facing API across several messaging connectors.
Existing Wechaty users who already know which puppet and account path works for them.
Developers who can test provider behavior under each messaging platform's rules before using a production account.
Bot builders willing to pin an older toolchain while they repair or avoid the Node 22 build failures we measured.

Who it’s NOT for

Teams that require a clean Node 22 build: our TypeScript compile failed on one unknown option and one removed option.
Security-sensitive deployments that cannot accept server-supplied dynamic code: the tested source constructs an AsyncFunction from a botie message, and open issue 2827 flags the path using static analysis.
Anyone willing to risk only one important WeChat account: issue 2804 contains multiple reports of QR-login restrictions or bans, without a provider-wide failure rate.
Buyers expecting connector support from the core maintainers: issue 2822 says token sales, maintenance, and support moved to the separate RPAChat operator.
Teams with a strict dependency-risk budget: our audit found 75 known vulnerabilities, including 4 critical and 23 high severity.

Setup reality

Our sandbox installed 1,302 packages in 108 seconds and used 500 MB. The build failed in 4 seconds. Tests failed in 10 seconds, and npm audit found 75 known vulnerabilities: 4 critical, 23 high, 45 moderate, and 3 low.

A real bot needs a chosen puppet, its configuration, and an account login. Service puppets may need a token and endpoint; issue 2822 says RPAChat now handles token sales and support. The sandbox had no secrets, so our run did not test a live messaging account.

The README requires Node 16+, npm 7+, and TypeScript 4.4+. On Node 22, the compiler rejected importsNotUsedAsValues and the removed moduleResolution=node10 setting. The repository includes a Dockerfile and 4 CI workflows, but the checked-out source still did not build or finish its test command in our environment.

One bot API sits above replaceable messaging connectors

Wechaty gives bot code common objects for contacts, rooms, messages, friendship requests, and login state. Event handlers cover scans, logins, messages, room changes, and errors. A puppet handles the actual messaging protocol, which is how similar code can target WeChat, WeCom, WhatsApp, or a mock connector. That separation is the project's reason to exist.

Our checkout contained 198 files and roughly 15,032 lines of source, occupying 1.3 MB before installation. It exports ES module and CommonJS builds and includes command-line tools. The public package at commit 5a0520a calls itself version 2.0.0-alpha.1, even though the latest GitHub release entry is much older.

A puppet choice decides whether six lines can connect

The README's example hides the consequential setup choice. WECHATY_PUPPET selects a connector, and service puppets can require a provider token and endpoint. Direct, mock, web, Windows, and iPad paths have different capabilities and support arrangements. Several older providers are marked deprecated. Before writing bot logic, identify the current provider for the target network, confirm required message types, and learn who supports its credentials.

Our sandbox added 1,302 packages in 108 seconds and left 500 MB on disk. Issue 2822 says RPAChat took over Wechaty token sales, maintenance, and support in March 2026, while the core contributors no longer handle those commercial services. The SDK and connector business have separate ownership, a distinction procurement and incident response need to record.

What happened when we ran it

Our Node 22 sandbox installed all 1,302 packages successfully in 108 seconds. The dependency tree occupied 500 MB. The repository itself was 1.3 MB, so nearly all local weight arrived during npm install. Four CI workflow files, a Dockerfile, and a tests directory were present. Those are useful maintenance signals, though the checked-in commands still need to pass.

The build failed with exit code 1 after 4 seconds. TypeScript reported importsNotUsedAsValues as an unknown compiler option in @chatie/tsconfig. It also said moduleResolution=node10 had been removed and told the user to remove that setting. The log does not say which change should repair the mismatch. The documented Node 16-or-newer range did not yield a build on our Node 22 image.

Tests failed with exit code 1 after 10 seconds. The tail shows a stack inside @typescript-eslint/typescript-estree, followed by ERROR: "lint:es" exited with 2. Package.json runs lint before unit tests, and the recorded result gives no passing unit-test count. The lint failure ended the command before behavioral tests could establish a result.

Npm audit found 75 known vulnerabilities: 4 critical, 23 high, 45 moderate, and 3 low. We did not substitute a later lockfile, force upgrades, or omit development dependencies because those steps would change the measured checkout. A production evaluation should trace each advisory to runtime or development use, then verify that dependency changes compile and pass the complete suite. The current result is too exposed to approve unchanged.

WeChat account reports make live testing a controlled step

Issue 2804 has 33 comments and multiple users reporting QR-login restrictions or account bans after trying example or default paths. At least one user later reported a successful appeal. The thread lacks a denominator or controlled comparison across puppets, so it cannot establish a ban rate. It does establish enough downside to rule out casual testing with a primary account.

Our sandbox had 3 CPUs, 8 GB of RAM, and no secrets. It never logged into a platform, so the 108-second install and 10-second failed test say nothing about delivery reliability, login survival, room support, or media handling. Validate those behaviors with the provider and platform terms in hand. Enterprise buyers should obtain a named support route before putting customer accounts behind a puppet service.

Server messages reach an AsyncFunction in the tested source

At commit 5a0520a, src/io.ts parses an incoming IO event named botie, reads args and source, and passes them to new AsyncFunction. Issue 2827 describes a possible code-execution path from a malicious or compromised server. The reporter says the proof of concept came from static analysis and was not dynamically verified. Our inspection confirms the constructor call, while the exploit claim still needs threat-model review and testing.

This trust boundary matters beside the audit's 4 critical and 23 high advisories. A team using the IO service should determine which server can emit botie, how the connection authenticates, and whether the feature is needed. The repository's 4 CI workflows do not answer those questions. Until the path is removed, constrained, or accepted, keep the process away from secrets or accounts whose compromise would have serious consequences.

Code stopped in 2025 while issue traffic continued in 2026

GitHub recorded 23,153 stars and 200 combined open issues and pull requests. The last repository push was December 21, 2025, while an issue was updated on September 9, 2026. The latest GitHub release remains v0.56 from January 2021, while the tested manifest says 2.0.0-alpha.1. A stale release alone would not prove abandonment, but these mismatched signals increase upgrade uncertainty.

Wechaty still suits teams already operating a known-good puppet. For a new deployment, our measured 500 MB tree, failed build, failed test command, and 75 audit findings outweigh the convenience of one message API. Add the provider, account, and dynamic-code questions, and the sensible default is a narrower official bot API or platform-specific library whose toolchain you can verify cleanly.

Alternatives

ProjectWhat it isPick it when
RasaA Python framework for conversational logic with text and voice channel connectors.pick this instead when dialogue management and supported channel integrations matter more than personal-account automation.
TelegrafA focused Node.js framework for Telegram bots.pick this instead when Telegram is the only channel and a narrow Bot API wrapper is enough.
BaileysA TypeScript and JavaScript socket API for WhatsApp Web.pick this instead when WhatsApp is the sole target and you accept a platform-specific Web connector.

What people are saying

  1. [github-trending] wechaty/wechaty

Sources

  1. Wechaty README at tested commit
  2. Wechaty package manifest at tested commit
  3. Wechaty IO source at tested commit
  4. Issue 2804: QR-login account reports
  5. Issue 2827: AsyncFunction security report
  6. Issue 2822: token service operator change
  7. Wechaty v0.56 GitHub release
  8. GitHub repository metadata

More automation reviews

celery · dagu · helm · awesome-n8n-templates · gogcli · ars0n-framework-v2 · the whole board →