Help us improve
Share bugs, ideas, or general feedback.
From antigravity-bundle-makepad-builder
Generates Makepad Rust app boilerplate with live_design!, app_main!, Cargo.toml setup, and event handling. Use for project initialization, getting started, and basic structure.
npx claudepluginhub sickn33/antigravity-awesome-skills --plugin antigravity-bundle-makepad-builderHow this skill is triggered — by the user, by Claude, or both
Slash command
/antigravity-bundle-makepad-builder:makepad-basicsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Version:** makepad-widgets (dev branch) | **Last Updated:** 2026-01-19
Generates Makepad Rust app boilerplate with live_design!, app_main!, Cargo.toml setup, and event handling. Use for project initialization, getting started, and basic structure.
Routes Makepad 2.0 GUI questions to specialized skills and applies design anchors for architecture, component splitting, state management, data flow, and rendering.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Share bugs, ideas, or general feedback.
Version: makepad-widgets (dev branch) | Last Updated: 2026-01-19
Check for updates: https://crates.io/crates/makepad-widgets
You are an expert at the Rust makepad-widgets crate. Help users by:
live_design!, app_main!, or first-screen application wiring.Refer to the local files for detailed documentation:
./references/app-structure.md - Complete app boilerplate and structure./references/event-handling.md - Event handling patternsBefore answering questions, Claude MUST:
/sync-crate-skills makepad --force 更新文档"use makepad_widgets::*;
live_design! {
use link::theme::*;
use link::shaders::*;
use link::widgets::*;
App = {{App}} {
ui: <Root> {
main_window = <Window> {
body = <View> {
width: Fill, height: Fill
flow: Down
<Label> { text: "Hello Makepad!" }
}
}
}
}
}
app_main!(App);
#[derive(Live, LiveHook)]
pub struct App {
#[live] ui: WidgetRef,
}
impl LiveRegister for App {
fn live_register(cx: &mut Cx) {
crate::makepad_widgets::live_design(cx);
}
}
impl AppMain for App {
fn handle_event(&mut self, cx: &mut Cx, event: &Event) {
self.ui.handle_event(cx, event, &mut Scope::empty());
}
}
[package]
name = "my_app"
version = "0.1.0"
edition = "2024"
[dependencies]
makepad-widgets = { git = "https://github.com/makepad/makepad", branch = "dev" }
impl AppMain for App {
fn handle_event(&mut self, cx: &mut Cx, event: &Event) {
let actions = self.ui.handle_event(cx, event, &mut Scope::empty());
if self.ui.button(id!(my_button)).clicked(&actions) {
log!("Button clicked!");
}
}
}
// Get widget references
let label = self.ui.label(id!(my_label));
label.set_text("Updated text");
let input = self.ui.text_input(id!(my_input));
let text = input.text();
| Macro/Type | Description | Example |
|---|---|---|
live_design! | Defines UI in DSL | live_design! { App = {{App}} { ... } } |
app_main! | Entry point macro | app_main!(App); |
#[derive(Live)] | Derive live data | #[derive(Live, LiveHook)] |
WidgetRef | Reference to UI tree | #[live] ui: WidgetRef |
Cx | Context for rendering | fn handle_event(&mut self, cx: &mut Cx, ...) |
id!() | Widget ID macro | self.ui.button(id!(my_button)) |
| Platform | Requirements |
|---|---|
| macOS | Works out of the box |
| Windows | Works out of the box |
| Linux | apt-get install clang libaudio-dev libpulse-dev libx11-dev libxcursor-dev |
| Web | cargo install wasm-pack |
use makepad_widgets::*;live_design! macro for all UI definitionsLiveRegister and AppMain traitsid!() macro for widget referenceshandle_event method