アイドル時は CPU ゼロ
画面に変化がなければ、何も動きません。アイドルウィンドウはフレームを描かず、バッテリーも消費しない。
Rust または TypeScript でネイティブアプリを作る GPU アクセラレーション GUI フレームワーク。見慣れたレイアウト、ちゃんと使えるテキスト、標準のアクセシビリティ——アプリがアイドルなら CPU はゼロ。
画面に変化がなければ、何も動きません。アイドルウィンドウはフレームを描かず、バッテリーも消費しない。
描画は GPU 上で行われ、ウィンドウの変わった部分だけが再描画されます。
Flexbox と CSS Grid、Tailwind 風のショートハンド付き。Web ページを組めるなら、ウィンドウも組めます。
アクセシブルでスタイルなしのコンポーネントを多数同梱——メニュー、ダイアログ、ポップオーバー、select、combobox、タブ、テーブル、ツリー。自由に仕上げられます。
選択、編集、アンドゥ、IME、絵文字、右から左へ書く言語——どのネイティブアプリとも同じ挙動。
スクリーンリーダーには本物のボタン・リスト・テキストが見えます。追加コードは不要。
100 万行のテーブルやリストも、フレーム落ちなくスクロール。
本物のウィンドウ、ネイティブメニュー、ダイアログ、トレイアイコン、通知——ブラウザの着ぐるみではありません。
quickgui dev は編集しながら実行、quickgui build は署名済みでインストール可能なリリースを出力します。
好きな方でどうぞ——どちらも同じネイティブアプリになります。webview はありません。
struct Counter {
count: usize,
}
impl View for Counter {
fn render(
&mut self,
cx: &mut ViewContext<'_, Self>,
) -> impl IntoElement {
let increment = cx.listener("increment", |this, cx| {
this.count += 1;
cx.invalidate();
});
div()
.size_full()
.flex_col()
.items_center()
.justify_center()
.gap_3()
.child(text(format!("Count: {}", self.count)))
.child(
div()
.on_click(increment)
.px_4()
.py_2()
.rounded_lg()
.bg(Color::rgb8(24, 24, 27))
.text_color(Color::rgb8(250, 250, 250))
.hover(|s| s.bg(Color::rgb8(63, 63, 70)))
.child("Increment"),
)
}
}cargo add quickgui上のカウンターがそのまま完全な main.rs です——コピーするだけ。
cargo run --releasebunx @quickgui/cli init my-app
cd my-app
bun run devquickgui build --target darwin-arm64 \
--sign "Developer ID Application: Example (TEAMID)" \
--notarize quickgui-notary本物の署名済み・自己完結アプリが手に入ります。インストーラー付き。