Signed commits
zev signs every new commit on your computer with the repository's Ed25519 key. Add the key to your account once and Zaryn shows those commits as Verified, with your name.
Search for a command to run…
zev signs every new commit on your computer with the repository's Ed25519 key. Add the key to your account once and Zaryn shows those commits as Verified, with your name.
A commit says who wrote it, but anyone can type any name into their zev config. A signature proves which key made the commit. zev signs every new commit on your computer, and Zaryn shows a commit as Verified only when the key that signed it is on the account it names.
.zev/identity. zev signing-key prints it..zev/signatures and sends them after the commits on the next push. A signature the server already has is not sent again.Run this once in each repository you push from:
zev signing-key add --label laptopzev sends the repository's public key to your account. From then on, every commit it signed shows as ✓ Verified in the commit list and on the commit page, with your name. Commits signed before you added the key count too.
You can also add a key on the web: Security → Commit signing keys. Run zev signing-key in the repository and paste the key it prints.
A repository's admins can require it: ⚙ Settings → Merge only Verified commits. A pull request then merges only when every commit it brings is Verified. The pull request's checklist says how many aren't, and nobody can force the merge past it, not even an admin.
The rule also guards one branch against direct pushes, main unless you name another in the same settings. A push that would bring it a commit that isn't Verified is refused, and zev says how many and what to run. Other branches take anything, so you can push work in progress and open a pull request; its check covers those commits. zev hands signatures over before it moves a branch, so a signed push goes through in one step.
zev push-api origin main# Push refused: 1 new commit(s) on main aren't Verified, and this repository takes only Verified commits therezev sign-commits 1zev push-api origin main # Push completeScripts and agents can read and set it too: GET and PUT /v1/repos/<owner>/<repo>/signing-rule with {"require_verified": true, "branch": "main"}. The commit list (and the zaryn_commits tool of zev mcp) shows each commit's signature.
zev signing-key # this repository's key, and whether new commits are signedzev signing-key add [--label x] # add it to your account: its commits show as Verifiedzev signing-key ls # the signing keys on your account, with how many commits each signedzev signing-key rm <id> # remove one: its commits show as Signed, not Verifiedzev verify <commit> # check a commit's signature here (a short hash is enough)zev sign-commits [N] # sign the last N commits that have no signature (default 100)zev config set commit.sign false # stop signing new commits in this repositoryI lost the computer. Remove the key with zev signing-key rm <id> or on the Security page. Its commits stop showing as Verified, and nobody else can add that key to their account.
I cloned on a new computer. The new copy gets its own key the first time it signs. Run zev signing-key add there too.
Commits from before signing existed. zev sign-commits signs them with the repository's key. Push, and they show up.
How is this different from zev sign <cid>? zev sign signs any object with your identity, for proofs you hand to someone. Commit signing is automatic and shows on Zaryn.
See also Advisories and lineage for marking commits as compromised, and Verified storage for proof that Zaryn keeps what you pushed.