GitHub Trending웹 · 프론트엔드

remorses/gpuix

Zed의 GPU UI로 React 앱을 네이티브 데스크톱 앱으로 빌드

원제 remorses/gpuix

스타 2,462당일 +100Rust
Key Point

Electron 기반 데스크톱 앱의 메모리 비효율을 해결하면서도 React 생태계의 개발 경험을 그대로 쓸 수 있는 새로운 방식이 공개되었다.

핵심 요약

  • GPUIX는 React와 Solid를 Zed의 GPUI 프레임워크에 연결하여 Electron 없이 네이티브 데스크톱 앱을 개발할 수 있게 한다.
  • Metal, DirectX, Vulkan으로 렌더링되며 DOM이 아닌 GPUI를 통해 레이아웃, 텍스트, 입력을 처리한다.
  • Bun 런타임으로 개발하면 `bun --hot`으로 코드 저장 시 같은 창에서 React가 다시 마운트되는 핫 리로드를 지원한다.
  • 배포 시 바이너리에 렌더러를 포함하므로 Bun이나 Node.js 설치 없이 앱을 실행할 수 있다.
  • Hermes 런타임을 사용하면 앱 크기를 12MB(JavaScript) + 22MB(네이티브 라이브러리) 정도로 줄일 수 있다.
  • cargo-packager로 바이너리를 `.app`, `.AppImage`, `.exe` 등으로 패킹하고, 서명하고, GitHub Releases에서 자동 업데이트를 구성할 수 있다.
  • React와 Solid 어댑터는 공유 뮤테이션 런타임을 사용하여 변경된 요소만 FFI 경계를 넘는다.
  • GPUI는 매 프레임 전체 엘리먼트 트리를 재구성하는 즉시 모드 UI이며, GPUIX는 JS의 변경사항을 Rust의 유지 트리에 원자적으로 적용한다.
  • 예제 앱은 원 파일로 된 투두 리스트, 채팅, 타임라인, 메일 클라이언트 등을 포함한다.
  • pre-1.0 버전이므로 어댑터와 `@gpuix/native`를 같은 버전으로 고정하고 함께 업그레이드해야 한다.
  • 테스트는 `createTestRoot()`로 창을 열지 않고 실행하거나, `launch()` + `focus: false`로 자동화 에이전트가 창을 탈취하지 않게 할 수 있다.
  • `flushSync`는 React 커밋까지만 강제하고, 픽셀 렌더링을 위해서는 프레임 대기나 `renderer.flush()`가 필요하다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