UI는 Rust로 선언하고,화면은 Compose가 그립니다.
rsx!와 훅, 시그널로 컴포넌트를 작성하면 미리 컴파일해 둔 Compose
Multiplatform 렌더러가 화면을 그립니다. 텍스트 레이아웃도, 위젯도, 입력기도 Compose가
쓰던 것을 그대로 씁니다.
웹뷰 없이, JVM 없이 도는 네이티브 데스크톱 앱을 Rust로 만듭니다.
- 웹뷰 없음
- 배포 바이너리에 JVM 없음
- 한글 포함 플랫폼 IME 그대로
- 복사 없는 경계
rsx! {
Column {
fill_max_width: true,
Text { text: "대화" }
TextField {
placeholder: "메시지를 입력하세요",
// Enter는 제출, Shift+Enter는 줄바꿈
on_key_down: move |e| {
if e.key() == Key::Enter && !e.shift_key() {
submit();
e.consume();
}
},
}
}
}
코드는 Rust에, 픽셀은 Compose에
컴포넌트와 상태는 Rust가 관리하고, 화면과 텍스트 입력은 Compose가 담당합니다. 둘 사이에는 좁은 C ABI 하나뿐입니다. 같은 스레드에서 동기로 호출하고 데이터를 복사하지 않으니, 키를 누른 그 프레임 안에서 결과가 돌아옵니다.
직렬화도, 비동기 브리지도, 웹뷰도 없습니다. 배포되는 바이너리 안에 JVM도 들어가지 않습니다.
61.6 MB창을 띄웠을 때 메모리 (M1 기준)
12.5 µs클릭 처리부터 배치 인코딩까지 (p99)
0경계에서 한 프레임당 힙 할당
JVM 없음Java가 깔리지 않은 컴퓨터에서도 실행
Mac mini(M1, 16GiB, macOS 26.5.1)에서 릴리스 빌드로 측정한 값입니다. 측정 방법은 아키텍처 문서에 적어 두었습니다.
현재 상태
| 플랫폼 | 상태 |
|---|---|
| macOS 데스크톱 | 한글 입력까지 포함해 처음부터 끝까지 동작합니다 |
| Windows, Linux 데스크톱 | Rust 코드는 그대로 쓸 수 있지만 렌더러 빌드 스크립트가 아직 없습니다 |
| iOS, Android | 설계는 끝났고 구현은 아직입니다 |
| Web | 연결 방식은 실측으로 정했고 구현은 아직입니다 |
아직 초기 단계 프로젝트입니다. 무엇이 확정됐고 무엇이 검증되지 않았는지는 명세 문서에 구분해 두었습니다.