O Discord,sem o navegadordentro.
Um cliente nativo que fica perto de 130 MB de RAM com uma conta real e em 0% de CPU parado. A interface inteira é um arquivo de texto que você edita com o app aberto. Olha ela se reorganizando.
Leia antes: clientes de terceiros violam os Termos de Uso do Discord e a sua conta pode ser bloqueada, então use uma conta secundária. O modo demonstração não precisa de conta.
E esse é o app de verdade. Mesmos dados, mesmo binário:

- RAM, conta real
- ~130 MB
- CPU parado
- 0%
- temas
- 11
- electron
- 0
1.279 MB para dar bom dia.
Um cliente em Electron é um navegador inteiro fantasiado de app. Cada quadradinho é 5 MB de RAM.
| Vesktop (Electron) | Discord Phoenix (Rust) | larperCord | |
|---|---|---|---|
| RAM (PSS) | 1,279 MB | ~290 MB | ~130 MB com conta real |
| CPU parado | 12–47% | 0.1% | 0–0.4% |
| Binário em disco | 287 MB | não lançado | ~15 MB |
larperCord: 125–140 MB no uso normal de uma conta e cerca de 70 MB logo depois de abrir. O seu depende dos seus servidores, membros e imagens. O CPU parado foi medido nos 11 temas, com a reprodução automática de GIFs desligada, e um GIF animado na tela custa cerca de 2,5%. Cerca de 35 MB do PSS são o driver da NVIDIA, as bibliotecas e as fontes. Vesktop: média desde a abertura, medida com ps. Os dois no mesmo PC: Arch Linux, Hyprland, i5-2400S, GTX 1050 Ti, 1280×800. Discord Phoenix: não medido por nós e não é um teste lado a lado. É uma versão inicial para Windows 11, de um print do Gerenciador de Tarefas postado pelo CTO do Discord. Como foi medido →
A interface é um arquivo. Vai, quebra ele.
Estes são os layouts de verdade de themes/*.kdl. Mude uma largura, mova um nó, troque o nome de um componente. No app, salvar o arquivo recarrega a janela pelo inotify. Um erro aponta arquivo:linha:coluna e o tema anterior continua na tela.
Referência completa da linguagem de temas →
}Onze temas. Não onze esquemas de cor.
Mesmo binário, mesmos dados, outro arquivo. Os componentes mudam de lugar, de forma e de variante. Passe o ponteiro por cima de um print para ver o modo claro. Clique para vestir esta página inteira com as cores dele (ou aperte F2, como no app).
Fala com o gateway de verdade. É um cliente de verdade.
Tela dividida
Até três conversas lado a lado, cada uma com o histórico e a rolagem dela. A caixa de texto segue o painel em foco.

Threads e fóruns
As threads ficam abaixo do canal e abrem como qualquer conversa, com abas, rascunho e busca. Os fóruns mostram a lista de posts no lugar da conversa, com tags e “Novo post”.

Emoji e autocompletar
Emoji personalizado e figurinhas aparecem como imagem, animados inclusive. O seletor tem a lista Unicode inteira e os emojis dos seus servidores. Na caixa de texto,
@,#,:abe/abrem uma lista.
Leitura sincronizada
Não lidos e menções batem com o Discord ao abrir o app, e ler em outro aparelho limpa aqui. O canal abre na primeira não lida. As fixadas ficam no alfinete, e links do Discord abrem no app.

Caixa de entrada
Ctrl+I: DMs e menções não lidas de todos os servidores, por canal, com prévia e “marcar tudo como lido”.

Busca offline
Ctrl+F busca na memória e no cache local a cada tecla, sem internet. Filtros:
from:,in:,has:link,has:imagem,has:arquivo.
Paleta de comandos
Ctrl+K: busca aproximada de canais, DMs, servidores, temas, status e todas as opções. Esta página também tem uma. Experimente.

Vídeo na conversa
Anexos e links diretos tocam no lugar, com o FFmpeg do sistema, carregado só no primeiro play. Até 480p e cerca de 30 qps. Sem FFmpeg, o vídeo abre no navegador.

Código que parece código
Markdown do Discord, interpretado uma vez quando a mensagem chega. Blocos de código têm realce nas cores do tema e botão de copiar, e uma prévia aparece acima da caixa enquanto você digita.

Perfis completos
Banner, bio, atividade, amigos e servidores em comum, conexões, cargos e uma nota só sua.

Mensagens salvas, com anotação
Ctrl+Shift+S: favoritos que ficam só no seu computador. Nada vai para o Discord.

Alertas e filtros
Palavras de alerta contam como menção, o filtro recolhe mensagens, “ignorar” esconde alguém sem bloquear e o modo foco silencia tudo menos DMs e menções. Tudo local.

E o resto
Respostas, edição, reações, botão direito em tudo, seleção de texto entre mensagens, imagens e GIFs, pastas de servidores, abas de canal, várias contas, rascunho por canal, proxy e Tor, inglês e português, teclas de vim opcionais. Tour completo →

Chamadas de verdade. Com criptografia de ponta a ponta.
aead_xchacha20_poly1305_rtpsize
- Mixer com um volume para cada pessoa. Cada pessoa é um stream de áudio próprio no mesmo dispositivo de saída.
- Sem call, sem custo. A thread de voz só nasce quando você entra. Antes disso, o áudio só abre se você entrar nas configurações de voz.
- Seu microfone, suas regras. Escolha os dispositivos, mesmo no meio da call. Detecção de voz com limiar automático ou aperte para falar, filtro passa-altas, porta de ruído e supressão de ruído com RNNoise, medidor ao vivo e teste de microfone.
- Limites sinceros. O aperte para falar só funciona com a janela em foco. Sem compartilhamento de tela nem câmera. Guia de voz →
Lua, numa jaula.
Coloque um .lua em ~/.config/larpercord/plugins/ para somar painéis, entradas no botão direito, notas embaixo das mensagens, comandos e atalhos, sem recompilar nada. Anti-golpe, radar de CVE, cartões do GitHub, o que perdi, tradução, lembretes, destaques, links limpos, e links e arquivos vêm com o app.
-- @name CVE notes
-- @capabilities messages, decorate, http
-- @hosts cveawg.mitre.org
larper.on("message", function(msg)
local id = msg.content:upper():match("CVE%-%d+%-%d+")
if not id then return end
larper.http.get("https://cveawg.mitre.org/api/cve/" .. id, function(res)
local cve = res.ok and larper.json.decode(res.body)
local cna = cve and cve.containers and cve.containers.cna
if cna and cna.title then
larper.decorate(msg.id, { note = id .. ": " .. cna.title })
end
end)
end, { contains = { "cve-" } })- Numa thread só deles. Um plugin lento não engasga a interface. Sem plugin ligado, a thread nem existe.
- Sem arquivos, sem processos, sem sockets.
io,os.execute,require,loadedebugsimplesmente não existem. A única rede é HTTPS para hosts que você aprova um a um, sem o seu token nem cookies. - Cerca de 5 milhões de instruções por chamada. Um
while true do endé parado e não congela o app. Opcallnão segura esse erro. - 8 MB por plugin. Cada um roda num Lua separado. Depois de 10 erros, ele é parado.
larper.sendsó funciona a partir de um gesto seu. Responder sozinho transformaria a conta num self-bot, então isso é bloqueado de propósito. API de plugins →

Os dados são da demonstração, mas as notas de CVE e do GitHub são respostas de verdade desses serviços. Nada sai antes de você aprovar o host no cartão do plugin.
- Anti-golpe. Links de Nitro grátis,
dlscord-nitro.ru, endereços em outro alfabeto, um link que mostra um site e abre outro: tudo em vermelho. Roda no seu computador, sem rede. - Radar de CVE. Alguém escreve
CVE-2021-44228, e a severidade, a nota CVSS e um resumo aparecem embaixo da mensagem, vindos do registro oficial. - Cartões do GitHub.
dono/repo#123e links do GitHub ganham título, estado e estrelas. Um repositório renomeado aparece com o nome atual. - O que perdi.
/perdiresume as não lidas: quem falou, quem chamou você, que perguntas ficaram sem resposta, links e arquivos, com um clique até cada um.
Sem mágica. Dez decisões chatas.
- Dorme quando nada acontece. O laço principal espera em
SDL_WaitEvent. Rede, inotify e relógio acordam o app com eventos. Sem animação, sem redesenho. - Nada de navegador. Tudo é desenhado com o
ImDrawListdo Dear ImGui sobre o SDL_Renderer. - Fontes mapeadas, não copiadas. Cada arquivo de fonte é um
mmapusado por todos os pesos, então só as páginas lidas ficam na RAM. - Só o driver de vídeo necessário. Em máquinas só com NVIDIA, o glvnd também carregaria o Mesa e o LLVM à toa. O app detecta e evita.
- Markdown interpretado uma vez. Quando a mensagem chega. Depois, a interface só faz layout dos trechos, com cache de altura por largura.
- Lista virtualizada. Busca binária pelo primeiro item visível e desenha só o que está na tela.
- Memória com teto. 1.500 mensagens por canal e 3.000 no total. Conversas esquecidas são descarregadas, e o cache de imagens tem um teto fixo de 64 MB.
- fontconfig liberado. Depois de resolver as fontes:
FcFiniemalloc_trim. - Sem cursor piscando. Um cursor piscando manteria a CPU acordada à toa.
- As coisas nascem quando você pede. A thread de voz na primeira call, o FFmpeg no primeiro vídeo. Sem plugin ligado, não há thread de plugins nem Lua, e nada se gasta por mensagem, tecla ou quadro.
A interface nunca muda dados direto. Ela só lê o Store e pede ações, e é por isso que trocar o gateway de demonstração pelo real não toca na interface. Arquitetura →
}O que funciona hoje. E o que não.
| Área | Estado | Detalhe |
|---|---|---|
| Mensagens, DMs, reações, respostas | funciona | Enviar, editar, excluir, histórico, menções |
| Imagens | funciona | Avatares e anexos, com cache de tamanho fixo |
| Vídeo na conversa | funciona | Anexos e links diretos, precisa do FFmpeg do sistema |
| Caixa de entrada, salvas, busca offline | funciona | Tudo local, dá para desligar e apagar |
| Contas, proxy, plugins em Lua | funciona | |
| Threads e fóruns | funciona | Threads aninhadas, lista de posts dos fóruns, criar threads e posts |
| Emoji personalizado, figurinhas, autocompletar | funciona | Animados inclusive. O seletor avisa quando um emoji precisa de Nitro |
| Leitura, fixadas, links do Discord | funciona | Sincronizada com os seus outros aparelhos |
| Temas | funciona | 11 embutidos, claro e escuro, recarregam ao salvar |
| Voz | parcial | E2EE, mixer, seletor de dispositivo, aperte para falar e filtros funcionam. O aperte para falar precisa da janela em foco |
| Permissões | parcial | Canais trancados, voz, threads e fóruns são respeitados. A caixa de texto nos canais comuns, as reações e a lista de membros ainda não consultam |
| Notificações | parcial | Pelo notify-send. Clicar não abre o canal, sem bandeja do sistema |
| Acessibilidade | parcial | Escala de fonte, reduzir movimento, paleta por teclado. Sem foco visível nem alto contraste |
| Plataformas | parcial | Linux e Windows 10/11. Testado todo dia no Arch com Hyprland; o Windows é novo. |
| Entrar em servidor por convite | falta | Convites viram um cartão e abrem no navegador |
| Compartilhar tela e câmera | falta |
--demo, o app roda com dados falsos e não conecta em nada.
Baixe. Rode.
Não precisa de conta para dar uma olhada: o modo demonstração não conecta em nada. Depois ele se atualiza sozinho, e toda atualização é assinada.
Linux x86_64
Baixar para Linux ↓Um arquivo só, que roda em distros de 2022 para cá (glibc 2.34). Antes de cada versão, ele é aberto em Ubuntu, Debian, Fedora, openSUSE e Arch. Marque como executável com chmod +x e rode.
Ou instale, listando as bibliotecas que faltam:
curl -fsSL https://raw.githubusercontent.com/RshaCuDeVidro/larperCord/main/install.sh | sh
Windows 10 / 11, x64
Baixar para Windows ↓Descompacte e abra o larpercord.exe. O programa ainda não tem assinatura de código, então o Windows pode avisar na primeira vez.
Ou instale para o seu usuário, no PowerShell:
irm https://raw.githubusercontent.com/RshaCuDeVidro/larperCord/main/install.ps1 | iex
Todas as versões e checksums · O que mudou
}Três comandos. Sem conta.
# Arch Linux
sudo pacman -S zig sdl3 freetype2 fontconfig curl zlib libwebp opus openssl \
inter-font ttf-jetbrains-mono noto-fonts-emoji
# Compilar (Zig 0.17)
zig build -Doptimize=ReleaseFast
# Modo demonstração: dados falsos, não conecta em nada
./zig-out/bin/larpercord --demo --theme subsoloPrefere não compilar? Baixe para Linux ou Windows.
O mascote viu o seu uso de RAM. Não ficou impressionado.
English