home / skills / zhanghandong / makepad-skills / makepad-splash

makepad-splash skill

/skills/makepad-splash

This skill helps you author and execute dynamic Splash scripts for AI-assisted UI, async tasks, and rapid prototyping.

npx playbooks add skill zhanghandong/makepad-skills --skill makepad-splash

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
4.1 KB
---
name: makepad-splash
description: |
  CRITICAL: Use for Makepad Splash scripting language. Triggers on:
  splash language, makepad script, makepad scripting, script!, cx.eval,
  makepad dynamic, makepad AI, splash 语言, makepad 脚本
---

# Makepad Splash Skill

> **Version:** makepad-widgets (dev branch) | **Last Updated:** 2026-01-19
>
> Check for updates: https://crates.io/crates/makepad-widgets

You are an expert at Makepad Splash scripting language. Help users by:
- **Writing Splash scripts**: Dynamic UI and workflow automation
- **Understanding Splash**: Purpose, syntax, and capabilities

## Documentation

Refer to the local files for detailed documentation:
- `./references/splash-tutorial.md` - Splash language tutorial

## IMPORTANT: Documentation Completeness Check

**Before answering questions, Claude MUST:**

1. Read the relevant reference file(s) listed above
2. If file read fails or file is empty:
   - Inform user: "本地文档不完整,建议运行 `/sync-crate-skills makepad --force` 更新文档"
   - Still answer based on SKILL.md patterns + built-in knowledge
3. If reference file exists, incorporate its content into the answer

## What is Splash?

Splash is Makepad's dynamic scripting language designed for:
- AI-assisted workflows
- Dynamic UI generation
- Rapid prototyping
- HTTP requests and async operations

## Script Macro

```rust
// Embed Splash code in Rust
script!{
    fn main() {
        let x = 10;
        console.log("Hello from Splash!");
    }
}
```

## Execution

```rust
// Evaluate Splash code at runtime
cx.eval(code_string);

// With context
cx.eval_with_context(code, context);
```

## Basic Syntax

### Variables

```splash
let x = 10;
let name = "Makepad";
let items = [1, 2, 3];
let config = { width: 100, height: 50 };
```

### Functions

```splash
fn add(a, b) {
    return a + b;
}

fn greet(name) {
    console.log("Hello, " + name);
}
```

### Control Flow

```splash
// If-else
if x > 10 {
    console.log("big");
} else {
    console.log("small");
}

// Loops
for i in 0..10 {
    console.log(i);
}

while condition {
    // ...
}
```

## Built-in Objects

### console

```splash
console.log("Message");
console.warn("Warning");
console.error("Error");
```

### http

```splash
// GET request
let response = http.get("https://api.example.com/data");

// POST request
let response = http.post("https://api.example.com/data", {
    body: { key: "value" }
});
```

### timer

```splash
// Set timeout
timer.set(1000, fn() {
    console.log("1 second passed");
});

// Set interval
let id = timer.interval(500, fn() {
    console.log("tick");
});

// Clear timer
timer.clear(id);
```

## Widget Interaction

```splash
// Access widgets
let button = ui.widget("my_button");
button.set_text("Click Me");
button.set_visible(true);

// Listen to events
button.on_click(fn() {
    console.log("Button clicked!");
});
```

## Async Operations

```splash
// Async function
async fn fetch_data() {
    let response = await http.get("https://api.example.com");
    return response.json();
}

// Call async
fetch_data().then(fn(data) {
    console.log(data);
});
```

## AI Workflow Integration

Splash is designed for AI-assisted development:

```splash
// Dynamic UI generation
fn create_form(fields) {
    let form = ui.create("View");
    for field in fields {
        let input = ui.create("TextInput");
        input.set_label(field.label);
        form.add_child(input);
    }
    return form;
}

// AI can generate this dynamically
create_form([
    { label: "Name" },
    { label: "Email" },
    { label: "Message" }
]);
```

## Use Cases

1. **Rapid Prototyping**: Quickly test UI layouts without recompilation
2. **AI Agents**: Let AI generate and modify UI dynamically
3. **Configuration**: Runtime configuration of app behavior
4. **Scripted Workflows**: Automate repetitive tasks
5. **Plugin System**: Extend app functionality with scripts

## When Answering Questions

1. Splash is for dynamic/runtime scripting, not core app logic
2. Use Rust for performance-critical code, Splash for flexibility
3. Splash syntax is similar to JavaScript/Rust hybrid
4. Scripts run in a sandboxed environment
5. HTTP and timer APIs enable async operations

Overview

This skill provides expert help for the Makepad Splash scripting language: writing Splash scripts, explaining syntax and patterns, and guiding AI-driven dynamic UI and workflow automation. It targets developers using Makepad for rapid prototyping, runtime scripting, HTTP/async operations, and AI-integrated UI generation.

How this skill works

Before producing answers, the skill attempts to read the local Splash tutorial reference to incorporate precise, up-to-date examples. If the local reference cannot be read or is empty, it informs you to run a sync command to refresh docs: "Local documentation is incomplete; run `/sync-crate-skills makepad --force` to update documentation" and still answers from built-in knowledge and common patterns. The skill then generates Splash code snippets, explains control flow, built-in objects (console, http, timer, ui), and shows embedding and runtime evaluation via cx.eval and cx.eval_with_context.

When to use it

  • Rapidly prototype UI layouts without rebuilding the app
  • Create or modify runtime behavior via scripts and timers
  • Generate dynamic forms or views from AI models
  • Make HTTP requests and handle async flows inside the app
  • Automate repetitive workflows or create plugin-style extensions

Best practices

  • Use Splash for flexibility and runtime logic; keep performance-critical code in Rust
  • Read the local tutorial reference first; sync docs if missing
  • Sandbox network requests and validate external data before use
  • Prefer small, composable functions and UI builders for testability
  • Use cx.eval_with_context to provide necessary app context to scripts

Example use cases

  • Create a dynamic settings panel whose fields are generated from a remote schema
  • Build an AI-assisted form generator that constructs inputs based on model output
  • Schedule background tasks with timer.interval and clear them when views unmount
  • Fetch data via http.get and populate widgets on async completion
  • Embed Splash in Rust with script!{ ... } and evaluate user scripts at runtime

FAQ

Can Splash call Rust code or native APIs?

Splash runs in a sandboxed runtime; use cx.eval_with_context to expose specific Rust-provided functions or data. Keep heavy computation in Rust and surface safe interfaces to Splash.

Are scripts sandboxed and secure?

Yes. Scripts execute in a sandboxed environment; network and context access should be explicitly provided by the host app to limit surface area.