Repolode
pocket-nexus

pocket-nexus/pocketjs

DOM이나 WebView 없이 휴대용 기기, 데스크톱, 임베디드 화면에 네이티브 픽셀을 렌더링하는 TypeScript UI 런타임입니다.

스타
1,837
포크
104
열린 이슈
93
마지막 커밋
어제

어떤 프로젝트인가요?

PocketJS는 브라우저 엔진 대신 네이티브 픽셀로 렌더링되는 인터페이스를 만들기 위한 애플리케이션 런타임입니다. 애플리케이션은 TypeScript와 Solid, Vue Vapor 또는 Octane 컴포넌트로 작성하며, 세 어댑터 모두 하나의 네이티브 트리로 렌더링합니다. QuickJS 게스트가 애플리케이션을 실행하고 Rust 코어가 단일 프로세스 안의 한 스레드에서 flexbox 레이아웃과 그리기를 처리하므로, 파이프라인에 DOM, CSS 엔진 또는 WebView가 없습니다.

스타일링에는 고정된 Tailwind 부분집합을 사용하며, 빌드 시 미리 스타일 테이블로 컴파일합니다. 따라서 기기에서는 클래스 속성을 조회로 처리하고, cascade나 specificity 해석, reflow가 필요하지 않습니다. 앱 계약(pocket.app.json)은 뷰포트와 필요한 API를 선언하며, 하나의 번들이 픽셀 밀도가 서로 다른 대상에 맞는지 검사할 수 있습니다. 키프레임 타임라인과 스프링 곡선도 같은 테이블에 미리 포함되고 Rust 코어 자체 시계로 진행되므로, 화면 애니메이션에 프레임마다 JavaScript를 실행할 필요가 없습니다.

런타임은 애플리케이션을 frame(buttons) 호출 단위로 한 프레임씩 진행하며 시간을 프레임 카운터로 취급합니다. 따라서 비동기 효과가 프레임 경계에 맞춰 적용되고, 테스트에서 세션을 바이트 단위까지 동일하게 재생할 수 있습니다. PSP, PS Vita, iOS, macOS, Symbian, PocketBook e-ink 리더, ESP32-P4 하드웨어와 WebAssembly 코어를 통한 브라우저에서 부팅된 바 있습니다. 저장소에는 하드웨어 네이티브 3D 스택인 Pocket3D와 TypeScript 뷰 및 모델을 Rust로 변환하는 ahead-of-time 컴파일러 MicroTS도 포함되어 있습니다.

핵심 기능

  • 01Solid, Vue Vapor, Octane 어댑터는 모두 동일한 QuickJS 게스트에서 하나의 네이티브 트리로 렌더링합니다.
  • 02고정된 Tailwind 부분집합을 빌드 시 스타일 테이블에 미리 포함하며, CSS 파서나 reflow 없이 조회로 처리합니다.
  • 03키프레임 타임라인과 스프링 곡선은 Rust 코어 시계에 따라 진행되므로 프레임마다 JavaScript를 실행하지 않아도 애니메이션을 구현할 수 있습니다.
  • 04애플리케이션은 frame(buttons) 호출 단위로 한 프레임씩 진행하며, 결정론적 재생을 위해 비동기 효과를 프레임 경계에 맞춰 대기열에 넣습니다.
  • 05네이티브 모듈은 커널 드라이버처럼 로드됩니다. net, audio, 3D처럼 앱에 필요한 코어만 빌드에 포함됩니다.
  • 06pocket.app.json 계약은 뷰포트와 필요한 API를 선언해 하나의 번들을 픽셀 밀도가 서로 다른 화면에 맞출 수 있도록 합니다.

활용 사례

  • PSP, PS Vita, Nintendo 3DS 같은 휴대용 기기용 UI 애플리케이션과 게임 인터페이스 제작
  • ESP32-P4 같은 마이크로컨트롤러나 e-ink 리더용 저오버헤드 인터페이스 제작
  • WebView 대신 하나의 프로세스에서 네이티브로 렌더링되는 데스크톱 앱 배포
  • 벽시계 시간에 따른 불안정성 없이 CI에서 결정론적인 프레임 재생 UI 테스트 실행

빠른 시작

  1. 1

    PocketJS CLI로 새 앱 만들기

    pocket create my-app
  2. 2

    PSP와 같은 대상 기기에서 앱 확인하기

    pocket check --target psp

사용 전 알아둘 점

  • MicroTS AOT 컴파일러는 아직 개발 중입니다.
  • 데스크톱에서는 README에 따르면 편집기가 키 입력 때마다 문서 전체의 줄바꿈을 다시 처리하기 때문에 문서가 길어질수록 CPU 사용량이 증가합니다.

포함된 컬렉션

토픽

자주 묻는 질문

pocketjs은(는) 무엇인가요?
DOM이나 WebView 없이 휴대용 기기, 데스크톱, 임베디드 화면에 네이티브 픽셀을 렌더링하는 TypeScript UI 런타임입니다. PocketJS는 브라우저 엔진 대신 네이티브 픽셀로 렌더링되는 인터페이스를 만들기 위한 애플리케이션 런타임입니다. 애플리케이션은 TypeScript와 Solid, Vue Vapor 또는 Octane 컴포넌트로 작성하며, 세 어댑터 모두 하나의 네이티브 트리로 렌더링합니다. QuickJS 게스트가 애플리케이션을 실행하고 Rust 코어가 단일 프로세스 안의 한 스레드에서 flexbox 레이아웃과 그리기를 처리하므로, 파이프라인에 DOM, CSS 엔진 또는 WebView가 없습니다.
pocketjs은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
pocketjs은(는) MIT 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
pocketjs은(는) 아직 유지보수되고 있나요?
활발히 유지보수 중. pocketjs의 마지막 커밋은 2026년 11월 6일입니다.
pocketjs은(는) 어디에 사용할 수 있나요?
PSP, PS Vita, Nintendo 3DS 같은 휴대용 기기용 UI 애플리케이션과 게임 인터페이스 제작 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를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.

관련 프로젝트