Downloads
fwci is the command-line interface for FirmwareCI. It lets you configure the Git repositories connected to FirmwareCI and other tasks.
Currently, the tool supports Linux x64 and Linux ARM64 systems.
Installation Options
| Platform | Precompiled Binary | Debian/Ubuntu (.deb) | Red Hat/CentOS/Fedora (.rpm) | Arch Linux (.pkg.tar.zst) | Alpine Linux (.apk) |
|---|---|---|---|---|---|
| x64 | fwci-latest.linux-amd64.tar.gz | fwci-latest.linux-amd64.deb | fwci-latest.linux-amd64.rpm | fwci-latest.linux-amd64.pkg.tar.zst | fwci-latest.linux-amd64.apk |
| ARM64 | fwci-latest.linux-arm64.tar.gz | fwci-latest.linux-arm64.deb | fwci-latest.linux-arm64.rpm | fwci-latest.linux-arm64.pkg.tar.zst | fwci-latest.linux-arm64.apk |
Note: Select the package that matches your operating system and architecture. For detailed installation steps, refer to the instructions below.
Installing the Precompiled Binary
Step 1: Download the Precompiled Binary
Replace linux-amd64 with linux-arm64 if you are on ARM64.
Step 2: (Optional) Verify the Download
Download the checksum and verify:
The checksum file holds the bare digest, so pair it with the archive name before
handing it to sha256sum -c:
It prints fwci-latest.linux-amd64.tar.gz: OK when the download is intact.
Step 3: Unpack the Archive
Step 4: Install the Binary
If the extracted binary is named fwci, run:
Step 5: Verify Installation
If the installation was successful, this will display the current version of the fwci tool.
For more information on how to use the fwci tool, refer to the Usage Guide
Changelog
v0.17.7 2026-08-18
New Features
- New job requests now run in the order they were submitted on the same devices, so later requests can’t jump ahead.
- When you rerun unsuccessful work, only the failed or interrupted tests are queued again instead of rerunning everything.
Bug Fixes
- Sync no longer fails when the same storage is listed more than once with identical settings, and harmless duplicates now only show a warning.
- The checksum file for the latest CLI download is now available where the install instructions expect it.
- API documentation now matches actual responses, making it easier to rely on documented fields, response headers, and authentication payloads.
- Jobs that finished successfully no longer get marked as failed because cleanup ran into a problem afterward.
v0.17.6 2026-08-06
New Features
- You can now download stored files directly from the server, including very large files, without needing server shell access.
- Agents can now view storage defined on any branch, making it easier to inspect feature-branch settings and distinguish same-named entries across branches.
Bug Fixes
- Error messages in admin commands and other workflows are now shown once and more clearly, without repeated or misleading wording.
- The remote selection prompt now consistently prefers
originfirst, with the rest shown in a stable order, so pressing Enter picks the expected project. - Sync now rejects duplicate config entries with the same name before making changes, so one definition can’t silently overwrite another.
- Downloaded files now keep their original names even when the names contain special characters.
- Storage entries can no longer share the same name within a branch, preventing ambiguous lookups and cleaning up existing duplicates.
- When a name is already taken, you now get a clear conflict error that tells you exactly which name is in use instead of a generic server error.
- If a rename is blocked because an entry is still in use, the message now names the existing entry that caused the conflict.
- Jobs and tests now use storage from their own branch, avoiding failures caused by paths or keys from another branch.
- Deleting or renaming file entries now correctly checks for references from every branch, not just the default branch.
- Project, label, storage, and file entries now keep their original creation time instead of showing an incorrect date.
- Request durations now match the job durations you see in the UI, avoiding off-by-one-second inconsistencies.
- Uploading a file with a name that already exists now returns a clear conflict message instead of a generic server error.
v0.17.5 2026-08-05
Bug Fixes
- Validation errors now name the step they come from and the line to fix, and say what to write instead, rather than reporting internal schema wording.
- Empty stage lists, empty step lists and duplicate stage names are now caught during validation instead of failing once the job runs.
- Mock devices now run one job at a time instead of letting any number of jobs share a single fictional device.
v0.17.4 2026-07-30
New Features
- When you disable a device, it now stays disabled everywhere it appears, not just in one branch.
- Job requests now show which FirmwareCI branch they belong to, making it easier to see where work came from.
- Trace data is now sent only when you explicitly configure it, so self-hosted instances stay quiet by default.
Bug Fixes
- Tool results are now visible in text-only clients instead of appearing to have no output.
- Archived devices are no longer probed or included in inventory counts.
- Offline devices are now detected within seconds instead of taking many minutes to appear as down.
- Device metrics now reflect the number of physical devices instead of changing with branch activity.
v0.17.3 2026-07-23
New Features
- You can now invite someone to join an organization from the admin CLI, including setting up the first organization admin on a brand-new organization.
- You can now see combined stats for an entire project across all branches, with the option to limit the view to specific workflows.
- You can now filter job request lists by workflow, so results are narrowed across the full list instead of only the jobs currently shown.
- You can now see combined stats for an entire branch, with the option to limit the view to specific workflows.
- Agents that can access multiple organizations can now choose which organization to use for each MCP call.
Bug Fixes
- Project-wide and organization-wide job lists now correctly include jobs from all branches instead of only the default branch.
- MCP now rejects superuser tokens, preventing overly broad automation access.
- Branch job lists now correctly respect the selected status filter.
v0.17.2 2026-07-20
Bug Fixes
- Organization admins can now rerun jobs successfully when they have permission to do so.
- Job and request links in the web UI now open under the organization you actually used, which fixes wrong links for accounts in multiple organizations.
- GitHub-related failures now stop retrying when the problem won’t resolve on its own, so you get faster, clearer feedback for permanent errors.
- When a hardware device is temporarily in use, the system now treats it as busy and tries another available device instead of marking it as unavailable.
v0.17.1 2026-07-15
New Features
- Running
fwci orgwithout a subcommand now shows your organizations, andjob/exectell you to select one first instead of failing later.
Bug Fixes
- Pushing annotated tags now syncs correctly and reports results as expected.
v0.17.0 2026-07-13
New Features
- You can now run jobs directly on tags by using the tag name, and tags are shown separately from branches in the UI.
- Organizations can now upload and display their own logo on public organization pages.
- You can now use a single account across multiple organizations and switch between them in the web app or CLI.
- Devices are now automatically shown as unavailable when their backend becomes unreachable, even if no job is currently using them.
- Device connectivity is now checked in the background so recovered devices become available again on their own, and jobs on lost devices are stopped sooner.
Bug Fixes
- The CLI no longer suggests or selects archived branches that cannot run jobs, reducing confusing submission errors.
- Looking up a private organization through the public endpoint now returns the correct access-denied response.
- Gerrit links now open reliably even on instances that do not support Gitiles.
- Update notifications are no longer hidden for a day after a temporary version-check failure.
- Large failed jobs are now analyzed more reliably without being skipped because their logs are too big.
v0.16.0 2026-07-01
New Features
- You can now see when a device cannot be reserved at all, along with a short reason and any jobs currently using it, instead of only seeing that it is unavailable.
- The command-line tool now shows clearer next steps after you submit or watch a job, including how to reconnect later, safely stop watching, and open the job or request in the web app.
- You can now work with repository branches throughout the app and API, including managing branch-specific configurations and selecting the right branch for jobs and executions.
Bug Fixes
- If you mistype a binary input name for a job, you now get a warning up front with a suggested correction instead of a confusing missing-input failure later.
- Running the version command no longer shows your sign-in status, so the output stays focused on version information.
- Deleting a GitHub branch no longer causes it to reappear unexpectedly.
- Jobs submitted immediately after a branch update are now less likely to fail because the branch or its configuration has not finished syncing yet.
- Newly created GitLab branches now sync correctly even when the branch creation event does not include a commit list.
v0.15.11 2026-06-23
Bug Fixes
- Device reservations now work when the agent address is entered as just a host and port, without needing to include
http://. - When a new password doesn’t meet the password rules, you now see a clear explanation instead of a generic error.
- Users who can view public jobs can now also download reports and exported files for those jobs.