mrkeyoor.com_
Tue 01 Sept 17:40 UTC
Self-Hostedevaluationupdated 25 Aug 2026

evolution-go review

Evolution Go is a self-hosted REST API that connects applications to WhatsApp through the unofficial whatsmeow client. It manages linked-device instances, messages, media, webhooks, WebSockets, RabbitMQ, and NATS from a Go service with PostgreSQL-backed state.

+45stars / 7d
Verdict

Evolution Go has the better measured foundation of the two Evolution services in this batch: its pinned source installed, built, and passed all eight lab tests. It is still an unofficial WhatsApp Web bridge with mandatory activation and several production-shaped issues around reconnects, passkeys, and message formats. Use it for a monitored internal integration after fixing or containing the PostgreSQL pool leak; choose an official Meta channel when contractual delivery and account stability matter more than self-hosting.

We ran it

Lab card: what happened when we ran evolution-goScreenshot of evolution-go (evolutionfoundation.com.br)
Install✓ · 83s139 packages
Build✓ · 188s
Tests✓ · 63s8 passed · 0 failed of 8 (go test)
Repo134 files~35,533 lines of source · 67.6 MB · 1 CI workflows · Dockerfile

Answers from our run

Does evolution-go build from source?

Dependencies installed in 83 seconds (139 packages), and the build succeeded in 188 seconds. We cloned commit 9337afc into a clean Debian container with 3 CPUs and no project-specific setup.

Do evolution-go's tests pass?

Yes: 8 of 8 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use evolution-go?

Businesses that require Meta's official WhatsApp Cloud API and its policy framework: Evolution Go uses the unofficial whatsmeow web client.

What are the alternatives to evolution-go?

GOWA, WPPConnect Server, Evolution API. Evolution Go has the better measured foundation of the two Evolution services in this batch: its pinned source installed, built, and passed all eight lab tests.

Setup3/5Build and tests passed; PostgreSQL and activation remain mandatory
Docs4/5Useful quick start, configuration, Swagger, and command guide
Community4/5Issue and pull-request work continued after the July release
Maturity3/5Passing core checks, but reconnect and endpoint bugs need care

Who it’s for

Go-friendly teams that need a multi-instance WhatsApp Web API with webhooks or queues.
Developers who want a smaller sibling to the Node-based Evolution API.
Operators prepared to monitor linked-device sessions, PostgreSQL connections, and delivery results.
Evo CRM users who want the Foundation's Go WhatsApp provider.

Who it’s NOT for

Businesses that require Meta's official WhatsApp Cloud API and its policy framework: Evolution Go uses the unofficial whatsmeow web client.
Air-gapped or fully independent deployments: the README requires license activation, returns 503 before activation, and says periodic heartbeats maintain it.
Products unwilling to display an Evolution Go usage notice or preserve its frontend branding: the repository license adds those conditions and warns that noncompliance may require a commercial license.
Services that cannot tolerate reconnect-related database exhaustion without a fix or guardrail: an open report on the measured commit says each reconnect opened an unclosed PostgreSQL pool.
Integrations depending on list and button messages exactly as documented: a current 0.7.2 report says those endpoints returned an upstream 405 while text, polls, and carousels worked.

Setup reality

At commit 9337afc, Go installed 139 packages in 83 seconds. The build succeeded in 188 seconds, and go test completed in 63 seconds with 8 passed and 0 failed of 8. The checkout contained 134 files, about 35,533 lines of source, and occupied 67.6 MB.

A running service needs two PostgreSQL connection strings in the sample configuration, a global API key, and license activation through the manager. It returns 503 until activation; a previously registered operator can configure email-based activation. RabbitMQ, NATS, webhooks, proxying, and MinIO are optional.

WhatsApp pairing requires a real account and device flow. Accounts that demand a passkey also need a public API URL, the bundled browser extension, and manual WebAuthn confirmation. The current module requests Go 1.25 while the README says Go 1.24 or newer, so source builders should follow the module declaration.

A narrower Evolution service with a clearer shape

Evolution Go turns a linked WhatsApp account into an HTTP service. It can create and remove instances, display pairing codes, send text and media, expose status, and publish events through webhooks, WebSockets, RabbitMQ, or NATS. Media can go to MinIO or S3-compatible storage, while PostgreSQL stores authentication and optional message data. Swagger ships with the service for endpoint exploration.

The protocol choice sets the risk boundary. Whatsmeow links as a WhatsApp client; it is not Meta's contracted business API. Changes in WhatsApp's web protocol and accepted message formats can break an endpoint even when Evolution Go's HTTP layer is healthy. A business should decide whether that trade is acceptable before building workflows around the convenient REST surface.

What happened when we ran it

We cloned commit 9337afc into an unprivileged golang:1.24-bookworm container with 3 CPUs and 8 GB of RAM. The checkout had 134 files, about 35,533 lines of source, and occupied 67.6 MB. Dependency installation succeeded in 83 seconds with 139 packages installed.

