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-05viarust-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 seuCargo.toml:
Feature flags
whatsapp-rust suporta diversas features opcionais:| Feature | Descrição | Incluída por padrão |
|---|---|---|
tokio-runtime | Habilita a implementação TokioRuntime do trait Runtime. Também necessária para TypedCache::invalidate_all() em backends de cache personalizados | ✅ Sim |
tokio-native | Runtime Tokio multi-thread (tokio/rt-multi-thread) | ✅ Sim |
tokio-transport | Transporte WebSocket Tokio | ✅ Sim |
ureq-client | Cliente HTTP Ureq | ✅ Sim |
sqlite-storage | Backend de armazenamento SQLite | ✅ Sim |
moka-cache | Cache em memória Moka | ✅ Sim |
simd | Codificação/decodificação do protocolo binário otimizada com SIMD (requer Rust nightly) | ✅ Sim |
signal | Manipulação de sinais Unix (desligamento gracioso em SIGTERM/Ctrl+C) | ✅ Sim |
danger-skip-tls-verify | Pula a verificação TLS (inseguro) | ❌ Não |
debug-snapshots | Snapshots de protocolo para debug | ❌ Não |
debug-diagnostics | API de diagnóstico de memória (MemoryDiagnostics) | ❌ Não |
wacore tem uma feature adicional para alvos de navegador WASM:
| Feature | Descrição | Incluída por padrão |
|---|---|---|
js | Habilita geração de números aleatórios compatível com navegador via getrandom/wasm_js para alvos wasm32 | ❌ Não |
js em wacore:
Cargo.toml
waproto tem suas próprias feature flags:
| Feature | Descrição | Incluída por padrão |
|---|---|---|
generate | Habilita prost-build para regenerar código protobuf a partir de whatsapp.proto. Necessário apenas ao modificar o arquivo .proto | ❌ Não |
serde-deserialize | Adiciona o derive Deserialize e #[serde(default)] a todos os tipos protobuf | ❌ Não |
serde-snake-case | Aceita nomes de variantes de enum em snake_case durante a desserialização (implica serde-deserialize) | ❌ Não |
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
whatsapp-rust-sqlite-storage tem suas próprias feature flags:
| Feature | Descrição | Incluída por padrão |
|---|---|---|
bundled-sqlite | Empacota o SQLite (compila a partir do código-fonte, sem biblioteca de sistema necessária) | ✅ Sim |
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 featuresimd, 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
Suporte a alvos de 32 bits
whatsapp-rust usaportable-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).
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
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 emscratch contendo apenas o binário compilado.
Construa a imagem
- Usa
rust:alpinecom cargo-chef para cache eficiente de dependências - Compila nativamente contra musl no Alpine para um binário totalmente estático
- Faz cache da compilação de dependências via
cargo chef cookem uma camada separada para rebuilds rápidos - Produz uma imagem final a partir de
scratchcontendo apenas o binário
Execute o contêiner
/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 featuresignal 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