Construí um cliente de Discord nativo em Rust que usa apenas ~30MB de RAM (e 0.1% de CPU)
Fala pessoal do TabNews! 👋
Se você joga no PC ou trabalha com várias abas e ferramentas pesadas abertas ao mesmo tempo, provavelmente já passou por isso: abrir o Discord oficial só para conversar com amigos em call e ver o Gerenciador de Tarefas acusar 500MB a 800MB+ de memória RAM e picos de uso de CPU que provocam aqueles micro-stutters (micro-engasgos) chatos no meio de uma partida.
O motivo é conhecido: o Discord oficial roda sobre o Electron (Chromium + Node.js), o que significa carregar um navegador web completo em segundo plano.
Incomodado com isso, decidi encarar um desafio: é possível recriar a essência do Discord — chat de texto e canais de voz com áudio de alta fidelidade — em um binário nativo ultra-leve em Rust?
O resultado é o Litecord, um projeto 100% open source que consome menos de 35MB de RAM e < 0.1% de CPU em idle. Compartilho abaixo as decisões de arquitetura e os desafios técnicos que enfrentei.
🛠️ A Escolha da Stack: Por que não usar WebView/Tauri?
A primeira tentação seria usar Tauri (que substitui o Chromium pelo WebView do sistema). Porém, para atingir o objetivo de performance máxima e consumo irrisório de memória, decidi ir direto ao metal:
- Linguagem: Rust (2021 Edition) — controle total de memória, zero runtime overhead e segurança para processamento de áudio concorrente em tempo real.
- Interface Gráfica: Slint UI — um framework moderno de GUI declarativa compilada nativamente. O Slint não renderiza HTML/CSS; ele compila o layout direto para instruções gráficas nativas (via FemtoVG/OpenGL ou renderizador de software), gerando uma interface fluida a 60 FPS com menos de 10MB de pegada de memória.
- Pipeline de Áudio: CPAL (Cross-Platform Audio Library) + decodificador nativo Opus (48kHz).
- Async Runtime: Tokio para orquestrar WebSockets, chamadas REST da API do Discord e o loop de eventos de interface sem travar a thread principal.
🔬 Desafios Técnicos Interessantes
1. Voz em Tempo Real e Criptografia DAVE (E2EE)
O Discord recentemente começou a implementar o protocolo DAVE (MLS - RFC 9420) para criptografia de ponta a ponta nas chamadas de voz.
- Para garantir que a voz não pipocasse ou ficasse "robótica" quando a GPU/CPU do computador estivesse em 100% de carga (durante um jogo pesado), implementamos Opus PLC (Packet Loss Concealment) com um jitter buffer adaptativo de 40ms e resampler cúbico Hermite a 48kHz.
2. Login Seguro por QR Code (Discord Remote Auth v2)
Em vez de pedir para o usuário colar tokens manualmente ou inspecionar cabeçalhos de rede:
- O Litecord implementa o protocolo Remote Auth v2 do Discord via WebSocket com pares de chaves RSA-2048 transitórias.
- O app gera um QR Code na tela; você escaneia pelo aplicativo do Discord no celular e autoriza o login com 1 toque.
- No Windows, o token da sessão é persistido no disco criptografado através da API nativa Windows DPAPI (
CryptProtectData), garantindo que nenhum outro processo ou usuário não autorizado no PC consiga ler o segredo.
3. Ducking de Fala Dinâmico (Foco no IGL / Líder do Squad)
Em chamadas com muitas pessoas falando ao mesmo tempo ou bots de música tocando no canal, a comunicação tática fica caótica. Criamos um sistema de Prioridade de Fala (P:1, P:2, etc.):
- Quando o líder/shot-caller fala, o volume de todos os outros participantes e bots é atenuado suavemente em tempo real (ducking inteligente), voltando ao normal assim que ele termina a frase.
4. DeepSleep na Bandeja do Sistema
Ao minimizar o Litecord para a bandeja do sistema (System Tray):
- Todos os loops de renderização visual e atualizações de UI do Slint são completamente suspensos (
0.0% de CPU). - Apenas a thread assíncrona leve de recepção de áudio RTP/Opus continua ativa, consumindo recursos praticamente imperceptíveis enquanto você joga.
📊 Comparativo: Discord Oficial vs Litecord
| Métrica | Discord Oficial (Electron) | Litecord (Nativo em Rust) |
|---|---|---|
| Uso de CPU (Idle) | 1.5% - 4.5% | < 0.1% (DeepSleep: 0.0%) |
| Uso de CPU (Voz Ativa) | 4.0% - 8.0% | ~0.4% - 0.8% |
| Uso de Memória RAM (Idle) | ~400 MB - 750 MB | ~28 MB - 35 MB |
| Uso de Memória RAM (Voz) | ~600 MB - 900 MB | ~32 MB - 45 MB |
| Tamanho do Executável | ~180 MB | ~8 MB (Standalone) |
| Tempo de Inicialização | 4 a 9 segundos | < 200 milissegundos |
📦 Código Aberto & Como Testar
O projeto é 100% open source sob licença MIT e já conta com executáveis prontos gerados pelo GitHub Actions:
-
🪟 Windows: Instalador
.exee versão Portátil.zip -
🐧 Linux: Pacote nativo
.tar.gz(testado e compatível com Ubuntu/Arch) -
🔗 Repositório no GitHub: https://github.com/Ak4ai/Litecord
-
🌐 Página do Projeto: https://ak4ai.github.io/Litecord/
💬 Gostaria do Feedback de Vocês!
Quais outras otimizações ou recursos essenciais vocês acham que fariam sentido manter em um cliente focado puramente em leveza e baixo consumo? Fiquem à vontade para testar, abrir issues ou mandar PRs! 🦀🚀