Skip to content

This guide aligns with Store v0.1’s “OAuth + DID signature binding” model, showing procedures to make signed .capsule publicly available.

Store requires both “social trust (OAuth)” and “cryptographic proof (DID signature)”. First generate developer key, then submit DID proof during Publisher registration.

Terminal window
# Generate signing key
capsule keygen --out ~/.capsule/keys/publisher.pem
# Register repository as Store Source
capsule source register https://github.com/your-org/your-capsule-repo --channel stable

Distribution filename format <name>-<version>-<os>-<arch>.capsule is recommended. Store uses this as hint for OS/arch matching.

Terminal window
capsule validate .
capsule pack . --init --standalone
# Example: hello-capsule-1.2.0-macos-aarch64.capsule

Signing uses Ed25519, with BLAKE3 / SHA-256 integrity verification prerequisite. Store distribution gate requires signature_status=verified.

Terminal window
capsule sign ./dist/hello-capsule-1.2.0-macos-aarch64.capsule \
--key ~/.capsule/keys/publisher.pem

Current Spec uses API-centric publication flow. Not based on single capsule publish command, but gradual flow through OAuth Token + DID signature verification.

StepInputVerification
Publisher registrationhandle, author_did, did_proofOAuth validity + DID signature + timestamp tolerance
Release registrationmanifest, signature, content hashimmutable version + hash match + signer match
Distribution publicationartifact + os/arch metadataR2 storage + Presigned URL TTL + verify status

Using CAPSULE_SPEC.md’s [build.lifecycle] / [build.policy] enables declarative pre-publication gates.

[build.lifecycle]
prepare = "npm ci"
build = "npm run build"
package = "capsule pack"
verify = "capsule verify --strict"
publish = "capsule publish --ci"
[build.policy]
require_attestation = true
require_did_signature = true
SymptomCauseSolution
Signature verification rejectedcontent hash and signature target mismatchRe-sign after pack, upload without modification
Publisher registration failsGitHub OAuth not linked, did_proof expiredRe-login and regenerate proof with new timestamp
Install rejectedsignature_status not verifiedCheck Store-side verification gate

Source specs: STORE_SPEC v0.1, IDENTITY_SPEC v0.1, CAPSULE_SPEC v0.1.