No description
  • Rust 81%
  • WebAssembly 15.6%
  • Metal 1.4%
  • Cuda 0.5%
  • C++ 0.4%
  • Other 0.9%
Find a file
andodeki a3d8f521a9 fix(game/render): port EntityLocal particle anchors from libs/render
makepad-game-sim added EmitterAnchor::EntityLocal but game/render's
ParticleSystem still matched only Entity/Point (E0004). Port the
libs/render implementation: step() now resolves (pos, yaw) so a local
offset turns with its body; add clear(). Arcade caller passes yaw.
2026-09-26 11:17:02 +00:00
.cargo Fix cargo-makepad install rustflags 2026-07-08 12:28:37 +02:00
apps fix(game/render): port EntityLocal particle anchors from libs/render 2026-09-26 11:17:02 +00:00
arch/platform tools, arch, docs, workspace, examples, sqlite, wasm_bridge 2026-09-15 13:40:33 +02:00
code_editor Share language tokenizers with the code editor on work 2026-09-18 12:12:36 +02:00
docs/agents agents: a user touching an app under test no longer stops the agent -- input invalidates the interrupted input sequence, not the authorization to keep inspecting, driving, closing and restarting the workflow's app (user instruction 2026-09-22); CEF apps keep their browser profile per executable name, so a replacement launch passes MAKEPAD_CEF_PROFILE_DIR and never shares the user's profile with a second instance 2026-09-23 22:34:45 +02:00
draw fix(fork): refresh draw from upstream work - font API skew 2026-09-26 03:11:40 +03:00
examples fix(game): pass filmed body to 5-arg camera_boom_limit 2026-09-26 11:15:34 +00:00
libs fix(game/render): port EntityLocal particle anchors from libs/render 2026-09-26 11:17:02 +00:00
platform fix(fork): base platform+test on upstream work 5f99533 + re-apply nigig BeforeStartup, NIGIG_TEST_MODE, touch protocol 2026-09-25 23:19:08 +03:00
skills skills: add Makepad game skills pack ported from threejs-game-skills 2026-09-05 21:18:58 +00:00
studio Merge upstream origin/dev fda40f56 into nigig fork - preserve nigig hub/web_server, take upstream dev updates 2026-09-25 17:25:35 +03:00
tools Merge upstream origin/work 5f99533 into nigig fork alongside dev 2026-09-25 17:32:26 +03:00
widgets fix(fork): refresh widgets from upstream work + re-apply sibling reexports 2026-09-26 03:20:34 +03:00
xr Merge upstream origin/work 5f99533 into nigig fork alongside dev 2026-09-25 17:32:26 +03:00
.gitattributes Initial commit 2025-05-06 10:11:37 +02:00
.gitignore tools, arch, docs, workspace, examples, sqlite, wasm_bridge 2026-09-15 13:40:33 +02:00
AGENTS.md Merge upstream origin/dev fda40f56 into nigig fork - preserve nigig hub/web_server, take upstream dev updates 2026-09-25 17:25:35 +03:00
Cargo.toml fix(fork): restore nigig game-sim/math + workspace members, take upstream finance/route manifests - preserve game crates alongside dev/work split into scene/soft-body 2026-09-25 20:12:03 +03:00
ci.splash ci: the tests are the platform's own, in release, in two minutes -- the user's law: "we mostly only care about the platform tests", "a max of about 2 minutes of tests", "test everything the CI does in release builds; debug builds are uselessly slow for this". ci.test now builds every test binary of its selection ONCE in release and runs them several at a time (half the cores, at least two), each one timed and capped, so a hung test costs its own cap and never the hour, and the step's detail names the slowest binaries with their counts; the doc tests follow through cargo for the packages that have a library. A selection is dirs (the packages whose manifests live under those directories, by cargo metadata), packages, package or workspace: true; a run over budget_secs (120 by default) turns the block orange and says so. The root script runs platform, draw, widgets and tools/ci by default: 49 binaries, 2535 tests, 22 s on a laptop. Every other crate's tests are the deep run, opt-in with deep_tests = true in ci.toml or ci --deep (ci.deep in scripts). The wall's cards lose a line: the time sits beside the count, 1 passed · 12s 2026-09-22 09:50:38 +02:00
clippy.toml tools, arch, docs, workspace, examples, sqlite, wasm_bridge 2026-09-15 13:40:33 +02:00
LICENSE Initial commit 2025-05-06 10:11:37 +02:00
makepad.splash widgets, draw: skeuomorphic surfaces light each other through an optional relief buffer -- mod.sdf.Material shades a widget from its own SDF (height profile, normals, key light, inner shadow, AO, rim, gloss, cast shadow, revolve-profile knobs, a ±1 LSB screen dither and optional grain); widgets that opt in register lit shapes (rounded box or disc with a height and an emissive colour) keyed by their draw list, and the window renders them once into a quarter-resolution f16 height+emissive buffer with its own blur chain, rebuilt only when the shapes change, so a lit LED spills onto its neighbours' bevels, raised parts cast AO between widgets, and nothing renders at rest. Material draws bind the same textures, so batching is unchanged (39 draw calls with and without). A window with no lit shapes allocates and records nothing; hello_world and glass render pixel-identical to before. examples/skeuomorph shows a Bluetooth key, lit ON/OFF buttons, a knob with an LED ring and a segmented control 2026-09-23 23:49:22 +02:00
README.md Remove Flow, asset and VJ applications moved into Stage 2026-09-21 23:09:50 +02:00
rustfmt.toml Add glass_panel widget example; restore rustfmt guard 2026-06-25 16:11:42 +02:00
splash.md Constrain Splash external I/O to the host service bridge (#1243) 2026-09-25 00:56:09 +02:00

Makepad

Socials

Makepad is an AI-accelerated application and game development environment for Rust. It combines a high-performance UI runtime, a live-editable design language, and a fast iteration loop so you can build native and web apps with a tight feedback cycle.

It also has a large set of AI backends integrated for embedding llms or generative AI models inside applications or run them easily on local hardware

This repository contains the core engine, widgets, tools, and examples.

What Makepad Is

  • A cross-platform UI runtime for native and web targets.
  • A Rust-first framework with a scriptable UI DSL.
  • A studio app for running, inspecting, and iterating on examples and projects.
  • An AI-accelerated workflow: structure and tooling aimed at making code generation, refactoring, and iteration faster and safer.
  • Simple forward 3D renderer for making games on Quest and all other supported platforms

Features

  • Streaming Splash: fast, animated, streaming UI example.
  • Script Engine: live-editable UI DSL and runtime script integration.
  • 3D Rendering: glTF example with GPU rendering.
  • Maps: built-in map rendering with downloadable tiles.
  • Voice Analysis: built-in voice support with Whisper model downloads.
  • GPU-accelerated 2D and 3D rendering.
  • AI automation inside Studio to control and inspect UI.

Prerequisites

  • Rust toolchain (stable works for native).
  • For non-standard targets (iOS, tvOS, Android, wasm), install the Makepad build tool:
cargo install --path=./tools/cargo_makepad

Then install target toolchains as needed:

cargo makepad wasm install-toolchain
cargo makepad apple ios install-toolchain
cargo makepad apple tvos install-toolchain
cargo makepad android --abi=all install-toolchain

Linux Dependencies

Linux build/runtime dependencies are listed in ./tools/linux_deps.sh: Use the apt-get command below, or run the script on Ubuntu/WSL2:

sudo apt-get update && sudo apt-get install -y --no-install-recommends build-essential pkg-config clang ca-certificates libssl-dev libx11-dev libxcursor-dev libxkbcommon-dev libxrandr-dev libxi-dev libxinerama-dev libasound2-dev libpulse-dev libwayland-dev wayland-protocols libegl1-mesa-dev libgl1-mesa-dev libgles2-mesa-dev libglx-dev libdrm-dev libgbm-dev libgl1-mesa-dri mesa-vulkan-drivers mesa-utils mesa-utils-extra x11-apps gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-gl gstreamer1.0-alsa gstreamer1.0-pipewire libgstreamer1.0-0 libgstreamer-plugins-base1.0-0 libgstreamer-gl1.0-0

Build And Run Makepad Studio

Makepad Studio is the main entry point for exploring examples and iterating on UI.

cargo run -p makepad-director --release

If you want a local install (note: may lag the repo):

cargo install makepad-director

Examples

Run a few representative apps directly from the repo:

# Splash (simple animated demo)
cargo run -p makepad-example-splash --release

# 3D rendering (glTF)
cargo run -p makepad-example-gltf --release

# Maps
cargo run -p makepad-example-map --release

Maps And Voice Assets

For built-in maps and voice support, download the assets first:

./tools/download_map.sh
./tools/download_voice.sh

Run A WASM App

  1. Install toolchain:
cargo makepad wasm install-toolchain
  1. Run an example:
cargo makepad wasm run -p makepad-example-splash --release

For smaller shipped wasm output, use the shipping-size optimization pass. It keeps the post-link size reduction behavior and pairs well with the existing small profile:

cargo makepad wasm build -p makepad-example-splash --profile=small --strip

To split the wasm payloads, add --split. Bare --split uses an automatic cold-first policy: it first moves defer-safe cold functions into a secondary wasm so startup can begin on the primary first, and if there are no useful cold candidates it falls back to the normal function split. To override the function-splitting threshold directly:

cargo makepad wasm build -p makepad-example-splash --release --strip --split=200

For maximum size reduction, combine --wasm-opt (Binaryen IR optimization) and --brotli (compression). Install Binaryen for --wasm-opt (e.g. brew install binaryen or apt install binaryen):

cargo makepad wasm build -p makepad-example-splash --release --wasm-opt --strip --split --brotli

Notes:

  • --strip strips custom sections (names, producers, etc.) for smaller binaries.
  • --strip-custom-sections preserves the old behavior when you only want to remove custom sections.
  • --wasm-opt runs Binaryen wasm-opt -Os for IR-level optimization (optional; requires Binaryen).
  • --brotli compresses .wasm and assets with Brotli for delivery.
  • --profile=small uses smaller fonts and pairs well with --strip.
  • --no-threads trims the web thread bridge and thread exports when threading is disabled.
  • The wasm linker packs relocations before the post-link size and split passes.
  • --split emits a primary wasm plus secondary payloads (.secondary.wasm, .data.bin) and implies function splitting.
  • Bare --split uses an automatic cold-first split policy.
  • Auto mode defers the secondary when it finds defer-safe cold functions, otherwise falls back to the normal startup-path split.
  • --split=200 switches to an explicit function-body threshold (bytes).
  1. Open:
http://127.0.0.1:8010

Run An Android App

Plug in a device with developer mode enabled, then:

  1. Install toolchain:
cargo run -p cargo-makepad --release -- android --target=all toolchain-install
  1. Run an example:
cargo run -p cargo-makepad --release -- android run -p makepad-example-ironfish

Notes

  • Studio uses cargo-makepad internally for non-standard targets.