変化がなければ休止
画面に変化がない間、ウィンドウは休止します。シグナルは関連するプロパティだけを更新し、イベント内の変更は一度の再描画にまとめます。
Pre-alphaAPI は変更されます
Go、TypeScript、Rust でネイティブ UI を構築。共通の GPU レンダラー、高速な増分ビルド、細粒度のリアクティビティ、アクセシブルなコンポーネントを利用できます。
QuickGUI Go、QuickGUI TypeScript、QuickGUI Rust、GPUI、Tauri、Electron のアイドル時メモリとインストールサイズを同じ Mac で測定しました。各アプリで同じ課題管理ツールを動かし、1,000 件の課題を読み込みます。
1,100 × 720 のウィンドウに同じ 1,000 件の課題を読み込み、1 ページあたり 100 行を保持して最初の課題を選択。各フレームワークを 3 回起動します。少なくとも 30 秒待ち、メモリが安定して CPU が 1% 以下の状態が 15 秒続いてから、さらに 10 回測定します。棒は各起動の中央値の中央値、ひげはその範囲です。
メモリはアプリと描画補助プロセスの物理フットプリントの合計です。WebKit や Chromium の描画、GPU、ネットワークプロセスを含み、自動入力などの macOS サービスは除外します。測定中も CPU とメモリの安定を確認し、スクリーンショットは測定後に撮影します。圧縮メモリを含み、アクティビティモニタと同じ十進 MB(1,000,000 バイト)で表示します。強制 GC やキャッシュ削除は行いません。
サイズは .app 内に配布するファイルを集計し、ネイティブライブラリやフレームワークを含みます。QuickGUI TypeScript は Bun と Solid 2 を同梱し、QuickGUI Rust はネイティブコアを実行ファイルにリンクし、GPUI は Zed の GPU UI フレームワークを実行ファイルに含め、Electron は Chromium と Node を同梱します。OS が提供する WebKit などは除外します。圧縮ダウンロードではなく、インストール後のサイズです。
検索、状態フィルター、ページ切り替え、メモの編集、完了操作に対応しています。データはセッション中のメモリに保持し、データベースやネットワークサービスは使いません。グラフは読み込み後のアイドル時の使用量で、操作の処理性能を表すものではありません。結果はアプリ、マシン、OS によって変わります。QuickGUI は開発版からビルドしており、各結果に使用したリビジョンを記録しています。

画面に変化がない間、ウィンドウは休止します。シグナルは関連するプロパティだけを更新し、イベント内の変更は一度の再描画にまとめます。
ネイティブランタイムを再利用し、Go、TypeScript、Rust のアプリを再コンパイル。待ち時間を減らし、UI の改善に集中できます。
Flexbox、CSS Grid、なじみのあるスタイルオプション。Go、TypeScript、Rust でレイアウトを組み立て、スタイルを再利用できます。
アクセシブルでスタイルなしのコンポーネントを多数同梱——メニュー、ダイアログ、ポップオーバー、select、combobox、タブ、テーブル、ツリー。自由に仕上げられます
選択、編集、アンドゥ、IME、絵文字、右から左へ書く言語に対応しています。
スクリーンリーダーには本物のボタン・リスト・テキストが見えます。追加コードは不要
仮想化テーブルはスクロールに合わせて表示中の行をマウントし、大きな履歴やデータビューを扱いやすくします。
本物のウィンドウ、システムメニュー、ファイルダイアログ、トレイアイコン、通知をアプリで利用できます。
quickgui dev は編集しながら実行、quickgui build は署名済みでインストール可能なリリースを出力します
同じリアクティブなカウンターを、3 つの言語で。言語を選んでコードを見てみましょう。
func Counter() *ui.Element {
count, setCount := ui.CreateSignal(0)
return ui.View().
FlexCol().
SizeFull().
ItemsCenter().
JustifyCenter().
Gap(20).
Bg("#090d16").
TextColor("#e2e8f0").
Child(ui.Text("Count: ", count())).
Child(ui.Button().
OnClick(func() { setCount(count() + 1) }).
Padding(12).
RoundedLg().
Bg("#2563eb").
Hover(func(s ui.StyleBuilder) ui.StyleBuilder { return s.BackgroundColor("#3b82f6") }).
Child("Increment"))
}
メソッドチェーンで組み立てるネイティブビューと再利用できるスタイル。シグナルが UI を同期します。
Go ドキュメントmacOS の Go、TypeScript、Rust アプリに本物の SwiftUI コントロールを埋め込み、QuickGUI コンポーネントと一緒に使えます。
ui.SwiftUI.Host(
ui.SwiftUIHostProps{MatchContents: true},
func() *native.Node {
return ui.SwiftUI.Button(ui.SwiftUIButtonProps{
Label: "Save changes",
SystemImage: "checkmark",
Modifiers: []ui.SwiftUIModifier{
ui.SwiftUI.ButtonStyle("glass"),
},
})
},
)
bunx @quickgui/cli init my-app
cd my-app
quickgui devquickgui fmt
quickgui buildquickgui build --target darwin-arm64 \
--sign "Developer ID Application: Example (TEAMID)" \
--notarize quickgui-notaryGo、TypeScript、Rust のコンポーネントを書いて、ランタイムを同梱したネイティブアプリを配布しましょう。