Кроссплатформенный движок нативных интерфейсов: логика приложения работает на Go, а каждая платформа отрисовывает интерфейс своими нативными представлениями.
pocket-nexus/pocketjs
TypeScript-рантайм для интерфейсов, который рисует нативные пиксели на портативных устройствах, компьютерах и встроенных экранах — без DOM и WebView.
- Звёзды
- 1,837
- Форки
- 104
- Открытые issues
- 93
- Последний коммит
- вчера
Что это?
PocketJS — рантайм для создания приложений с интерфейсами, которые выводятся в виде нативных пикселей, а не через браузерный движок. Приложения пишут на TypeScript с компонентами Solid, Vue Vapor или Octane; все три адаптера отрисовывают единое нативное дерево. Приложение работает в гостевой среде QuickJS, а ядро на Rust выполняет раскладку flexbox и рисование в одном потоке и одном процессе. В конвейере нет DOM, CSS-движка или WebView.
Для стилизации используется фиксированный поднабор Tailwind, который при сборке компилируется в таблицу стилей. На устройстве классы разрешаются поиском по таблице — без каскада, вычисления специфичности и перерасчёта раскладки. Контракт приложения (pocket.app.json) задаёт viewport и необходимые API, а один и тот же бандл можно проверять на целевых устройствах с разной плотностью пикселей. Таймлайны keyframe-анимаций и пружинные кривые записываются в ту же таблицу и обновляются по собственным часам ядра на Rust, поэтому анимация экрана не требует JavaScript на каждом кадре.
Рантайм продвигает приложение вызовами frame(buttons), по одному кадру за раз, и использует время как счётчик кадров. Благодаря этому асинхронные эффекты выполняются на границах кадров, а тесты могут побайтно воспроизводить сессию. Рантайм запускался на PSP, PS Vita, iOS, macOS, Symbian, устройствах для чтения PocketBook с экранами e-ink, оборудовании ESP32-P4 и в браузере через ядро WebAssembly. В репозитории также есть Pocket3D — аппаратно-нативный 3D-стек — и MicroTS, ahead-of-time-компилятор, преобразующий представления и модели TypeScript в Rust.
Ключевые возможности
- 01Адаптеры Solid, Vue Vapor и Octane отрисовывают единое нативное дерево в одной гостевой среде QuickJS.
- 02Фиксированный поднабор Tailwind при сборке записывается в таблицу стилей, а на устройстве разрешается поиском — без CSS-парсера и перерасчёта раскладки.
- 03Таймлайны keyframe-анимаций и пружинные кривые обновляются по часам ядра на Rust, поэтому анимация не требует JavaScript на каждом кадре.
- 04Приложения продвигаются вызовами frame(buttons), по одному кадру за раз; асинхронные эффекты ставятся в очередь на границы кадров, что позволяет детерминированно воспроизводить сессии.
- 05Нативные модули подключаются как драйверы ядра: в сборку попадают только нужные приложению компоненты, например net, audio или 3D.
- 06Контракт pocket.app.json задаёт viewport и необходимые API, чтобы один бандл можно было использовать на экранах с разной плотностью пикселей.
Сценарии использования
- Создание интерфейсов приложений и игр для портативных устройств, таких как PSP, PS Vita и Nintendo 3DS.
- Создание нетребовательных к ресурсам интерфейсов для микроконтроллеров вроде ESP32-P4 и устройств для чтения с экранами e-ink.
- Выпуск настольных приложений, которые отрисовываются нативно в одном процессе, а не через WebView.
- Запуск в CI детерминированных UI-тестов с воспроизведением по кадрам, без нестабильности из-за привязки к реальному времени.
Быстрый старт
- 1
Создайте новое приложение с помощью PocketJS CLI
pocket create my-app - 2
Проверьте приложение на целевом устройстве, например PSP
pocket check --target psp
Что важно знать
- AOT-компилятор MicroTS всё ещё находится в разработке.
- Согласно README, на компьютере загрузка процессора растёт с увеличением длины документа, поскольку редактор заново переносит весь текст при каждом нажатии клавиши.
В подборках
Темы
Частые вопросы
- Что такое pocketjs?
- TypeScript-рантайм для интерфейсов, который рисует нативные пиксели на портативных устройствах, компьютерах и встроенных экранах — без DOM и WebView. PocketJS — рантайм для создания приложений с интерфейсами, которые выводятся в виде нативных пикселей, а не через браузерный движок. Приложения пишут на TypeScript с компонентами Solid, Vue Vapor или Octane; все три адаптера отрисовывают единое нативное дерево. Приложение работает в гостевой среде QuickJS, а ядро на Rust выполняет раскладку flexbox и рисование в одном потоке и одном процессе. В конвейере нет DOM, CSS-движка или WebView.
- pocketjs можно использовать бесплатно? Какая у него лицензия?
- pocketjs распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- pocketjs всё ещё поддерживается?
- Активно поддерживается. Последний коммит в pocketjs — 6 нояб. 2026 г..
- Для чего можно использовать pocketjs?
- Создание интерфейсов приложений и игр для портативных устройств, таких как PSP, PS Vita и Nintendo 3DS. Создание нетребовательных к ресурсам интерфейсов для микроконтроллеров вроде ESP32-P4 и устройств для чтения с экранами e-ink. Выпуск настольных приложений, которые отрисовываются нативно в одном процессе, а не через WebView. Запуск в CI детерминированных UI-тестов с воспроизведением по кадрам, без нестабильности из-за привязки к реальному времени.
- Как установить pocketjs?
- Создайте новое приложение с помощью PocketJS CLI: pocket create my-app Проверьте приложение на целевом устройстве, например PSP: pocket check --target psp
- Где скачать pocketjs?
- Исходный код и инструкции по установке — на GitHub: https://github.com/pocket-nexus/pocketjs
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Rust-движок для кроссплатформенных нативных интерфейсов: пишите приложения на Rust или TSX и используйте виджеты каждой платформы.
Бесплатная UI-библиотека на C с лицензией MIT для создания графических интерфейсов на встраиваемых устройствах — от небольших MCU до MPU под управлением Linux.
Фреймворк на Go для создания десктопных приложений с веб-интерфейсом в системном webview или нативным UI, который рендерится на GPU.
GUI-фреймворк для Python, который использует в приложениях нативные виджеты каждой операционной системы.
Фреймворк для создания нативных приложений для iOS, Android и visionOS на JavaScript или TypeScript с прямым доступом к нативному UI и API.