Skip to content

Releases: evolution-foundation/evolution-go

v0.7.2

Choose a tag to compare

@DavidsonGomes DavidsonGomes released this 03 Jul 01:56

v0.7.2

Docker: evoapicloud/evolution-go:0.7.2

🆕 New Features

  • Passkey (WebAuthn) pairing — support for linking accounts that the WhatsApp
    server locks behind a passkey (the Shortcake / CRSC flow). When the
    server demands a passkey, whatsmeow's PairPasskeyRequest is surfaced through a
    new ceremony flow: the backend mints a short-lived ceremony token, and a bundled
    browser extension (passkey-helper) runs the WebAuthn assertion on the
    web.whatsapp.com origin and posts it back. Three public endpoints drive it:
    GET /passkey-ceremony/{token}, POST .../response, POST .../confirm. The
    manager detects the passkey stage and shows an "Abrir WhatsApp Web" button.
    Confirmation is always manual (never auto-confirm on SkipHandoffUX).
    Configure the public API base via PASSKEY_PUBLIC_URL. Full guide:
    docs/wiki/guias-api/passkey-pairing.md. Note: there is no headless bypass —
    the ceremony requires the account owner's real authenticator; the extension is
    web-only.
  • Headless license auto-activation — set EVOLUTION_OPERATOR_EMAIL to the
    email used in your first manual license registration; on startup the service
    silently calls /v1/register/auto and skips the browser flow (falls back to the
    manual flow if the email isn't registered yet).
  • Button message media support — additional media handling for interactive
    button messages.

🔧 Improvements / CI

  • Dropped the whatsmeow fork — now uses official go.mau.fi/whatsmeow. The
    project previously vendored a fork (whatsmeow-lib submodule) to carry a
    PostgreSQL pool patch; upstream rejected that patch in favor of NewWithDB
    (app-side config). Removing the fork also pulled in upstream's native passkey
    support. Pinned to the commit that adds passkeys
    (v0.0.0-20260630180629-b572e5bcb92b). The sync-releases workflow no longer
    re-adds the submodule.
  • QR pairing consumes events.QR directly instead of GetQRChannel. The QR
    channel auto-confirms passkey on SkipHandoffUX and disconnects the socket when
    codes run out — both break an in-flight passkey ceremony. Connecting without it
    keeps the socket alive for as long as pairing (QR or passkey) needs. QR rotation
    now pauses while a passkey ceremony is active.
  • Public sync fixes — the release workflow drops the obsolete whatsmeow-lib
    step, targets evolution-foundation/*, and now ships the passkey-helper
    extension to the public repo.

🐛 Bug Fixes

  • POST /instance/pair returned an empty PairingCode — the handler
    swallowed PairPhone errors and returned HTTP 200 with PairingCode: "", and
    the client wasn't connected/awaiting-auth before PairPhone. Now starts the
    instance, waits for the websocket, and surfaces real errors (#21).
  • GET /instance/status returned 400 after a manual disconnect — now returns
    200 with the disconnected status instead of erroring until a container restart
    (#20).

🏷️ Org rename

  • Repository references updated from EvolutionAPI to evolution-foundation
    (module path, imports, GitHub URLs, submodule URLs).

v0.7.1

Choose a tag to compare

@DavidsonGomes DavidsonGomes released this 03 Jul 01:16

Docker: evoapicloud/evolution-go:0.7.1

🆕 New Features

  • Test-send modal in Manager — new modal in the embedded manager UI to test message sending directly from the panel, covering text, media and interactive message types. Useful for validating an instance right after pairing without leaving the manager.

🔧 Improvements / CI

  • whatsmeow-lib SHA now pinned in the public sync — the sync-releases workflow previously re-cloned whatsmeow main on every run, so the SHA listed in the CHANGELOG could drift from what the public repos actually built against. The workflow now captures the SHA from the dev submodule and checks out that exact commit in the target, restoring release reproducibility.
  • Docker :latest tag gated to stable releases — the shared publish_docker_image.yml template was previously tagging :latest from both stable and beta builds, so each beta push overwrote the stable :latest with obfuscated beta code. :latest now only moves forward on non-beta releases.
  • Repository cleanup — dropped tracked binaries (evolution-go, build/server), IDE config (.idea/) and scratch files (DIFF-COMPLETO.txt, API-INTERACTIVE-DOCS.txt, carousel-sender.html). Expanded .gitignore to prevent reincidence.

📝 Docs

  • Postman collection — added Set Proxy request and multipart hints on /send/media; collection file renamed from Evolution GO.postman_collection (2).json to Evolution GO.postman_collection.json.
  • Interactive messages docs — additional examples and corrections.

v0.7.0

Choose a tag to compare

@DavidsonGomes DavidsonGomes released this 17 Apr 18:43

Docker: evoapicloud/evolution-go:0.7.0

🆕 New Features

  • Multi-platform interactive messages — Buttons, lists and carousel working on Android, iOS and WhatsApp Web/Desktop
    • SendButton: removed ViewOnceMessage wrapper that blocked rendering on iOS and WhatsApp Web; Footer and Header are now conditional
    • SendList: migrated from InteractiveMessage/NativeFlowMessage to legacy ListMessage (native protobuf) for broad compatibility
    • SendCarousel: new endpoint POST /send/carousel with cards (image, text, footer, buttons) and automatic JPEG thumbnail generation for instant image loading
    • whatsmeow-lib: added biz node for InteractiveMessage and pinned product_list type on the biz node for ListMessage
  • Base64 media support on /send/media — The url field on POST /send/media now also accepts base64-encoded media. When the value does not start with http:// or https://, it is treated as base64 and decoded; reuses the existing SendMediaFile flow
  • WhatsApp status endpoints — new POST /send/status/text and POST /send/status/media publish text/image/video status to status@broadcast. Media endpoint supports both JSON (with URL) and multipart/form-data (file upload). Thanks @Eduardo-gato (#15)
  • Webhook routing for GROUP / NEWSLETTER — when the primary MESSAGE / SEND_MESSAGE / READ_RECEIPT subscription is absent, events from @g.us chats are forwarded to GROUP subscribers and events from @newsletter chats to NEWSLETTER subscribers. Thanks @oismaelash (#18)

🔧 Improvements

  • Proxy protocol — new optional protocol field (and PROXY_PROTOCOL env) supporting http, https, socks5. Replaces the hardcoded SOCKS5 dialer with client.SetProxyAddress, fixing HTTP-proxy QR pairing (#12). Thanks @TBDevMaster (#13)
  • WhatsApp Web version cachefetchWhatsAppWebVersion now caches the result for 1 hour with a mutex instead of issuing one request per instance startup. Thanks @VitorS0uza (#24)
  • Manager flicker fix — instance page no longer replaces the list with skeleton cards on every 5s polling cycle (hasLoaded flag). Thanks @TBDevMaster (#14), closes #11
  • WEBHOOKFILESWEBHOOK_FILES.env.example, docker-compose and docs aligned with the env var the runtime actually reads. Thanks @VitorS0uza (#22)
  • Dependency cleanup — removed unused github.com/EvolutionAPI/evo-gate from go.mod
  • whatsmeow-lib bumped to 0923702fb
  • Telemetry removed — dropped legacy pkg/telemetry

🐛 Bug Fixes

  • /message/edit — was silently ignored because the edit payload used Conversation while the original message was sent as ExtendedTextMessage. WhatsApp requires matching types; now the edit uses ExtendedTextMessage and the response returns the actual server timestamp instead of the zero value. Closes #16
  • Sticker upload to S3/MinIO — when webp.Decode or png.Encode failed, the whole media pipeline aborted and the sticker was lost from the webhook. Now we log a warning and keep the raw .webp bytes so the sticker still reaches the bucket. Closes #5
  • Multipart /send/media — the binary-upload branch silently dropped mentionAll, mentionedJid and quoted. These fields now parse from the form (with mentionedJid accepting repeated or comma-separated values) and reach the send service. Closes #2

⚠️ Breaking changes

  • Proxy — previously all proxies were forced through SOCKS5. If you run SOCKS5 on a non-standard port (anything outside 1080/2080/42000-43000), set PROXY_PROTOCOL=socks5 in the env or pass "protocol": "socks5" in the proxy body explicitly — otherwise the new protocol inference will fall back to HTTP.

📝 Docs

  • README — updated WhatsApp support number and issue templates
  • Interactive messages guide — new docs/wiki/guias-api/api-interactive.md
  • Proxy docs — environment variables, configuration guide and API reference updated with the new protocol field

🙏 Community contributors

Big thanks to everyone who sent PRs and issues that shaped this release: