Installation
Select the latest release for your platform from the releases page. Unzip it and add the executable (elcap
on MacOS and Linux, elcap.exe
on Windows) to your path.
First Run
Once it's in your path, go ahead and run it. You should see something that looks like this.
$ elcap
Downloading v0.2.6 [#################################] 17.28 MiB/17.28 MiB (0s)
Usage: elcap [OPTIONS] COMMAND [ARGS]...
ElCap CLI v0.2.6
╭─ Options ───────────────────────────────────────────────────────────────────╮
│ --verbose -v Enable verbose output │
│ --help Show this message and exit. │
╰─────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ──────────────────────────────────────────────────────────────────╮
│ build Build a project │
│ clean Clean project and container artifacts if they exist │
│ config See or modify elcap's configuration │
│ device Device/Programmer interaction commands │
│ doctor Check your environment │
│ flash Flash the current project or specified file │
│ image Manipulate an existing image │
│ new Create a new project │
│ project Configure or modify the current project │
│ tokens Configure or modify device tokens │
│ version See version info │
╰─────────────────────────────────────────────────────────────────────────────╯
Check-in With The Doctor
Next, you can run elcap doctor
to check your setup. If you don't already have Docker installed it will let you know.
$ elcap doctor
✅ config.toml should exist
❌ Docker should be installed and in your PATH
🛠 install docker
🛠 confirm docker is in your path
❌ The docker daemon should be running
🛠 Launch Docker Desktop.
🛠 Start the docker service if you're not using Docker Desktop.
❌ JLink v8.10k or newer must be installed and specified in config.toml
🛠 install the latest jlink tools from: https://www.segger.com/downloads/jlink/
🛠 add the location to your configuration
🛠 Run 'elcap config set tools.jlink_path /path/to/jlink_tools'
✋ Fix the above issues and try again
If you see this, you should install and set up Docker Desktop on your system and make sure it's added to your path. Once that's set up correctly, the doctor will let you know.
$ elcap doctor
Checking your environment...
✅ config.toml should exist
✅ Docker should be installed and in your PATH
✅ The docker daemon should be running
❌ JLink v8.10k or newer must be installed and specified in config.toml
🛠 install the latest jlink tools from: https://www.segger.com/downloads/jlink/
🛠 add the location to your configuration
🛠 Run 'elcap config set tools.jlink_path /path/to/jlink_tools'
✋ Fix the above issues and try again
Last, but not least, if you would like to flash your project you should install the JLink Tools. We require version v8.10k or above.
Once those are installed, you will have to configure ElCap to find them.
$ elcap config set tools.jlink_path "/Applications/SEGGER/JLink_V824"
NOTE: make sure to put quotes around the path if there are any spaces in directory names.
And you can confirm its correct by running config
again:
$ elcap config
tools.jlink_path=/Applications/SEGGER/JLink_V824
Now the doctor should be happy.
$ elcap doctor
Checking your environment...
✅ config.toml should exist
✅ Docker should be installed and in your PATH
✅ The docker daemon should be running
✅ JLink v8.10k or newer must be installed and specified in config.toml
👍 Looks good!
Creating Your First Project
Our New Project Wizard can walk you through creating a new project.
$ elcap new
Creating a new project...
Project Name: My Awesome Project
name has been set to My Awesome Project
Project Path (my_awesome_project):
path has been set to my_awesome_project
1. v2025.03.00-alpha04
2. v2025.03.00-alpha03
3. v2025.03.00-alpha02
Select SDK Version (1): 1
1. bootloader
2. z-wave
3. zigbee
Select category (1): 3
1. on_off_bulb_zed
2. on_off_switch_szed
3. door_lock_szed
4. empty_zed
Select template (1): 1
1. T32CM11C
Select target (1): 1
******
[project]
name = "My Awesome Project"
category = "zigbee"
target = "T32CM11C"
default_hex = "-neptune-combined.hex"
[sdk]
version = "v2025.03.00-alpha04"
******
Do you confirm generation? [y/n] (y): y
This will create a directory called my_awesome_project
in your current directory which will have all the code and information needed to build your project. Take a look at the generated trident.toml
file.
$ cat my_awesome_project/trident.toml
[project]
name = "My Awesome Project"
category = "zigbee"
target = "T32CM11C"
default_hex = "-neptune-combined.hex"
[sdk]
version = "v2025.03.00-alpha04"
This directory will have everything elcap needs to build your project, so you can check it into source control and share it with other developers on your team.
Building Your First Project
Make sure you're in the project directory.
Now run the build
subcommand.
$ elcap build
...
[100%] Built target my_awesome_project-neptune-combined_hex
[100%] Built target my_awesome_project-custom-combined_hex
That's all there is to it!
Flashing Your First Project
Flashing is (almost) just as easy! First connect your device to your USB port and run the device discover
subcommand.
$ elcap device discover
Connection | Serial Number | IP Address | Name
-----------+---------------+------------+-------------------
USB | 440114326 | | J-Link EnergyMicro
Next, simply flash to the device using the serial number that came from the device discover command:
$ elcap flash --usb 440114326
What's Next?
Now that you can create, build and flash your project you'll probably want to make it do something interesting. Check out our SDK docs for more information on how to do that.
Need Help?
First, keep in mind that elcap
has extensive help menus with more information. For example, try running --help
on the flash
subcommand.
$ elcap flash --help
Usage: elcap flash [OPTIONS] COMMAND [ARGS]...
Flash the current project or specified file
╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --usb INTEGER USB serial number of the JLink device (cannot be used with --ip) [default: None] │
│ --ip TEXT IP address of the JLink device (cannot be used with --usb) [default: None] │
│ --target TEXT flash target │
│ --file PATH file to flash [default: None] │
│ --interface TEXT programming interface [default: SWD] │
│ --speed INTEGER programming speed [default: 4000] │
│ --help Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ erase Erase internal flash │
│ erase-sector Erase specified address range of flash │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
This will give you details on the available commands and their options.
You can also reach out to us at suppo.nosp@m.rt@t.nosp@m.riden.nosp@m.tiot.nosp@m..com.