dioxus-compose

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연결 방식은 실측으로 정했고 구현은 아직입니다

아직 초기 단계 프로젝트입니다. 무엇이 확정됐고 무엇이 검증되지 않았는지는 명세 문서에 구분해 두었습니다.

어디서부터 볼까요