Skip to main content

Pré-requisitos

Antes de instalar whatsapp-rust, certifique-se de ter:
  • Rust nightly (padrão) — necessário para a edição Rust 2024 e o protocolo binário otimizado com SIMD. O projeto fixa nightly-2026-04-05 via rust-toolchain.toml. Veja Usando Rust stable se você precisa de suporte ao toolchain stable.
  • Gerenciador de pacotes Cargo
O SQLite é empacotado por padrão com o crate whatsapp-rust-sqlite-storage, então você não precisa instalá-lo separadamente. Se preferir vincular ao SQLite instalado no sistema, desabilite a feature padrão bundled-sqlite.

Adicione ao seu projeto

Adicione whatsapp-rust e suas dependências necessárias ao seu Cargo.toml:

Feature flags

whatsapp-rust suporta diversas features opcionais:
Todas as features padrão habilitam Tokio como o runtime assíncrono, mas todo componente é opcional. Para usar um runtime diferente (async-std, WASM, etc.), desabilite todos os padrões e forneça suas próprias implementações dos traits Runtime, TransportFactory, HttpClient e Backend. Veja backends personalizados para detalhes.
O crate wacore tem uma feature adicional para alvos de navegador WASM: Para usar whatsapp-rust em um ambiente de navegador WASM, habilite a feature js em wacore:
Cargo.toml
O crate waproto tem suas próprias feature flags: O código protobuf gerado (whatsapp.rs) é versionado, então prost-build nunca é necessário para builds normais. Isso mantém a árvore de dependências menor e a compilação mais rápida. Todos os tipos protobuf derivam Serialize por padrão. Habilite serde-deserialize quando precisar analisar tipos protobuf a partir de JSON (por exemplo, em uma ponte WASM). Habilite serde-snake-case quando sua fonte JSON usa snake_case para variantes de enum (prost gera PascalCase por padrão).
Cargo.toml
O crate whatsapp-rust-sqlite-storage tem suas próprias feature flags: Para usar um SQLite instalado no sistema em vez da versão empacotada:
Cargo.toml
As features padrão fornecem tudo que é necessário para a maioria dos casos de uso. Personalize features somente se tiver requisitos específicos.

Usando Rust stable

Por padrão, whatsapp-rust usa a edição Rust 2024 e habilita a feature simd, que usa a API portable_simd do Rust para codificação/decodificação otimizada do protocolo binário. Ambos exigem um toolchain Rust nightly. O projeto fixa nightly-2026-04-05 via rust-toolchain.toml. Para compilar com Rust stable, desabilite a feature simd definindo default-features = false. Você deve fazer isso em ambos whatsapp-rust e wacore — caso contrário, a unificação de features do Cargo irá reabilitar SIMD através da dependência wacore:
Cargo.toml
Definir default-features = false somente em whatsapp-rust não é suficiente se você também depende de wacore diretamente. A dependência direta de wacore habilita simd por padrão, e o Cargo mescla features entre todos os dependentes. Ambos precisam optar por sair.
O codificador/decodificador faz fallback automaticamente para caminhos escalares quando o SIMD está desabilitado. Não há diferença funcional — apenas uma pequena diferença de desempenho nas operações do protocolo binário.

Suporte a alvos de 32 bits

whatsapp-rust usa portable-atomic em vez de std::sync::atomic para operações atômicas de 64 bits. Isso significa que a biblioteca funciona em alvos de 32 bits (ARM32, MIPS, RISC-V 32, etc.) onde AtomicU64 não está disponível nativamente — portable-atomic fornece um fallback em software automaticamente. Nenhuma configuração extra é necessária. A dependência portable-atomic é incluída com a feature fallback habilitada por padrão em todos os crates (whatsapp-rust, wacore e whatsapp-rust-sqlite-storage).
Se você está compilando para um alvo embarcado de 32 bits ou fazendo compilação cruzada para armv7-unknown-linux-gnueabihf, whatsapp-rust irá compilar e rodar corretamente sem ajustes.

Exemplo com features personalizadas

Se você quiser usar apenas features específicas:
Cargo.toml

Verifique a instalação

Crie um arquivo de teste simples para verificar a instalação:
src/main.rs
Execute com:
Se você vir “whatsapp-rust installed successfully!”, está pronto para seguir para o guia Início rápido.

Implantação com Docker

whatsapp-rust inclui um Dockerfile para construir uma imagem de contêiner mínima e estaticamente vinculada. O build multi-estágio produz uma imagem baseada em scratch contendo apenas o binário compilado.

Construa a imagem

O processo de build:
  1. Usa rust:alpine com cargo-chef para cache eficiente de dependências
  2. Compila nativamente contra musl no Alpine para um binário totalmente estático
  3. Faz cache da compilação de dependências via cargo chef cook em uma camada separada para rebuilds rápidos
  4. Produz uma imagem final a partir de scratch contendo apenas o binário

Execute o contêiner

O contêiner usa /data como seu diretório de trabalho, então monte um volume lá para persistir seu banco SQLite e dados de sessão entre reinicializações. Para autenticação via pair code, passe a flag --phone:

Desligamento gracioso

O contêiner suporta desligamento gracioso sem configuração adicional. Quando a feature signal está habilitada (e está, por padrão), o bot escuta por SIGTERM e Ctrl+C, desconecta-se limpamente do WhatsApp e sai. O Docker envia SIGTERM em docker stop, então o bot encerra graciosamente sem perder o estado da sessão. Como a imagem é construída a partir de scratch, o PID 1 é o próprio binário. Ele lida com sinais diretamente — nenhum sistema init como tini é necessário.
O Dockerfile usa rust:alpine, que constrói para o alvo musl da arquitetura do host. Para compilação cruzada para outras arquiteturas, você precisa modificar a imagem base e a configuração de build no Dockerfile.

Próximos passos

Início rápido

Crie seu primeiro bot do WhatsApp em minutos