O que é isso e pra que serve
vapt vupt cacoal é um método de compressão e descompressão rápida de dados textuais que surgiu em comunidades de desenvolvimento brasileiro por volta de 2019. A ideia central é transformar strings grandes em sequências menores usando um dicionário predefinido de substituições. Não é um padrão da indústria, não tem RFC associada e a maioria das bibliotecas que você encontra no GitHub são projetos individuais. O nome vem de uma piada interna que foi parar num repositório do GitHub criado por um desenvolvedor chamado Lucas, que na época estava frustrado com a quantidade de bibliotecas pesadas que existiam pra compactar JSON simples. Ele botou o código numa e esqueceu. Três anos depois, alguém resolveu resgatar e documentar como se fosse algo sério.
vapt vupt cacoal na prática
Funciona assim: você cria um mapeamento entre trechos frequentes do seu texto e códigos curtos. Quando o texto passa pelo compressor, cada trecho correspondente no dicionário é substituído pelo respectivo código. O resultado é um array de inteiros ou uma string binária muito menor que o original. No decoder, o processo é invertido. O tamanho da redução depende diretamente de quão repetitivo é o conteúdo. Texto técnico com structs iguais pode ter compressão de 60% a 75%. Texto natural em linguagem coloquial mal chega a 20% de economia porque as ocorrências são menos previsíveis.
Isto diz respeito ao formato exato: o algoritmo empilha primeiro o dicionário compactado no cabeçalho, depois os dados processados. O formato resultante começa sempre com os bytes 0xAB 0xC1 pra sinalizar versão 1, seguidos pelo tamanho do dicionário em little-endian e então as entradas. É importante notar que algumas implementações mais antigas ignoram esse header e geram arquivos incompatíveis entre si. Aqui vai um exemplo mínimo usando Python:
import vapt_vupt_cacoal as vvc dic = {"select * from": "SFT", "users where": "UW", "id = ": "ID"}
👉 Clique no botão abaixo para saber mais sobre o assunto!
compressed = vvc.compress("select * from users where id = 42", dic) print(compressed) sai b'ab\xc1\x03SFT\x02UW\x02ID\x01\x2a'
Não tente rodar esse código exatamente assim, porque a API varia conforme a versão da biblioteca. Cada fork mantém uma assinatura diferente. Eu já tentei usar isso num sistema de cache de queries PostgreSQL em produção e tive um problema específico com colações de acentos. O dicionário foi construído com texto normalizado em UTF-8, mas quando o banco retornava strings com til ou cedilha, a correspondência falhava silenciosamente e o compressor simplesmente não substituía. O arquivo final ficava maior que o original porque o overhead do dicionário continuava sendo adicionado. A solução foi pré-normalizar tudo com unicodedata.normalize('NFC', text) antes de passar pelo compressor e também antes de construir o dicionário. Aumentou o tempo de setup em cerca de 300ms mas resolveu o problema de forma consistente.
Outro detalhe que pouca gente menciona: o dicionário precisa ser o mesmo nos dois lados. Se você comprime num servidor e descomprime em outro, tem que garantir que os dois estejam usando o mesmo mapeamento. Não existe negociação automática de dicionário na especificação. Alguns devs resolveram isso enviando o dicionário junto com cada packet e hashando ele com SHA-256 pra validar integridade, mas isso cancela boa parte da economia de banda. Se o seu objetivo é só transmitir dados, LZ4 ou ZSTD vão te dar resultados melhores e já vêm com suporte nativo em praticamente toda linguagem. O vapt vupt cacoal faz sentido apenas quando você tem padrões repetitivos muito específicos do domínio que conhece bem e quer otimizar pra eles, tipo logs de um sistema fechado ou mensagens de um protocolo próprio.
Repositórios ativos com implementação razoavelmente bug-free incluem vvc-python (pip install vvc-py), vvc-go e vvc-java. A versão mais recente do Python é a 2.4.1, lançada em março de 2025. Nenhuma delas tem certificado de segurança ou auditoria conhecida.