Um mecanismo de UI nativa multiplataforma em que a lógica do app roda em Go e cada plataforma renderiza usando suas próprias views nativas.
pocket-nexus/pocketjs
Runtime de UI em TypeScript que renderiza pixels nativos em dispositivos portáteis, desktops e telas embarcadas, sem DOM nem WebView.
- Estrelas
- 1,837
- Forks
- 104
- Issues abertas
- 93
- Último commit
- há 22 horas
O que é?
PocketJS é um runtime de aplicações para criar interfaces renderizadas como pixels nativos, em vez de usar um mecanismo de navegador. As aplicações são escritas em TypeScript com componentes Solid, Vue Vapor ou Octane; os três adaptadores renderizam para uma única árvore nativa. Um guest QuickJS executa a aplicação, enquanto um core em Rust faz o layout flexbox e a renderização em uma única thread e dentro de um único processo. Assim, o pipeline não inclui DOM, mecanismo CSS nem WebView.
A estilização usa um subconjunto fixo do Tailwind, compilado em uma tabela de estilos incorporada ao build. Com isso, os atributos class são resolvidos por consulta no dispositivo, sem cascata, resolução de especificidade ou reflow. Um contrato da aplicação (pocket.app.json) declara o viewport e as APIs necessárias, e um único bundle pode ser validado para destinos com diferentes densidades. Timelines de keyframes e curvas de spring são incorporadas à mesma tabela e avançadas pelo próprio relógio do core em Rust, permitindo animar uma tela sem JavaScript a cada frame.
O runtime avança a aplicação uma chamada frame(buttons) por vez e trata o tempo como um contador de frames. Assim, efeitos assíncronos são aplicados nos limites dos frames, e os testes podem reproduzir uma sessão byte a byte. Ele já foi inicializado em PSP, PS Vita, iOS, macOS, Symbian, leitores de e-ink PocketBook, hardware ESP32-P4 e no navegador por meio de um core WebAssembly. O repositório também inclui Pocket3D, uma stack 3D nativa para hardware, e MicroTS, um compilador ahead-of-time que compila views e models TypeScript para Rust.
Recursos principais
- 01Os adaptadores Solid, Vue Vapor e Octane renderizam para uma única árvore nativa usando o mesmo guest QuickJS.
- 02Um subconjunto fixo do Tailwind é incorporado a uma tabela de estilos durante o build e resolvido por consulta, sem parser CSS nem reflow.
- 03Timelines de keyframes e curvas de spring são avançadas pelo relógio do core em Rust, dispensando JavaScript a cada frame para animações.
- 04As aplicações avançam uma chamada frame(buttons) por vez, com efeitos assíncronos enfileirados nos limites dos frames para permitir reprodução determinística.
- 05Módulos nativos são carregados como drivers de kernel: só os cores necessários para a aplicação, como net, audio ou 3D, entram no build.
- 06Um contrato pocket.app.json declara o viewport e as APIs necessárias para que um único bundle possa ser usado em telas de diferentes densidades.
Casos de uso
- Criar aplicações de UI e interfaces de jogos para dispositivos portáteis como PSP, PS Vita e Nintendo 3DS.
- Criar interfaces leves para microcontroladores como ESP32-P4 ou leitores de e-ink.
- Distribuir aplicações desktop que renderizam nativamente em um único processo, em vez de usar uma WebView.
- Executar testes de UI determinísticos, com reprodução frame a frame, no CI e sem instabilidade causada por medições de tempo real.
Início rápido
- 1
Crie um novo app com o PocketJS CLI
pocket create my-app - 2
Verifique o app em um dispositivo de destino, como o PSP
pocket check --target psp
Antes de usar
- O compilador ahead-of-time do MicroTS ainda está em desenvolvimento.
- No desktop, o README informa que o uso da CPU aumenta conforme o documento fica mais longo, pois o editor reorganiza as quebras de linha do documento inteiro a cada tecla pressionada.
Em coleções
Tópicos
Perguntas frequentes
- O que é pocketjs?
- Runtime de UI em TypeScript que renderiza pixels nativos em dispositivos portáteis, desktops e telas embarcadas, sem DOM nem WebView. PocketJS é um runtime de aplicações para criar interfaces renderizadas como pixels nativos, em vez de usar um mecanismo de navegador. As aplicações são escritas em TypeScript com componentes Solid, Vue Vapor ou Octane; os três adaptadores renderizam para uma única árvore nativa. Um guest QuickJS executa a aplicação, enquanto um core em Rust faz o layout flexbox e a renderização em uma única thread e dentro de um único processo. Assim, o pipeline não inclui DOM, mecanismo CSS nem WebView.
- pocketjs é gratuito? Qual é a licença?
- pocketjs é open source sob a licença MIT. Confira os termos da licença antes de usá-lo em produtos comerciais.
- pocketjs ainda é mantido?
- Manutenção ativa. O último commit de pocketjs foi em 6 de nov. de 2026.
- Para que posso usar pocketjs?
- Criar aplicações de UI e interfaces de jogos para dispositivos portáteis como PSP, PS Vita e Nintendo 3DS. Criar interfaces leves para microcontroladores como ESP32-P4 ou leitores de e-ink. Distribuir aplicações desktop que renderizam nativamente em um único processo, em vez de usar uma WebView. Executar testes de UI determinísticos, com reprodução frame a frame, no CI e sem instabilidade causada por medições de tempo real.
- Como instalar pocketjs?
- Crie um novo app com o PocketJS CLI: pocket create my-app Verifique o app em um dispositivo de destino, como o PSP: pocket check --target psp
- Onde consigo pocketjs?
- O código-fonte e as instruções de instalação estão no GitHub: https://github.com/pocket-nexus/pocketjs
Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.
Projetos relacionados
Uma engine em Rust para criar interfaces nativas multiplataforma, com apps em Rust ou TSX renderizados com os widgets de cada plataforma.
Uma biblioteca de UI em C, gratuita e com licença MIT, para criar interfaces gráficas em dispositivos embarcados, de MCUs pequenos a MPUs com Linux.
Um framework Go para criar apps desktop com frontend web no webview do sistema operacional ou UI nativa renderizada na GPU.
Um toolkit de GUI para Python que renderiza apps com os widgets nativos de cada sistema operacional.
Framework para criar apps nativos para iOS, Android e visionOS com JavaScript ou TypeScript, usando diretamente a UI e as APIs nativas.