sickn33/agentic-awesome-skills/makepad-2-0-dsl
Claude Code and agent skill by sickn33/agentic-awesome-skills
- community
Checking that the SKILL.md file is still in the repository.
Makepad 2.0 guidance for dsl; use when building or debugging Makepad UI code.
Install
npx vskill@latest install sickn33/agentic-awesome-skills/makepad-2-0-dslSKILL.md
Limitations
- Verify against current Makepad 2.0 docs; upstream APIs change frequently.
- Do not run bundled scripts without explicit user approval.
When to Use
- Use when this upstream workflow matches the user's stated goal.
- Use when the task requires the procedures documented in this skill.
Makepad 2.0 DSL Syntax Skill
Overview
Makepad 2.0 replaced the compile-time live_design! macro with the runtime script_mod! macro, powered by the Splash scripting language. This reference covers the upstream Splash/script_mod generation; it is not a complete stable Makepad language specification. Record the exact Makepad git revision from Cargo.lock, inspect that revision's widget/script sources and compile a minimal example before migrating an existing live_design application. Do not mix generations merely because a package is called 2.0.
Key Syntax Rules
Property Assignment: Colon, NOT Equals
Properties are whitespace/newline separated. No commas between siblings.
Named Instances: := Operator
Use := to create addressable, named widget instances:
Named instances are:
- Addressable from Rust code via
id!(my_button)orids!(my_button) - Overridable via dot-path syntax:
MyTemplate{ title.text: "New text" } - Stored in the script object's
vec(notmap)
Regular properties use : and go into map:
Merge Operator: +:
The +: operator extends/merges with the parent instead of replacing:
Without +:, you REPLACE the entire property:
Dot-Path Shorthand
Dot-path is syntactic sugar for merge:
Let Bindings: Local Templates
let creates local, reusable templates within a script_mod! block:
IMPORTANT: let bindings are LOCAL to the script_mod! block. They cannot be accessed from other script_mod! blocks. To share across modules, store in mod.widgets.*.
Spread Operator: ..
Inherit all properties from another definition:
Script Module Structure
Basic App Structure
Widget Definition Module
Registration Patterns
Widget Registration
For structs that implement the Widget trait:
Rust side:
Component Registration
For non-widget structs that need script integration:
Draw Shader Registration
For custom draw types with shader fields:
Rust side:
Setting Type Defaults
Registration Order (CRITICAL)
Widget modules MUST be registered BEFORE UI modules that use them:
Multi-Module Aggregation (lib.rs pattern)
Prelude System
Available Preludes
| Prelude | Use Case | |
|---|---|---|
mod.prelude.widgets.* | App development - includes all standard widgets | |
mod.prelude.widgets_internal.* | Widget library internal development |
Prelude Alias Syntax
Without the alias (mod.theme, without theme:), the module is included but has no accessible name.
Cross-Module Sharing
The mod Object is the ONLY Way to Share
`use crate.module.*` does NOT work - the crate. prefix is not available in script_mod.
Runtime Property Updates
Use script_apply_eval! instead of the old apply_over + live!:
Never interpolate untrusted text into executable script/DSL. Set text through typed properties/APIs, validate resource paths and avoid logging sensitive model/user values. Shader/layout examples are partial and must be checked across target GPU/platform, DPI and keyboard/accessibility behavior.
Debug Logging
Use ~expression to log values during script evaluation:
Common Pitfalls
1. Missing #[source] source: ScriptObjectRef
All Script-derived structs MUST have this field:
2. Missing height: Fit on Containers
An unconstrained Fill child in a Fit-sized axis can create an unresolved sizing cycle. Choose Fit or an explicit bound for that axis; actual behavior depends on parent constraints and the widget. A bounded scroll viewport often needs Fill or fixed size.
3. Confusing : vs :=
key: value-- sets a property (stored in map)name := Widget{}-- creates a named, addressable child (stored in vec)label := Label{ text: "x" }-- named, overridable viaTemplate{ label.text: "y" }label: Label{ text: "x" }-- anonymous, NOT addressable, overrides fail silently
4. Forgetting +: Merge Operator
5. Wrong Theme Access
6. Hex Colors Containing 'e' Need #x Prefix
The Rust tokenizer interprets e/E in hex literals as scientific notation exponent:
7. pub Keyword Invalid in script_mod
8. Inset{...} Constructor Syntax for Margins/Padding
9. Draw Shader Struct Field Ordering with #[repr(C)]
Non-instance data (#[rust], non-instance #[live] fields) MUST go BEFORE #[deref]. Only instance fields (shader inputs) go AFTER:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/makepad-2-0-dsl/SKILL.md
Popularity
- Repository stars
- 47,054
- Repository forks
- 6,853
- 7-day trend score
- 54
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/sickn33/agentic-awesome-skills/makepad-2-0-dsl)