Skip to content

Project Structure

A Rust project keeps application code in a Cargo package and development commands in a small Bun package.

#Generated files

my-app/
├── resources/
│   └── icon.png
├── src/main.rs
├── Cargo.toml
├── Cargo.lock
├── quickgui.config.ts
├── package.json
└── README.md

Commit Cargo.lock after the first successful build. Split larger apps into ordinary Rust modules.

#Application entry

src/main.rs starts Application::new().run(...) and opens windows from that callback. Each window owns a View. entry in the config is the crate directory.

fn main() -> Result<(), quickgui::AppError> {
    Application::new().run(|cx| {
        cx.open_window(WindowOptions::new("My App").size(760.0, 520.0), App);
    })
}

#Configuration

import { defineConfig } from "@quickgui/cli";

export default defineConfig({
  language: "rust",
  name: "My App",
  identifier: "com.example.my-app",
  entry: ".",
  fonts: ["assets/MyFont.ttf"],
});

The application icon comes from resources/icon.png. Extra files can be listed in resources. See App Icon and Bundled Resources. TOML supports the same keys. The CLI reads quickgui.toml before quickgui.config.ts. Enable optional crate features in Cargo.toml instead of setting extensions in the app config.

#Packages

Applications depend on the quickgui crate. @quickgui/cli is a development dependency. Optional terminal, markdown, editor, and updater capabilities are Cargo features. Keep the crate version already in your project:

[dependencies]
quickgui = { version = "...", features = ["updater"] }

#Local development

quickgui check
quickgui test
quickgui fmt
quickgui dev
quickgui build

dev rebuilds on source changes.