Sobre o projeto

qzjs fornece um runtime QuickJS-ng incorporável com uma Platform Abstraction Layer (PAL) para aplicações C. Ele executa um engine ES2023 completo em seu próprio thread interno com um loop de eventos libuv, eliminando a necessidade de bombeamento de loop de eventos no lado do host. O runtime implementa 21 módulos compatíveis com WinterTC incluindo fetch, console, crypto.subtle, ReadableStream, setTimeout, fs, URL, TextEncoder, e mais. Principais capacidades: - Suporte a ES2023 com inicialização rápida (~4,82ms de mediana após lazy WAMR init) e baixo footprint de memória - Execução nativa libuv: qzjs possui um thread interno + loop libuv; o host nunca toca JS diretamente - HTTP/TLS streaming via mbedTLS com decodificação de transferência chunked e verificação de certificado - Extensões nativas para compressão (miniz), crypto (mbedTLS), codecs de texto (UTF-8/Base64) e WebAssembly (WAMR padrão, wasm3 alternativo) - Execução multi-contexto com soft suspend/resume para disco; Web Workers executam como threads paralelas reais ou processos isolados (padrão desde o marco multi-process M-P2) - Mensagens thread-safe host ↔ runtime via JSON (qz_post_message / message_cb) e postMessage/onmessage no lado JS - Executável CLI standalone para executar APIs Web WinterTC diretamente (sem APIs Node.js) - DAP step-debugger integrado à biblioteca (ative com -DQZ_BUILD_DEBUGGER=ON) - Suite de testes abrangente com GoogleTest, mock_libuv para testes offline determinísticos e categorias de teste rotuladas (offline, network, benchmark, test262) O sistema de build usa CMake com feature toggles (QZ_WITH_*) para extensões opcionais, perfis de build (minimal/standard) e targets para testes, exemplos e debugger. Todas as dependências (QuickJS-ng, libuv, mbedTLS, miniz, WAMR, wasm3) são construídas a partir da fonte como git submodules sob C99 estrito. A reconstrução do polyfill usa npm devDependencies (esbuild, urlpattern-polyfill, @ungap/structured-clone, web-streams-polyfill) mas elas não são enviadas em binários. Arquitetura: a aplicação host se comunica com o runtime qz_t via mensagens JSON thread-safe. O runtime executa em seu próprio thread com loop libuv, JSContext e ponte I/O. Por padrão (QZ_PROCESS_MODEL=ISOLATED), host e runtime são processos separados se comunicando via envelopes com moldura FlatBuffers sobre um socketpair para isolamento de falhas. Licenciado MIT.