Un motor de UI nativa multiplataforma en el que la lógica de la app se ejecuta en Go y cada plataforma dibuja con sus propias vistas nativas.
pocket-nexus/pocketjs
Runtime de UI en TypeScript que renderiza píxeles nativos en dispositivos portátiles, computadoras de escritorio y pantallas integradas, sin DOM ni WebView.
- Estrellas
- 1,837
- Forks
- 104
- Issues abiertos
- 93
- Último commit
- hace 19 horas
¿Qué es?
PocketJS es un runtime de aplicaciones para crear interfaces que se renderizan como píxeles nativos, en lugar de hacerlo mediante un motor de navegador. Las aplicaciones se escriben en TypeScript con componentes de Solid, Vue Vapor u Octane; los tres adaptadores renderizan en un mismo árbol nativo. Un entorno invitado de QuickJS ejecuta la aplicación, mientras que un núcleo en Rust se encarga del diseño flexbox y del dibujo en un solo hilo y proceso. Así, la canalización no incluye DOM, un motor CSS ni WebView.
Los estilos usan un subconjunto fijo de Tailwind que se compila en una tabla de estilos integrada durante la compilación. De este modo, los atributos class se resuelven mediante búsquedas en el dispositivo, sin cascada, cálculo de especificidad ni redistribución del diseño. El contrato de la aplicación (pocket.app.json) declara el viewport y las API requeridas, y permite comprobar un mismo bundle para objetivos con distintas densidades. Las líneas de tiempo de keyframes y las curvas de resorte se integran en la misma tabla y el núcleo de Rust las avanza con su propio reloj, por lo que una pantalla puede animarse sin ejecutar JavaScript en cada fotograma.
El runtime avanza la aplicación con una llamada frame(buttons) a la vez y trata el tiempo como un contador de fotogramas. Esto hace que los efectos asíncronos se ejecuten en los límites entre fotogramas y permite que las pruebas reproduzcan una sesión byte por byte. Se ha iniciado en PSP, PS Vita, iOS, macOS, Symbian, lectores de tinta electrónica PocketBook, hardware ESP32-P4 y en el navegador mediante un núcleo WebAssembly. El repositorio también incluye Pocket3D, una pila 3D nativa para hardware, y MicroTS, un compilador ahead-of-time que traduce vistas y modelos TypeScript a Rust.
Funciones clave
- 01Los adaptadores de Solid, Vue Vapor y Octane renderizan en un único árbol nativo dentro del mismo entorno invitado de QuickJS.
- 02Un subconjunto fijo de Tailwind se integra en una tabla de estilos durante la compilación y se resuelve mediante búsquedas, sin analizador CSS ni redistribución del diseño.
- 03Las líneas de tiempo de keyframes y las curvas de resorte avanzan con el reloj del núcleo de Rust, por lo que las animaciones no requieren JavaScript en cada fotograma.
- 04Las aplicaciones avanzan con una llamada frame(buttons) a la vez, y los efectos asíncronos se ponen en cola para los límites entre fotogramas, lo que permite reproducirlos de forma determinista.
- 05Los módulos nativos se cargan como controladores del kernel: en la compilación solo se incluyen los núcleos que necesita la aplicación, como net, audio o 3D.
- 06El contrato pocket.app.json declara el viewport y las API requeridas para que un mismo bundle pueda ejecutarse en pantallas con distintas densidades.
Casos de uso
- Crear aplicaciones de UI e interfaces de juegos para dispositivos portátiles como PSP, PS Vita y Nintendo 3DS.
- Crear interfaces de bajo costo para microcontroladores como ESP32-P4 o lectores de tinta electrónica.
- Distribuir aplicaciones de escritorio que renderizan de forma nativa en un solo proceso, en lugar de hacerlo mediante WebView.
- Ejecutar en CI pruebas de UI deterministas, reproducidas fotograma a fotograma y sin inestabilidad causada por el tiempo de reloj real.
Inicio rápido
- 1
Crea una aplicación nueva con PocketJS CLI
pocket create my-app - 2
Comprueba la aplicación en un dispositivo de destino, como la PSP
pocket check --target psp
Antes de usarlo
- El compilador ahead-of-time de MicroTS sigue en desarrollo.
- En escritorio, el README indica que el uso de CPU aumenta cuanto más largo es el documento, porque el editor vuelve a ajustar todo el texto en cada pulsación.
En colecciones
Temas
Preguntas frecuentes
- ¿Qué es pocketjs?
- Runtime de UI en TypeScript que renderiza píxeles nativos en dispositivos portátiles, computadoras de escritorio y pantallas integradas, sin DOM ni WebView. PocketJS es un runtime de aplicaciones para crear interfaces que se renderizan como píxeles nativos, en lugar de hacerlo mediante un motor de navegador. Las aplicaciones se escriben en TypeScript con componentes de Solid, Vue Vapor u Octane; los tres adaptadores renderizan en un mismo árbol nativo. Un entorno invitado de QuickJS ejecuta la aplicación, mientras que un núcleo en Rust se encarga del diseño flexbox y del dibujo en un solo hilo y proceso. Así, la canalización no incluye DOM, un motor CSS ni WebView.
- ¿pocketjs es gratuito? ¿Qué licencia tiene?
- pocketjs es open source bajo la licencia MIT. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿pocketjs sigue mantenido?
- Mantenimiento activo. El último commit de pocketjs fue el 6 nov 2026.
- ¿Para qué puedo usar pocketjs?
- Crear aplicaciones de UI e interfaces de juegos para dispositivos portátiles como PSP, PS Vita y Nintendo 3DS. Crear interfaces de bajo costo para microcontroladores como ESP32-P4 o lectores de tinta electrónica. Distribuir aplicaciones de escritorio que renderizan de forma nativa en un solo proceso, en lugar de hacerlo mediante WebView. Ejecutar en CI pruebas de UI deterministas, reproducidas fotograma a fotograma y sin inestabilidad causada por el tiempo de reloj real.
- ¿Cómo se instala pocketjs?
- Crea una aplicación nueva con PocketJS CLI: pocket create my-app Comprueba la aplicación en un dispositivo de destino, como la PSP: pocket check --target psp
- ¿Dónde consigo pocketjs?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/pocket-nexus/pocketjs
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Un motor en Rust para crear interfaces nativas multiplataforma: permite desarrollar apps en Rust o TSX y renderizarlas con los widgets propios de cada plataforma.
Una biblioteca de interfaz gráfica de usuario en C, gratuita y con licencia MIT, para crear interfaces en dispositivos integrados, desde MCU pequeños hasta MPU con Linux.
Framework de Go para crear aplicaciones de escritorio con una interfaz web en el webview del sistema operativo o una interfaz nativa dibujada en la GPU.
Un toolkit de GUI para Python que crea aplicaciones con los widgets nativos de cada sistema operativo.
Framework para crear apps nativas de iOS, Android y visionOS con JavaScript o TypeScript, usando directamente la UI y las API nativas.