This is the abridged developer documentation for Mixlar SDK # Mixlar Docs > Extend the Mixlar M1X — plugins, device widgets, and the mixlar-sdk toolkit. Snap blocks in the Studio, or build locally in your editor with the SDK. ## Pick your path [Section titled “Pick your path”](#pick-your-path) Developer / SDK Everything to build a plugin or device widget: the `MixlarPlugin` API, the `mixlar-sdk` CLI, the widget spec and serial protocol, signing, and the device emulator. [Get started →](/developer/introduction/getting-started/) Mixlar app (users) Using the Mixlar Control app and the M1X hardware — connecting, sliders, macros, profiles, and on-screen widgets. *(Coming soon.)* [Open the user guide →](/user/) ## Jump in [Section titled “Jump in”](#jump-in) [Getting started](/developer/introduction/getting-started/)Install the SDK, scaffold a plugin, test it with no hardware. [Plugin API](/developer/plugins/plugin-api/)The MixlarPlugin base class — macros, sliders, settings, widgets. [Device widgets](/developer/widgets/spec/)The mixw widget spec, elements, and the WDATA/WEVENT protocol. [CLI reference](/developer/cli/intro/)create · validate · emulate · pack · sign — the mixlar-sdk command. # create > Scaffold a new Mixlar plugin package with a guided wizard or a single flag-driven command `mixlar-sdk create` scaffolds a new plugin package from one of four starter templates. Run it bare in a terminal and you get a friendly, guided wizard; pass a name (or `--yes`) and it scaffolds straight from flags — which is also exactly what CI and scripts get, since the wizard only ever runs on an interactive TTY. ```bash mixlar-sdk create [name] --dir DIR --template {macro,slider,widget,full} \ --id PLUGIN_ID --author AUTHOR --yes --force ``` ## The wizard [Section titled “The wizard”](#the-wizard) If you run `mixlar-sdk create` with no name and no `--yes`, and you’re on an interactive terminal, you get the wizard: 1. **Plugin name** — the display name shown on the plugin card. Defaults to `"My Plugin"`. 2. **Plugin ID** — the lowercase id and output folder name. Defaults to a slug of the name you just typed. 3. **Availability check** *(optional)* — the wizard offers to check whether that id is already taken on the Mixlar registry before you commit to it. 4. **Author** — you or your organization. Written into `plugin.json`. 5. **Description** — one line, optional. If you leave it blank, a sensible default is filled in based on the template you pick next. 6. **Template** — pick one of `full`, `macro`, `slider`, or `widget` from a menu (`full` is the default/first option). A transcript looks like this: ```text Create a Mixlar plugin ? Plugin name › My Plugin ? Plugin ID (lowercase id + folder name) › my_plugin ? Check if 'my_plugin' is available on registry.mixlar.net? › Yes Searching… ✓ 'my_plugin' is available ? Author (you or your organization) › Jane Dev ? Description (one line (optional)) › › ? Template › ❯ full macros + slider + device widget + settings macro just macro actions slider just a slider mode widget a plugin paired to a device widget My Plugin created 🎉 Next steps cd C:\...\my_plugin mixlar-sdk validate mixlar-sdk emulate --render preview.png mixlar-sdk pack Learn more: https://mixlar.net/developer/introduction/getting-started/ ``` ## The flag-driven form [Section titled “The flag-driven form”](#the-flag-driven-form) Pass a `name` positional argument, or `--yes`/`-y`, and `create` skips the wizard and scaffolds immediately from flags and defaults. This is also what happens automatically in non-TTY environments (CI, piped output). ```bash mixlar-sdk create "Weather Widget" --template widget --author "Jane Dev" ``` ```console $ mixlar-sdk create "Weather Widget" --template widget --author "Jane Dev" [ok] created 'widget' plugin 'Weather Widget' (weather_widget) at C:\...\weather_widget Next steps: cd C:\...\weather_widget mixlar-sdk validate mixlar-sdk emulate --render preview.png mixlar-sdk pack ``` | flag | default | meaning | | ------------------- | ------------------------ | --------------------------------------------- | | `name` (positional) | wizard, or `"My Plugin"` | display name; omit to trigger the wizard | | `--dir` | `.` | directory to create the package folder in | | `--template` | `full` | `macro` / `slider` / `widget` / `full` | | `--id` | slug of `name` | plugin id (also the output folder name) | | `--author` | `""` | written into `plugin.json` | | `--yes` / `-y` | off | skip the wizard even on a TTY (scripts/CI) | | `--force` | off | overwrite an existing folder of the same name | Caution If the destination folder already exists, `create` refuses and exits with an error unless you pass `--force`, which deletes and recreates it. There’s no merge — `--force` is destructive to whatever was there. ## Templates [Section titled “Templates”](#templates) Every template lives under `mixlar_cli/templates/