The build succeeded in 188 seconds. Tests completed in 63 seconds, with go test reporting 8 passed and 0 failed of 8. The repository has one CI workflow file and a Dockerfile. It has no dedicated tests directory, but the Go test run proves that test files elsewhere in the packages executed. Among these four reviews, Evolution Go is the only project whose measured install, build, and tests all completed successfully.

Those results cover code at the pinned commit without secrets or connected services. They do not test WhatsApp pairing, license activation, PostgreSQL behavior under reconnects, event delivery, or media storage. Passing them is a meaningful baseline, especially beside its sibling's failed build, but it is not a live messaging acceptance test.

Setup includes an activation service

The README recommends Docker, while local development uses Make targets for dependency setup, Swagger generation, build, tests, race checks, and database migrations. The sample environment expects separate PostgreSQL URLs for authentication and users, plus a global API key. The current go.mod requests Go 1.25 even though the README says Go 1.24 or newer, so contributors should use the module's requirement.

Evolution Go will not serve its normal API immediately after the process starts. The README says endpoints return 503 until the operator opens the manager, supplies the API URL and global key, and completes license registration. Activation state lives in the runtime_configs database table, and periodic heartbeats maintain it. Release 0.7.2 added headless activation by operator email, but the email must already have completed a first manual registration. This dependency makes fully offline use a poor fit.

RabbitMQ and NATS carry events, MinIO stores media, and a proxy can route the WhatsApp connection. Telemetry sends anonymous route-use and API-version data according to the README.

Pairing is more involved than scanning a QR

Normal linking can use a QR code or phone pairing code. Release 0.7.2 fixed a phone-pairing handler that returned HTTP 200 with an empty code after swallowing an error. It now starts the instance, waits for the websocket, and returns the real failure. The release also moved from a private whatsmeow fork to the upstream library.

Some WhatsApp accounts require WebAuthn passkey confirmation. Evolution Go exposes a short-lived ceremony, and its browser extension performs the assertion on web.whatsapp.com. The operator must configure PASSKEY_PUBLIC_URL so the browser can reach the service. There is no headless bypass; the account owner confirms with a real authenticator.

An open report says 1Password did not appear when the original extension called WebAuthn from a content script. The reporter tested a split design using the page's main JavaScript world for authentication and the extension service worker for API calls. Passkey users should test their browser and password manager combination before an incident forces relinking.

Current issues touch production behavior

The most serious report is a PostgreSQL connection pool leak on commit 9337afc, the same commit we measured. The report says StartClient created a new whatsmeow SQL store on every start or reconnect and did not close the previous pool. Repeated instance or QR cycles eventually exhausted database connections in the reporter's production environment. Several pull requests propose reusing a shared pool, but operators should verify which fix is merged into the image they pin.

Another issue says POST /user/profileName on the latest image never returned, while related profile endpoints did respond. Downstream clients need deadlines on every call, regardless of how ordinary the operation seems. A separate 0.7.2 report found /send/list and /send/button returning a WhatsApp 405 because they used legacy message structures; text, poll, and carousel calls worked in the same session. Endpoint presence in Swagger is not proof that WhatsApp still accepts its wire format.

Health, terms, and the choice

Version 0.7.2 and the last repository push both landed on July 3, 2026. Issues and pull requests remained active through August 24, including pool-leak fixes, shared-state locking, archive-event panic handling, and phone-number resolution. GitHub lists 102 open issues and pull requests combined. The work is active, though much of it has not yet reached a newer stable release.

The repository describes its license as Apache 2.0 with extra conditions. Its text requires an administrator-visible Evolution Go usage notice and preservation of branding in frontend components. It says failure to comply may require a commercial license. Product teams should review those additions instead of assuming ordinary Apache terms from the badge.

Evolution Go is a credible option for a monitored WhatsApp Web integration, and the clean lab result earns it a trial. Pin the exact image, cap and observe PostgreSQL connections, apply client timeouts, and run delivery tests for every message type you plan to expose. If external activation or unofficial protocol risk is unacceptable, it is the wrong foundation despite the tidy Go build.

Alternatives

ProjectWhat it isPick it when
GOWA gh↗A Go WhatsApp Web API with multiple accounts, webhooks, a UI, MCP, and Chatwoot support.pick this instead when you want another Go-based route without Evolution Go's exact activation and ecosystem model.
WPPConnect ServerA ready-made HTTP server built on the WPPConnect WhatsApp Web client.pick this instead when WPPConnect compatibility matters more than a Go binary and whatsmeow.
Evolution API gh↗The Foundation's broader Node service with Baileys and official Meta Cloud API channels.pick this instead when you need Meta Cloud API or the larger catalog of CRM, bot, storage, and event integrations.

What people are saying

  1. [github-trending] evolution-foundation/evolution-go

Sources

  1. Evolution Go README
  2. Evolution Go repository
  3. Evolution Go v0.7.2 release
  4. PostgreSQL connection pool leak report
  5. Profile name endpoint hang report
  6. List and button message report
  7. Passkey helper compatibility report
  8. Evolution Go license

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →