Cole JavaScript e copie uma versão ofuscada que roda com o mesmo resultado: nomes locais trocados, strings com escapes hexadecimais, acesso em colchetes e comentários removidos.
Funciona localmente no seu navegadorCole código JavaScript e a ferramenta devolve o mesmo programa com os nomes locais trocados, as strings escritas como escapes \xNN e \uNNNN, o acesso com ponto convertido em colchetes e os comentários removidos. O código continua rodando com o mesmo resultado; tudo é processado nesta aba e nada é enviado.
É ofuscação para dificultar a leitura casual, não criptografia. A lógica continua ali, então não conte com ela para esconder chaves de API ou regras de negócio, e guarde o original legível: depurar a saída na mão é desconfortável.
Os comentários são removidos, mas as quebras de linha ficam, então apagar uma nota // nunca engole a linha seguinte. Identificadores declarados dentro do trecho — variáveis, funções, parâmetros, classes, capturas de catch — são renomeados para nomes curtos gerados seguindo a cadeia de escopos; nomes que vêm de fora, incluindo globais, permanecem iguais.
As strings são reescritas caractere a caractere como escapes \xNN ou \uNNNN, e a diretiva "use strict" fica como está. O acesso com ponto vira colchetes: console.log passa a console["\x6c\x6f\x67"], e o encadeamento opcional segue a mesma regra (a?.b passa a a?.["b"]). Depois de new e import a sintaxe não é tocada, e campos #privados ficam intactos.
Não é criptografia nem minificação. As strings ofuscadas ficam maiores, não menores, e um leitor determinado ainda consegue acompanhar a lógica — o objetivo é desencorajar cópia e leitura rápida, não tornar a reversão impossível.
É uma passada única sobre o código, não um empacotador: não resolve importações, não transpila sintaxe moderna e não muda como o arquivo é carregado. Colar o mesmo script duas vezes gera saídas diferentes, porque os nomes gerados dependem do conteúdo; bom para distribuir, ruim para comparar builds.
A saída é testada para devolver os mesmos valores da entrada: classes, arrow functions, templates com expressões ${} aninhadas, async/await, spread, encadeamento opcional, coalescência nula e literais de regex passam nos testes. Código de módulo mantém os nomes de import e export, então continua carregando como módulo.
Scripts que usam eval ou with não são renomeados — pular o renome é a única opção segura ali —, mas o escapamento e a conversão para colchetes continuam valendo. Um arquivo de cerca de 80 KB é processado em poucas dezenas de milissegundos; um script já ofuscado pode ser ofuscado de novo.