- Swift 6.2 or later (required)
- Swift 6.2.1 or later (recommended for Span support)
- macOS 15 (Sequoia) or later for development
- Xcode 16.2 or later (if using Xcode)
For the cli to work properly on linux, usbutils needs to be installed.
The CLI requires Swift 6.2 or later. The toolchain should be installed at /Library/Developer/Toolchains/swift-6.2-RELEASE.xctoolchain. You can obtain a copy of this toolchain here. During the installation of the toolchain pkg, you need to select "Install for all users of this computer".
Before installing the SDK in the next step, export theTOOLCHAINS environment variable:
export TOOLCHAINS=$(plutil -extract CFBundleIdentifier raw /Library/Developer/Toolchains/swift-6.2-RELEASE.xctoolchain/Info.plist)Note: The project includes conditional compilation for Swift 6.2.1+ to enable Span support in the swift-subprocess package. When using Swift 6.2.1 or later, the SubprocessSpan trait will be automatically enabled for better subprocess management.
After installing the toolchain and exporting the TOOLCHAINS variable, you need to install the Swift Static Linux SDK. This step is necessary on all platforms (including macOS).
swift sdk install https://download.swift.org/swift-6.2-release/static-sdk/swift-6.2-RELEASE/swift-6.2-RELEASE_static-linux-0.0.1.artifactbundle.tar.gzWe have a Homebrew Tap to install the developer CLI on macOS.
brew tap wendyengineer/tap
brew install wendyTo update the CLI on macOS:
brew upgrade wendyThe device needs to run the wendy-agent utility. We provide pre-build Wendy images for the Raspberry Pi and the NVIDIA Jetson Orin Nano. These are preconfigured for remote debugging and have the wendy-agent preinstalled.
WendyAgent supports both NetworkManager and ConnMan for WiFi configuration. The agent will automatically detect which network manager is available on the system:
- ConnMan is preferred for embedded/IoT devices due to its lighter resource usage
- NetworkManager is supported for desktop and server environments
- The agent will automatically detect and use the available network manager
You can configure the network manager preference using the WENDY_NETWORK_MANAGER environment variable on the agent:
# Auto-detect (default)
export WENDY_NETWORK_MANAGER=auto
# Prefer ConnMan if available, fall back to NetworkManager
export WENDY_NETWORK_MANAGER=connman
# Prefer NetworkManager if available
export WENDY_NETWORK_MANAGER=networkmanager
# Force ConnMan (will fail if not available)
export WENDY_NETWORK_MANAGER=force-connman
# Force NetworkManager (will fail if not available)
export WENDY_NETWORK_MANAGER=force-networkmanagerIf no environment variable is set, the agent will auto-detect the available network manager.
The wendy CLI communicates with a wendy-agent. The agent needs uses Docker for running your apps, so Docker needs to be running.
On a Debian (or Ubuntu) based OS, you can do the following:
# Install Docker
sudo apt install docker.io
# Start Docker and keep running across reboots
sudo systemctl start docker
sudo systemctl enable docker
# Provide access to Docker from the current user
sudo usermod -aG docker $USERThen, you can download and run your wendy-agent on the device. We provide nightly tags with the latest wendy-agent builds in this repository.
If you're planning to test the wendy-agent on macOS, you'll need to build and run the agent yourself from this repository.
swift run wendy-agentYou can run the hello world example by executing the following command:
cd Examples/HelloWorld
swift run --package-path ../../ -- wendy run --device <hostname-of-device>This will build the Wendy CLI and execute it's run command. The Wendy CLI will in turn build the
HelloWorld example using the Swift Static Linux SDK, and run it in a Docker container.
A more advanced example demonstrating HTTP server capabilities is available in the HelloHTTP directory:
cd Examples/HelloHTTP
swift run --package-path ../../ -- wendy run --device <hostname-of-device>To debug examples, you can use the following command:
swift run --package-path ../../ -- wendy run --device <hostname-of-device> --debugYou can now attach the LLDB debugger through using port 4242.
To start an LLDB debugging session from the CLI, run lldb from the Terminal:
lldbThen, from within LLDB's prompt run the following to connect to your app's debugging session:
(lldb) target create .wendy-build/debug/HelloWorld
(lldb) settings set target.sdk-path "<path-to-sdk.artifactbundle>/swift-6.2-RELEASE_static-linux-0.0.1/swift-linux-musl/musl-1.2.5.sdk/aarch64"
(lldb) settings set target.swift-module-search-paths "<path-to-sdk.artifactbundle>/swift-6.2-RELEASE_static-linux-0.0.1/swift-linux-musl/musl-1.2.5.sdk/aarch64/usr/lib/swift_static/linux-static"
(lldb) gdb-remote localhost:4242Unfortunately, running expressions (e.g. po) doesn't work yet.
The Wendy CLI includes privacy-first anonymous usage analytics to help improve the developer experience. Analytics helps us understand which commands are used most, identify common errors, and prioritize improvements.
- Command names and success/failure status
- Sanitized error types (no sensitive data)
- CLI version and operating system
- Anonymous identifier (UUID)
We never collect file paths, hostnames, project names, code, or any personally identifiable information.
Check current analytics status:
wendy analytics statusDisable analytics:
wendy analytics disable
# Or set environment variable
export WENDY_ANALYTICS=falseRe-enable analytics:
wendy analytics enableAnalytics is automatically disabled in CI environments.