- Um engine JavaScript leve baseado em PrimJS, compilado para WebAssembly, oferecendo segurança e alta portabilidade
- Estrutura robusta de sandbox com segurança de memória, restrição de recursos da linguagem JavaScript e filosofia de
fail-fast, garantindo segurança e escalabilidade
- É possível executar centenas de VMs em paralelo até mesmo em uma única máquina, com limites configuráveis para memória e uso computacional (
gas) dos scripts
- Pode ser embutido em praticamente qualquer plataforma com um único arquivo
.wasm, sem builds complexos nem FFI, e também é muito pequeno, com cerca de 800 KB
- Até 28% mais desempenho que o QuickJS e, em ambientes com JIT, velocidade de execução próxima da nativa
Hako: um engine JavaScript pequeno, rápido e seguro
O que é o Hako?
- Um engine JavaScript portátil, focado em segurança e de alto desempenho, desenvolvido com base no PrimJS
- O nome Hako vem do japonês e significa “caixa” (箱)
- Um engine baseado em WebAssembly, projetado para que qualquer pessoa possa embuti-lo facilmente em qualquer ambiente
Segurança: memória segura e restrição de funcionalidades
- Escrito em C/C++, mas compilado para WebAssembly → garante segurança de memória e sandbox de execução
- Também é possível restringir funcionalidades do próprio JavaScript:
- remover funções específicas
- impedir alocação de memória
- limitar tempo de execução, uso de memória,
gas etc.
- Com
VMContext, é possível identificar usuários maliciosos e controlar recursos
- A estratégia de fail-fast interrompe cedo códigos instáveis ou com uso excessivo de recursos
Facilidade de embutir: basta um único .wasm
- Não usa Emscripten → pode ser embutido em qualquer runtime WebAssembly moderno
- Não requer wrappers FFI para várias linguagens → pode ser usado sem processos de build complexos
- Exemplo: exemplo de como embutir o Hako em Go
- O build de release é composto por apenas um arquivo
.wasm de 800 KB
Desempenho: mais rápido que o QuickJS
- Assim como o PrimJS é mais rápido que o QuickJS, o Hako também oferece melhoria média de 28% em desempenho em comparação com o QuickJS
- Otimizações com SIMD e melhorias em alguns hot paths maximizam o desempenho
- Não há perda de desempenho por causa do WebAssembly — em V8, Wasmtime e JavaScriptCore, fica em nível quase nativo graças às otimizações JIT
- APIs de medição de desempenho e profiling também já vêm embutidas
Limitações e planos futuros
- Alguns recursos usados no PrimJS (interpretador de templates, snapshots de GC) ainda não têm suporte completo
- Como a ferramenta de snapshot da ByteDance ainda não foi open source, o desenvolvedor está implementando uma ferramenta própria
- No momento, está em fase beta inicial, e o feedback é muito importante para estabilizar a API/ABI
- GitHub - hako
2 comentários
https://github.com/fernvenue/hako-go-example
parece ser um link inexistente. O exemplo de embedding em Go
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
aparentemente é este.
Ah, parece que mudou. Já corrigi. Obrigado.