Repolode
pocket-nexus

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. 1

    Создайте новое приложение с помощью PocketJS CLI

    pocket create my-app
  2. 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 обновляется ежедневно.

Похожие проекты

Кроссплатформенный движок нативных интерфейсов: логика приложения работает на Go, а каждая платформа отрисовывает интерфейс своими нативными представлениями.

198+32 за неделю9GoOtherАктивно поддерживаетсяОбновлён вчера

Rust-движок для кроссплатформенных нативных интерфейсов: пишите приложения на Rust или TSX и используйте виджеты каждой платформы.

1,9 тыс.+987 за неделю112RustOtherАктивно поддерживаетсяОбновлён 22 часа назад

Бесплатная UI-библиотека на C с лицензией MIT для создания графических интерфейсов на встраиваемых устройствах — от небольших MCU до MPU под управлением Linux.

25,1 тыс.+42 за неделю4,4 тыс.CMITОбновлён вчера

Фреймворк на Go для создания десктопных приложений с веб-интерфейсом в системном webview или нативным UI, который рендерится на GPU.

5 тыс.+1,2 тыс. за неделю303GoMITАктивно поддерживаетсяОбновлён 22 часа назад