wendy init
Initialize a new Wendy project
Syntax
wendy init [app-id] [flags]Examples
wendy init
wendy init hello-wendy --target wendyos --language node --template simple-api --var PORT=3000 --assistant skip --git-init noArguments
Argument notation from the CLI: [app-id]. Angle brackets mark required values; square brackets mark optional values. See Details for command-specific validation.
Flags
Flags below include inherited options. Types and defaults come from the CLI source. An empty default means no value is configured.
| Flag | Type | Default | Description |
|---|---|---|---|
--all-entitlements | bool | false | Enable all entitlements (requires field flags for gpio, i2c, persist) |
--app-id | string | (empty) | Application ID to write into wendy.json |
--assistant | string | (empty) | AI assistant to launch after init: claude, codex, or skip |
--branch | string | (empty) | Branch of the templates repo to use (default: main) |
--device | string | (empty) | Target device hostname; wendy run accepts a comma-separated list to deploy one build to several devices (needs a remote build host and --detach). Defaults to $WENDY_DEVICE, then the saved default device |
--entitlement | stringSlice | [] | App entitlement to enable (repeatable or comma-separated) |
--framework | stringSlice | [] | App framework to enable in wendy.json's top-level "frameworks" key (repeatable or comma-separated; currently: ros2) |
--git-init | string | (empty) | Initialize a git repo in the project directory (yes or no) |
--gpio-pins | string | (empty) | GPIO pins for the gpio entitlement (comma-separated, e.g. 17,27,22) |
--here | bool | false | Scaffold into the current directory instead of creating a subdirectory |
--i2c-device | string | (empty) | I2C device path for the i2c entitlement (e.g. /dev/i2c-1) |
--install-claude-skills | bool | false | Install Wendy Claude skills before launching Claude |
--json | bool | false | Output in JSON format |
--language | string | (empty) | Project language: python, swift, rust, node, cpp, or mojo |
--no-extra-entitlements | bool | false | Skip entitlement prompts and use only the default network entitlement |
--persist-name | string | (empty) | Container ID for the persist entitlement |
--persist-path | string | (empty) | Mount path for the persist entitlement (e.g. /data) |
--ros2-discovery-scope | string | (empty) | ROS 2 discovery scope: app (default, isolated) or host (shared with the device's host network) |
--ros2-distro | string | (empty) | ROS 2 distribution (default: humble) |
--ros2-domain-id | int | -1 | ROS 2 domain ID, 0-232 (default: derived from the app ID) |
--ros2-rmw | string | (empty) | ROS 2 middleware implementation: cyclonedds (default), fastrtps, connextdds, or gurumdds |
--target | string | (empty) | Target platform: wendyos (writes "linux" to wendy.json), wendy-lite, or darwin |
--template | string | (empty) | Project template (e.g. simple-api, fullstack) |
--var | stringSlice | [] | Template variable override (repeatable, KEY=VALUE) |
Output
Output depends on the operation and selected target. Command behavior and detailed examples.
JSON output
The global --json option requests machine-readable output. The CLI also selects JSON mode when no interactive terminal is attached. Support and payloads are command-specific; this flag does not guarantee a single JSON document for commands that stream logs or invoke build tools. Consult Details before parsing command output.
Exit codes
The CLI entry point returns 0 on success and for its user-cancelled or default-cleared results. Other returned errors exit with 1 and print a diagnostic to stderr. Some operations may terminate through subprocess or signal handling; do not infer application health from the CLI exit code alone.
Common errors
Check argument values and flag combinations against the synopsis above. For discovery, build, port, and readiness failures, see deployment troubleshooting. Command-specific constraints are in Details.
See also
Details
Interactively create a new Wendy project with scaffolding, entitlements, and optional AI assistant setup.
An [app-id] argument (or --app-id) creates a new subdirectory of that name by default; pass --here to scaffold into the current directory instead (with no app ID, --here infers one from the current directory's name).
wendy.json also supports a separate, top-level "frameworks" key for framework-level config (currently ROS 2: domain ID, RMW middleware, discovery scope). Enable it with --framework (see the ROS 2 example below), through the interactive prompt on a WendyOS target, or by hand-editing "frameworks" in wendy.json afterwards.