{"id":13503365,"url":"https://github.com/makepad/makepad","last_synced_at":"2025-05-06T02:33:33.271Z","repository":{"id":37926442,"uuid":"171664300","full_name":"makepad/makepad","owner":"makepad","description":"Makepad is a creative software development platform for Rust that compiles to wasm/webGL, osx/metal, windows/dx11 linux/opengl","archived":false,"fork":false,"pushed_at":"2025-04-29T15:44:22.000Z","size":135357,"stargazers_count":5367,"open_issues_count":91,"forks_count":271,"subscribers_count":77,"default_branch":"master","last_synced_at":"2025-04-29T15:59:28.737Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://makepad.dev/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/makepad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-02-20T11:54:00.000Z","updated_at":"2025-04-29T08:04:45.000Z","dependencies_parsed_at":"2023-02-19T00:45:48.285Z","dependency_job_id":"4bc99cef-4a31-42e0-80be-878fa3255413","html_url":"https://github.com/makepad/makepad","commit_stats":{"total_commits":3594,"total_committers":30,"mean_commits":119.8,"dds":"0.32081246521981077","last_synced_commit":"587039657aa13f8c8c0ae2a12c0920d52c4fd448"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makepad%2Fmakepad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makepad%2Fmakepad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makepad%2Fmakepad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makepad%2Fmakepad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/makepad","download_url":"https://codeload.github.com/makepad/makepad/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252609895,"owners_count":21775899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T22:02:48.499Z","updated_at":"2025-05-06T02:33:28.258Z","avatar_url":"https://github.com/makepad.png","language":"Rust","funding_links":[],"categories":["Libraries","Rust","WebAssembly","Editor","others","GUI"],"sub_categories":["Rust","GUI"],"readme":"## Contact\n\nRik Arends: @rikarends on twitter, https://fosstodon.org/@rikarends#\n\nEddy Bruel: @ejpbruel on twitter\n\nSebastian Michailidis: @SebMichailidis on twitter\n\nOur discord channel for Makepad:\nhttps://discord.gg/adqBRq7Ece\n\nMost recent talk about makepad: https://www.youtube.com/watch?v=rC4FCS-oMpg\n\n# Makepad\n\n## Overview\n\nThis is the repository for Makepad, a new way to build UIs in Rust for both native and the web.\n\nMakepad consists of Makepad Framework and Makepad Studio.\n\nMakepad Framework is our UI framework. It consists of multiple crates, but the top level crate is [makepad-widgets](https://crates.io/crates/makepad-widgets). For a further explanation of Makepad Framework, please see the README for that crate.\n\nMakepad Studio is a prototype of an IDE that we've built using Makepad Framework. It's still under heavy development, but our eventual goal with Makepad Studio is to create an IDE that enables the design of an application to be changed at runtime. The main crate for Makepad Studio is [makepad-studio](https://crates.io/crates/makepad-studio). Please see the README for that crate for more.\n\nDemo links:\n\n[makepad-example-fractal-zoom](https://makepad.nl/makepad/examples/fractal_zoom/src/index.html)\n\n[makepad-example-ironfish](https://makepad.nl/makepad/examples/ironfish/src/index.html)\n\n[makepad-example-simple](https://makepad.nl/makepad/examples/simple/src/index.html)\n\n\n### Prerequisites\n\nTo build the Makepad crates you first need to install Rust.\n[https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)\n\nOur native builds work on the stable Rust toolchain. However, some of the errors generated by Makepad at runtime (particulary those originating in our DSL) do not contain line information unless you use the nightly Rust toolchain. Moreover, our web builds only work on nightly for now. For this reason, we recommend that you build Makepad using the nightly Rust toolchain.\n\nFor the non standard build targets (apple ios, apple tvos, android, wasm) we have a buildtool called 'cargo-makepad' that you need to install.\n\nInstall it from a local clone of the [repo](https://github.com/makepad/makepad):\n\n```cargo install --path=./tools/cargo_makepad```\n\nOr install it from crates.io (the last published version, it may be older than the repo):\n\n```cargo install cargo-makepad```\n\nThe way how you've installed `cargo-makepad` will affect how you will install Makepad studio, if you\nchoose to use it (more later).\n\nNow this tool can be used to install toolchains per platform needed\n\n```cargo makepad wasm install-toolchain```\n\n```cargo makepad apple ios install-toolchain```\n\n```cargo makepad apple tvos install-toolchain```\n\n\n```cargo makepad android --abi=all install-toolchain```\n\n## Running makepad studio\n\nMakepad studio allows you to easily build and view the examples, and it uses cargo-makepad internally so be sure to install cargo-makepad as shown above.\n\nIf you've installed `cargo-makepad` from a local clone of the repo, then either\n- build \u0026 run Makepad studio from the local clone:\n  \n  ```cargo run -p makepad-studio --release```\n- or install `makepad-studio` from the local clone:\n  \n  ```cargo install --path=./studio```\n\nOr install it from crates.io (the last published version, it may be older than the repo)::\n\n```cargo install makepad-studio```\n\nIf you build the wasm applications, you can open it on:\n\n\u003chttp://127.0.0.1:8010\u003e\n\n## Build \u0026 Run Commands\n\n[Makepad](https://github.com/makepad/makepad) is a cross-platform UI framework written in Rust.\nIt is in active development, but is already usable to build quick prototypes and simple (or even complicated UI) applications.\n\nOne of the key features of the Makepad is its ability to simply, and quickly, build and run applications on multiple platforms, including MacOS, Windows, Linux, Android, iOS, and WebAssembly.\n\nHere are the current/latest instructions on how to build and run Makepad applications on the different platforms.\n\n## Assumptions\n\nWe will assume the following:\nName of application: **`makepad-example-simple`**\n\nIt can be changed to any one of the existing example apps in the [*Makepad* examples folder](https://github.com/makepad/makepad//tree/master/examples).\n\n## Build \u0026 Run Instructions\n\nFollow step 1 commands below for initial setup of the Makepad build and run environment.\nAfter step 2, you may choose any one or more of the platforms you're interested in building for.\n\n## 1. Setup Makepad\n\nReplace `projects` with your own directory name.\n\n```bash\ncd ~/projects\n```\n\n### Clone the Makepad repository\n\n```bash\ngit clone https://github.com/makepad/makepad.git\n```\n\nor\n\n```bash\ngit clone git@github.com:makepad/makepad.git\n```\n\n### Change to latest 'rik' branch (Optional)\n\n```bash\ncd ~/projects/makepad\ngit branch rik\n```\n\n### Install makepad subcommand for cargo\n\n```bash\ncd ~/projects/makepad\ncargo install --path ./tools/cargo_makepad\n```\n\n### Install platform toolchains\n\n```bash\nrustup toolchain install nightly\n```\n\n## 2. Go To Examples folder (Optional)\n\n```bash\ncd ~/projects/makepad/examples\nls -l\n```\n\nAll examples in this directory have the application name of `makepad-example-` prefix plus the name of directory.\n\n## 3. MacOS / PC\n\nRunning on Desktop is the quickest way to try out an example app.\n\n```bash\ncd ~/projects/makepad/examples/simple\ncargo run\n```\n\nor\n\n```bash\ncd ~/projects/makepad\ncargo run -p makepad-example-simple\n```\n\nAnd there should be a desktop application window now running (may need to click on the icon on MacOS's Dock to show it)\n\n## 4. Android Build\n\n### Install Android toolchain (First time)\n\n```bash\ncargo makepad android install-toolchain\n```\n\n### Install app on Android device or Android emulator\n\nOpen either the Android emulator or connect to a real Android device\nuse `adb` command to make sure there's a single device connected properly, then install and run as below:\n\n```bash\ncd ~/projects/makepad\ncargo makepad android run -p makepad-example-simple --release\n```\n\nThe application will be installed and launch on either the emulator or device.\n\n## 5. iOS Setup \u0026 Install\n\n### Install iOS toolchain (First time)\n\n```bash\nxcode-select --install\ncargo makepad apple ios install-toolchain\n```\n\n### Install app on Apple devivce or iOS simulator\n\n### iOS Setup\n\nFor iOS, the process is slightly more complicated. The steps involved are:\n\n1. Enable your iPhone's Developer Mode, please see instructions here: [Enable Developer Mode](https://www.delasign.com/blog/how-to-turn-on-developer-mode-on-an-iphone/)\n1. Setup an Apple Developer account\n1. Setup an empty skeleton project in XCode\n    1. File -\u003e New -\u003e Project to create a new \"App\"\n    1. Set the Product Name as **`makepad-example-simple`** (used in --app later)\n    1. Set the Organization Identifier to a value of your choice, for this example we will use **`my.test`** (used in --org later)\n    1. Setup the Project Signing \u0026 Capabilities to select the proper team account\n1. In XCode, Build/Run this project to install and run the app on the simulator and device\n1. Once the simulator and device has the \"skeleton\" app installed and running properly, then it is ready for Makepad to install its application.\n\n### Makepad Install\n\nWe will run the `cargo makepad apple ios` command, similar to Android build above, but there are some 2 to 6 additional parameters that need to be filled in:\n\n**`--org`**\n\nFirst few parts of the organization identifier. Usually in the form of *com.somecompany* or *org.orgname*, etc.\nThis is the same value used to setup the initial skeleton app above. For this example:\n\u003e `my.test`\n\n**`--app`**\n\nThe name of the application or the project. This is the same as the Product Name used to setup the initial skeleton app above. In this case:\n\u003e `makepad-example-simple`\n\n### Install app on iOS simulator\n\n```bash\ncd ~/projects/makepad\ncargo makepad apple ios \\\n  --org=my.test \\\n  --app=makepad-example-simple \\\n  run-sim -p makepad-example-simple --release\n```\n\n### Install app on iOS device\n\nFor installing on real device, the process is more involved due to possibility of multiple profiles and signing identities and target devices. For this reason, Makepad provides a list command to show all the local provisioning profiles, signing identities and connected devices, which can be used as the value for the subsequent command arguments.\n\nFor example, first run the following command:\n\n```bash\ncd ~/projects/makepad\ncargo makepad apple list\n```\n\nThis command will print out the list of all provisioning profiles, signing identities, and device identifiers on the current system. The user has to decide and choose the ones that he/she needs to use for each type.\n\nOnce decided, run the folloiwng command and fill in the **unique starting characters** chosen from the output.\n\n```bash\ncargo makepad apple ios \\\n --profile=unique-starting-hex-string-of-provisioning-profiles \\\n --cert=UNIQUE_STARTING_HEX_STRING-of-signing-certificates \\\n --device-identifier=UNIQUE-STARTING-HEX-STRING-of-devices \\\n --org=my.test \\\n --app=makepad-example-simple \\\n run-device -p makepad-example-simple –release\n \n```\n\nThe application will be installed and launched on either the emulator or real device. (Make sure the device is connected and unlocked)\n\n## 6. WASM Build\n\nRunning the Makepad application as a WASM build is as simple as a single command. The sript will automatically generate the necessary index.html and other files and also start a local webserver at port 8010. After running the command below, just open your browser to \u003chttp://127.0.0.1:8010/\u003e in order for the app to load and run.\n\n### Install WASM toolchain (First time)\n\n```bash\ncargo makepad wasm install-toolchain\n```\n\n### Install app as WASM binary for browsers\n\n```bash\ncargo makepad wasm run -p makepad-example-simple --release\n```\n\n### Cross-origin headers for WASM for browsers\n\nFor WASM to work in browsers, your web server must\n\n- serve the MIME types correctly (as is common), and\n- set the following two headers.\n  ```\n  Cross-Origin-Embedder-Policy: require-corp\n  Cross-Origin-Opener-Policy: same-origin\n  ```\n  This is NOT common on public web servers like GitHub Pages. And it can't be set with `\u003cmeta\n  http-equiv=\"...\" content=\"...\"\u003e\u003c/meta\u003e` in `index.html`.\n  \n  A workaround - but possibly for non-private browser mode only: use\n  [gzuidhof/coi-serviceworker](https://github.com/gzuidhof/coi-serviceworker):\n  \n  1. Let's say that you use Makepad's `experiments/html_experiment`. Build it with `cargo makepad\n     wasm build -p makepad-experiment-html`.\n  2. Copy\n     [coi-serviceworker.min.js](https://github.com/gzuidhof/coi-serviceworker/blob/master/coi-serviceworker.min.js)\n     (or\n     [coi-serviceworker.js](https://github.com/gzuidhof/coi-serviceworker/blob/master/coi-serviceworker.js))\n     to `target/makepad-wasm-app/debug/makepad-experiment-html`.\n  3. Edit `target/makepad-wasm-app/debug/makepad-experiment-html/index.html` and under `\u003chead\u003e` add:\n     `\u003cscript src=\"coi-serviceworker.min.js\"\u003e\u003c/script\u003e` (or `\u003cscript\n     src=\"coi-serviceworker.js\"\u003e\u003c/script\u003e`).\n  4. If use build a release with `cargo makepad wasm build -p makepad-experiment-html --release`,\n     then the build directory is `makepad/target/makepad-wasm-app/release/makepad-experiment-html`\n     instead.\n  5. If there is any initiation, it will be run twice. To control that, follow\n     [gzuidhof/coi-serviceworker#14](https://github.com/gzuidhof/coi-serviceworker/issues/14).\n  6. If this works well, incorporate it to Makepad's `tools/cargo_makepad/src/wasm/compile.rs` and\n     `platform/src/os/web/` and create a pull request.\n---\n\n## Makepad Commands Quick Reference\n\n### Cargo Tools Installations\n\nThese are commands that need to be run at least once initially to setup Makepad development environments.\nThey should also be run once in a while or when there are updates to the cargo_makepad script.\n\n```bash\nrustup update\nrustup install nightly\nrustup toolchain install nightly\n\ncd ~/projects/makepad\ncargo install --path ./tools/cargo_makepad\ncargo makepad android install-toolchain\ncargo makepad apple ios install-toolchain\ncargo makepad apple tv install-toolchain\ncargo makepad wasm install-toolchain\n\n```\n\n### Android\n\nCommand for installing the app onto an iOS Simulator.\n\n```bash\ncargo makepad android run -p makepad-example-simple --release\n\ncargo makepad android run -p makepad-example-fractal-zoom --release\n\ncargo makepad android run -p makepad-example-ironfish --release\n\ncargo makepad android run -p makepad-example-news-feed --release\n```\n\n### iOS Simulator\n\nCommand for installing the app onto an iOS Simulator.\n\n```bash\ncargo makepad apple ios --org=my.test --app=makepad-example-simple run-sim -p makepad-example-simple --release\n\ncargo makepad apple ios --org=my.test --app=makepad-example-fractal-zoom run-sim -p makepad-example-fractal-zoom --release\n\ncargo makepad apple ios --org=my.test --app=makepad-example-ironfish run-sim -p makepad-example-ironfish --release\n\ncargo makepad apple ios --org=my.test --app=makepad-example-news-feed run-sim -p makepad-example-news-feed --release\n```\n\n### iOS Device\n\nCommand for installing the app onto a physical iOS device.\n\n**See Step 5 above for more detailed instructions.**\n\n```bash\ncargo makepad apple ios --org=my.test --profile=ABC --cert=DEF --device=MyiPhone --app=makepad-example-simple run-device -p makepad-example-simple --release\n\ncargo makepad apple ios --org=my.test --profile=ABC --cert=DEF --device=MyiPhone --app=makepad-example-fractal-zoom run-device -p makepad-example-fractal-zoom --release\n\ncargo makepad apple ios --org=my.test --profile=ABC --cert=DEF --device=MyiPhone --app=makepad-example-ironfish -run-device -p makepad-example-ironfish --release\n\ncargo makepad apple ios --org=my.test --profile=ABC --cert=DEF --device=MyiPhone --app=makepad-example-news-feed run-device -p makepad-example-news-feed --release\n```\n\n### Cargo Check Builds\n\nCommand to check that the compilation passes for all Makepad supported platforms:\n(Will use 100% CPU and cause hang machine, only try on high-end systems)\n\n```bash\ncargo makepad check install-toolchain\ncargo makepad check all\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakepad%2Fmakepad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakepad%2Fmakepad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakepad%2Fmakepad/lists"}