Rust와 egui로 만든 OpenCode용 네이티브 데스크톱 클라이언트 개발
I built a native desktop client for OpenCode in Rust + egui, inspired by OpenChamber
핵심 요약
Electron 없이 Rust와 egui로 가볍고 빠른 OpenCode 네이티브 데스크톱 클라이언트를 직접 개발함.
- 네이티브 아키텍처 — Electron이나 웹뷰 없이 Rust와 egui를 사용하여 가벼운 성능 구현
- 다양한 기능 지원 — 터미널, Git 패널, 파일 뷰어 및 Lua 확장 기능 포함
- 비동기 UI 설계 — UI 스레드와 I/O를 분리하여 효율적인 이벤트 기반 렌더링 수행
- 개발 피드백 요청 — 텍스트 레이아웃, 대규모 트랜스크립트 성능 및 스레딩 모델에 대한 의견 수렴
다들 안녕. 내가 OpenCode를 위한 데스크톱 작업 공간인 RustChamber를 만들고 있어. OpenChamber에서 영감을 받았는데, 아예 처음부터 싹 다 네이티브 앱으로 다시 짰음. Electron도 없고, webview도 없고, JS 런타임 같은 건 아예 들어가지도 않았어.
브라우저를 창에 띄워놓은 것보다 훨씬 가벼운 걸 원했고, 채팅이나 터미널, diff가 어떻게 그려지는지 내가 완전히 제어하고 싶었거든.
기능은 이래:
- 스트리밍 마크다운, 추론, 도구 및 셸 카드, 권한 프롬프트를 지원하는 채팅
- 탭, 색상, 스크롤백을 지원하는 진짜 PTY 터미널
- 깃 패널: 상태 확인, 스테이지, 커밋, 브랜치, 로그, 페치, 풀, 푸시
- 파일 통계가 포함된 세션 및 턴별 diff
- SQLite, Parquet, ZIP, Jupyter, XLSX, DOCX, PPTX를 위한 네이티브 읽기 전용 뷰어
- iframe이 아니라 네이티브 위젯 레이어를 통해 렌더링되는 Lua 확장 기능
흥미로울 만한 설계 선택 하나 말해주자면, UI 스레드에서는 I/O를 절대 안 해. 화면에서 액션을 보내면 API 클라이언트, SSE 스트림, 서버 프로세스를 담당하는 Tokio 백엔드 액터가 처리하는 방식이야. 결과는 이벤트로 돌아오고, UI는 필요할 때만 다시 그려짐.
알려진 한계: OpenCode CLI가 설치되어 있어야 해 (앱에 포함 안 되어 있음). 윈도우는 CI에서 컴파일은 되는데 macOS나 리눅스만큼 직접 테스트를 많이 해보진 못했어.
소스 코드: https://github.com/rustchamber/rustchamber
egui 쪽, 특히 텍스트 레이아웃이나 긴 대화 기록 성능, 그리고 스레딩 모델에 대해 피드백 주면 정말 고맙겠어.
