Hardware Revision Control
Git-style version control for hardware design files, releases, and as-built records
Last updated: 2026-05-14
Hardware Revision Control is a git-style version control system for hardware design files, built into S3Suite. Use it to track every revision of your schematics, PCB layouts, firmware sources, and mechanical CAD over time, without juggling email attachments, Dropbox folders, or shared drives named "rev_B_FINAL_v2".
When you need it
Anytime more than one engineer touches a design file, or any time you need to answer "which version of this schematic shipped on Lot 2024-001?" three years from now, you need revision control. The feature is designed around two operational truths:
- Hardware design files are binary. A KiCad project, a SolidWorks part, an Altium PCB cannot be merged the way source code can. Revision control here is about immutable snapshots, not branch merging.
- Manufacturing needs a frozen file set. Engineering keeps evolving the design; manufacturing needs to know exactly which commit shipped on each lot. The Release concept links the two.
Concepts
| Term | What it means |
|---|---|
| Repo | One repository per discipline (schematic, PCB, firmware, mechanical, BOM). Most projects end up with three to six repos. |
| Commit | A frozen snapshot of every file in the repo at a point in time. Has an author, message, timestamp, and a manifest hash. |
| Manifest hash | A cryptographic fingerprint of the entire commit (all file hashes + tree structure). Tamper-evident: any change anywhere breaks the chain. |
| Blob | The raw bytes of one file in a commit. Content-addressed: two commits that share an unchanged file share the same blob (no duplication on disk). |
| Tool stack | The EDA or CAD tool the repo is built around. Set when you create the repo. Helps S3Suite show the right file-type icons and scan rules. |
| Release | A named cut that pins one commit per repo. The as-built record, what manufacturing builds against. Immutable once locked. |
| Production lot | A batch of devices manufactured. Each lot can back-reference the Release it was built from, giving a permanent device-serial to as-built-files mapping. |
Tip: Do not try to put everything in one repo. One repo per discipline keeps history clean and lets different teams commit on their own cadence.
Before you start
- Install the desktop app. Browsing history and downloading individual blobs works in any browser, but committing changes or restoring an older revision to disk needs the desktop app. See Desktop app and updates for download + auto-update info.
- Decide your repo structure. Most projects split into: one schematic repo, one PCB repo (often combined with schematic if the EDA tool stores them together), one firmware repo, one mechanical repo. Keep BOM in its own repo only if you treat it as a binary artifact; otherwise the BOM module in the Engineering Suite is a better fit.
- Settle on naming. Repo names appear everywhere. Pick something a vendor would recognise, like "Mainboard schematic" rather than "schematic_v3_actual".
Quick start: your first commit (10 minutes)
This walkthrough creates a repo, makes the first commit from your local design folder, and shows the result in the browser.
1. Create the repo
- Open your project
- In the sidebar, go to Engineering → Revision Control
- Click New Repo
- Fill in:
- Click Create
2. Commit changes from the desktop app
- Open the desktop app (same project, same login)
- Navigate to the same Revision Control page inside the project
- Click into your new repo
- Click Commit changes (only visible inside the desktop app)
- In the modal, click Browse and pick the local folder that contains your design files
- The app scans the folder, hashes every file, and shows a diff against HEAD:
- Fill in:
- Click Commit
- The app uploads only the missing blobs (existing blobs deduplicate) and writes the commit document
3. View the commit in the browser
- Switch back to your browser (or stay in the desktop app, the UI is the same)
- Refresh the repo detail page
- The new commit is at the top of the history with your message, ECO, author, and the file count
- Click the commit row to open the commit detail page, which shows the full file tree and lets you download individual blobs
Note: If you do not see the commit, check that the upload finished (the modal closes when done). The web UI may take 1-2 seconds to refresh after a large commit.
Workflow: cut a release for manufacturing
A release pins one commit per repo into a single named cut, locks the file set, and gives manufacturing a stable target to build against.
- Go to Engineering → Revision Control → Releases
- Click New Release
- Fill in:
- For each repo in the project, the modal pre-selects the head commit. To pin an older commit instead, click the dropdown and pick from the repo's commit history.
- Click Create Release
Locking a release
A release in Draft status can have its commit pins edited. Once you change status to Released, the pins are frozen forever.
- On the release detail page, click Mark as Released
- Confirm the dialog warning
- The release is now immutable. Editing would require cutting a new release.
Note: Locked releases cannot be deleted either. The audit trail is permanent by design. That is what makes the as-built record trustworthy.
Linking a production lot to a release
- Open the production lot (Manufacturing → Production Lots → click the lot)
- In the Release field, pick the release you just cut
- Save
Workflow: restore an older revision to your local disk
When you need to rebuild an older revision (warranty repair, certification re-run, customer asking for the v1 firmware), restore the commit to a local folder.
- Open the commit detail page for the revision you want
- Click Restore to local folder (only visible in the desktop app)
- Pick a destination folder (empty, or one you do not mind overwriting)
- The app downloads every blob and writes the file tree exactly as it was committed
- Open the restored folder in your EDA or CAD tool and you have the exact design that shipped
Note: Restoring does NOT change the repo state. The HEAD commit on the server is untouched. You are pulling a historical snapshot to disk.
Tip: Restore to a new folder, not over your working copy. That way your in-progress changes are not overwritten.
Workflow: handing off to a contract manufacturer
Vendors should always receive a release, never a running commit history.
- Cut the release as described above
- Mark it Released to lock the pins
- Open the release detail page
- Click Send to Vendor (also reachable from any variant page that uses this release)
- The Send-to-Vendor flow attaches the frozen file set from each pinned commit, not the live engineering folder. See Manufacturing Vault for the underlying file flow.
Workflow: managing review status
Each commit carries a review status that gates how it shows up in vendor-facing flows.
| Status | What it means |
|---|---|
| Pending | Just committed. Not reviewed yet. |
| Internal Review | Under review by your engineering team. |
| Review Done | Internal sign-off complete. Ready for vendor exposure. |
| Vendor Review | The vendor is reviewing for manufacturability. |
- Open the commit detail page
- Click the Review Status dropdown in the right rail
- Pick the new status
Tip: Only mark a commit "Review Done" after a second engineer has independently checked the changes. The status is visible on the release and to vendors, so it is the social contract for what is shippable.
Reference
Tool stacks supported
The dropdown when creating a repo offers these options. Pick the one that matches the bulk of the files in the repo.
- KiCad - open-source EDA
- Altium Designer - full proprietary EDA
- Autodesk Eagle / EasyEDA - Eagle legacy or EasyEDA exports
- Autodesk Fusion 360 - mostly mechanical
- SolidWorks - assemblies and parts
- Mixed - a repo that genuinely contains multiple tool stacks (use sparingly)
- Other - anything else (Cadence, Mentor, KiCad legacy projects, etc.)
Web vs Desktop
| Capability | Web | Desktop |
|---|---|---|
| Browse repos and commit history | Yes | Yes |
| Open a commit, view file tree | Yes | Yes |
| Download an individual blob | Yes | Yes |
| Cut a release, lock a release | Yes | Yes |
| Change a commit's review status | Yes | Yes |
| Commit changes from a local folder | No | Yes |
| Restore an older commit to disk | No | Yes |
Common pitfalls
- "My commit shows zero files changed." The desktop app diffs against HEAD using content hashes. If your local files are byte-identical to the last commit, there is genuinely no change. Modifying a file then reverting the edit produces zero diff.
- "The upload is slow on a large project." First commits are slow because every blob is new. Subsequent commits only upload changed blobs, so they are much faster.
- "I locked the wrong commit into a release." Releases cannot be un-locked. Cut a new release with the correct pins. The wrong release stays in history but you ignore it.
- "My vendor says the file is corrupted." Confirm they downloaded from the Release, not from a stale email. The release file set is hash-verified end to end.
Related docs
- Engineering Suite -the broader engineering surface
- Manufacturing Vault -how Engineering files reach Manufacturing
- Desktop app and updates - install + auto-update flow for the desktop app
- Risk Management -pair revision control with explicit risk tracking on design changes