Pré-requisitos
Antes de instalar whatsapp-rust, certifique-se de ter:- Rust 1.94 ou mais novo — o MSRV do workspace, e todas as features padrão compilam com Rust stable. Veja Usando Rust 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
whatsapp-rust reexporta a pilha inteira (wacore, wacore_binary, waproto e todas as implementações incluídas), então uma linha de dependência basta para a maioria dos projetos:
Cargo.toml
whatsapp_rust::waproto::whatsapp (apelidado como wa no prelude), whatsapp_rust::wacore, whatsapp_rust::wacore_binary, whatsapp_rust::store::SqliteStore, whatsapp_rust::http::UreqHttpClient e whatsapp_rust::transport::TokioWebSocketTransportFactory. O mesmo vale para os crates de terceiros cujos tipos aparecem na API pública (anyhow, async_trait, bytes, chrono, futures, serde, serde_json, async_channel, buffa): você nunca precisa adicioná-los nem fixar suas versões.
Feature flags
whatsapp-rust suporta diversas features opcionais:
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
waproto tem suas próprias feature flags:
O
build.rs sempre executa e gera whatsapp.rs no OUT_DIR — nenhuma feature flag é necessária para builds normais. 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 (buffa gera SCREAMING_SNAKE_CASE por padrão).
Cargo.toml
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
O whatsapp-rust já distribuiu um histórico de conversas/mensagens opcional, o
whatsapp-rust-chat-store. Nós o extraímos para seu próprio repositório, já que materializar um fluxo de eventos em conversas, prévias e contadores de não lidas é uma decisão de aplicação, não de protocolo. Ele não é mais distribuído a partir de whatsapp-rust — o link será adicionado aqui assim que o repositório substituto for publicado.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
whatsapp-rust usa a edição Rust 2024 e declara um MSRV de 1.94, ambos suportados pelo Rust stable, e o conjunto de features padrão não tem nenhuma dependência exclusiva do nightly —cargo build/cargo add whatsapp-rust funciona com Rust stable de fábrica, sem precisar desabilitar nenhuma feature.
O
rust-toolchain.toml do próprio projeto ainda fixa um compilador nightly (nightly-2026-06-16), mas apenas para flags de build internas focadas em tamanho de binário — -Zshare-generics e linking lld/ICF, definidas para todo o workspace em .cargo/config.toml, mais -Zbuild-std somente para o build da imagem Docker (veja a seção de implantação com Docker abaixo) — não para nenhuma feature de linguagem que os crates publicados precisem. Essa fixação rege a compilação do workspace whatsapp-rust em si; ela não afeta seu projeto quando você depende de whatsapp-rust via crates.io ou git.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 (fixado em uma versão específica com--locked) para cache eficiente e reproduzível de dependências - Detecta a triple de alvo do host em tempo de build —
docker buildx build --platform linux/arm64produz binários nativos sem alterações no Dockerfile - Habilita
-Zshare-generics=y(−5,6% no.text) e recompilastdcom o perfil de release (-Zbuild-std, −~300 KiB adicionais) para participar do LTO gordo — juntas, essas duas flags reduzem o.textem cerca de 8%; a série completa de otimizações (#842–#845) alcançou 15% no total - Faz cache da compilação de dependências via
cargo chef cook --targetem 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 detecta a triple de alvo do host em tempo de build via
rustc -vV, então docker buildx build --platform linux/arm64 (ou qualquer outra plataforma suportada) funciona nativamente sem modificar o Dockerfile. As flags de build exclusivas do nightly (-Zshare-generics, -Zbuild-std) se aplicam apenas dentro desta imagem — consumidores stable e invocações locais de cargo build não são afetados.Próximos passos
Início rápido
Crie seu primeiro bot do WhatsApp em minutos