Getting Started with Sigyn
A step-by-step guide to installing Sigyn, creating your first vault, managing secrets, collaborating with team members, and syncing via git.
Install
One-liner (recommended)
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/tonybenoy/sigyn/main/install.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/tonybenoy/sigyn/main/install.ps1 | iex
This downloads the latest pre-built binary for your platform and adds it to your PATH. Falls back to building from source if no pre-built binary is available.
From source
Requires Rust 1.75+ and git:
cargo install --git https://github.com/tonybenoy/sigyn.git --bin sigyn sigyn-cli
cargo install --git https://github.com/tonybenoy/sigyn.git --bin sigyn-recovery sigyn-recovery
Or clone and build locally:
git clone https://github.com/tonybenoy/sigyn.git
cd sigyn
cargo build --release
cp target/release/sigyn target/release/sigyn-recovery ~/.local/bin/
Verify
sigyn --version
Uninstall
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/tonybenoy/sigyn/main/uninstall.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/tonybenoy/sigyn/main/uninstall.ps1 | iex
Quick Setup (Guided Wizard)
The fastest way to get started is the onboard wizard, which walks you through everything below in one interactive flow:
sigyn onboard
Or use sigyn init for a lighter-weight setup that offers to create an identity
and vault if none exist.
If you prefer to do each step manually, read on.
Create an Identity
An identity is your cryptographic keypair (X25519 for encryption, Ed25519 for signing). All vault operations require one.
sigyn identity create --name alice
You will be prompted for a passphrase (minimum 8 characters). This passphrase protects your private keys at rest via Argon2id. Remember it – there is no recovery without it (or Shamir shards).
Output:
Identity 'alice' created
Fingerprint: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
Store this fingerprint -- others will use it to share secrets with you.
Verify it was created:
sigyn identity list
Show full details:
sigyn identity show alice
Enable MFA (Optional)
Add TOTP-based multi-factor authentication to your identity for an extra layer of security. You’ll need an authenticator app (Google Authenticator, Authy, 1Password, etc.).
sigyn mfa setup -i alice
This will:
- Generate a TOTP secret and display a QR code in the terminal (plus the base32 secret for manual entry).
- Ask you to enter a code from your authenticator app to verify.
- Print 8 single-use backup codes — save these somewhere safe.
Once enrolled, any vault policy that sets require_mfa: true will prompt for a TOTP
code before granting access. A session-based grace period (default: 1 hour) avoids
re-prompting on every operation.
Check your enrollment status at any time:
sigyn mfa status -i alice
Set Defaults
Configure your default identity and vault to avoid typing --identity and --vault
on every command:
sigyn init --identity alice
This creates ~/.sigyn/config.toml with your defaults.
For per-project defaults, run project init in your project root:
sigyn project init
This interactively creates a .sigyn.toml with your vault and identity:
[project]
vault = "myapp"
env = "dev"
identity = "alice"
[commands]
# dev = "npm run dev"
# app = "./start-server"
Uncomment and edit the [commands] section to add named run commands.
With this file, most commands need no flags at all. Use --global to write
to ~/.sigyn/project.toml instead (for defaults you don’t want in a repo).
Create a Vault
A vault is an encrypted container for secrets, organized by environment:
sigyn vault create myapp
This generates a random 256-bit master key, seals it to your identity via X25519
envelope encryption, and creates three default environments: dev, staging, prod.
sigyn vault info myapp
Output:
Vault Info
Name: myapp
ID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Owner: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
Environments: dev, staging, prod
Created: 2026-02-23 14:30:00 UTC
Set it as your default vault:
sigyn init --identity alice --vault myapp
Add Secrets
Store a secret in the dev environment:
sigyn secret set DATABASE_URL 'postgres://user:pass@localhost:5432/mydb' --env dev
Add more secrets:
sigyn secret set API_KEY 'sk-dev-abc123' --env dev
sigyn secret set REDIS_URL 'redis://localhost:6379' --env dev
Generate a random secret:
sigyn secret generate JWT_SECRET --env dev --length 64
Read from stdin (useful for multiline values or piping):
cat certificate.pem | sigyn secret set TLS_CERT --env dev
Read Secrets
Retrieve a secret value:
sigyn secret get DATABASE_URL --env dev
Output:
postgres://user:pass@localhost:5432/mydb
Get structured output with metadata:
sigyn secret get DATABASE_URL --env dev --json
List Secrets
List all keys in an environment (values hidden by default):
sigyn secret list --env dev
Reveal values:
sigyn secret list --env dev --reveal
Run with Injected Secrets
Launch a process with all secrets from an environment injected as environment variables.
The exec subcommand is the default, so you can omit it:
sigyn run -e dev -- ./my-app
The secrets are passed directly to the child process environment. They are never written to disk in plaintext.
Use -c / --clean to avoid inheriting the parent shell’s environment:
sigyn run -e dev -c -- node server.js
Use --prod or --staging as environment shortcuts:
sigyn run --prod -- docker compose up
If you have a .sigyn.toml with named commands, run them directly:
sigyn run dev # runs the 'dev' command from [commands] table
Export to Dotenv
Export secrets in .env format:
sigyn run export --env dev --format dotenv > .env
Other supported formats: json, shell, docker, k8s.
# Kubernetes secret manifest
sigyn run export --env prod --format k8s --name my-app-secrets > secret.yaml
Import from .env
Import an existing .env file into a vault:
sigyn import dotenv .env --env dev
Import from a JSON file (expects a flat key-value object):
sigyn import json secrets.json --env dev
Import from cloud providers:
sigyn import aws --secret-id myapp/dev --env dev
sigyn import doppler --project myapp --config dev --env dev
sigyn import gcp --project my-gcp-project --secret db-password --env prod
sigyn import 1password --vault "Dev Secrets" --item "API Keys" --env dev
Invite a Team Member
First, your teammate creates their own identity on their machine:
# On Bob's machine:
sigyn identity create --name bob
sigyn identity list # note the fingerprint
Bob shares their fingerprint with you out-of-band (chat, email, etc.).
Add Bob to the vault policy with a role and environment restrictions:
sigyn policy member-add <bob-fingerprint> --role contributor --envs dev,staging
Or create a signed invitation file for a more formal flow:
sigyn delegation invite create --role contributor --envs dev,staging
Share the resulting JSON file with Bob.
Accept an Invitation
Bob clones the vault and accepts the invitation in one step:
# On Bob's machine (single command):
sigyn vault clone [email protected]:team/secrets.git --invitation ./invitation-abc123.json
Or as separate steps:
sigyn vault clone [email protected]:team/secrets.git
sigyn delegation invite accept ./invitation-abc123.json
The invitation’s Ed25519 signature is verified before acceptance. Once accepted, Bob’s X25519 public key is added to the vault envelope, allowing him to decrypt secrets in the allowed environments.
View the Delegation Tree
See who has access and who invited whom:
sigyn delegation tree
Output:
alice (a1b2c3d4...) [owner]
bob (e5f6a7b8...) [contributor]
Create Environments
Vaults start with dev, staging, and prod. Add more as needed:
sigyn env create qa
sigyn env create canary
List environments:
sigyn env list
Promote Secrets
Copy secrets from one environment to another:
sigyn env promote --from dev --to staging
sigyn env promote --from dev --to staging,prod # chained: dev → staging → prod
Promote specific keys only:
sigyn env promote --from staging --to prod --keys DATABASE_URL,API_KEY
Then update production values to their real credentials:
sigyn secret set DATABASE_URL 'postgres://user:pass@prod-host/myapp' --env prod
Sync via Git
Sigyn vaults are directories of encrypted files that can be synced through git. All data is encrypted at rest, so syncing never exposes secrets.
Configure sync during vault creation (recommended):
sigyn vault create myapp --remote-url [email protected]:team/secrets.git
Or configure sync for an existing vault:
sigyn sync configure --remote-url [email protected]:team/secrets.git
Push local changes:
sigyn sync push
Pull remote changes:
sigyn sync pull
Check sync status:
sigyn sync status
On another machine (or as another team member), clone the vault first:
sigyn vault clone [email protected]:team/secrets.git
sigyn sync pull --vault myapp
Audit Trail
Every operation is recorded in a hash-chained, Ed25519-signed audit log.
View recent entries:
sigyn audit tail
sigyn audit tail -n 50
Verify the chain has not been tampered with:
sigyn audit verify
Query by actor or environment:
sigyn audit query --actor a1b2c3d4... --env prod
Export the full log:
sigyn audit export --output audit.json --format json
Add a witness countersignature:
sigyn audit witness
Shell Completions
Generate completions for your shell:
# Bash
sigyn completions bash > ~/.local/share/bash-completion/completions/sigyn
# Zsh
sigyn completions zsh > ~/.zfunc/_sigyn
# Fish
sigyn completions fish > ~/.config/fish/completions/sigyn.fish
Restart your shell or source the file to activate completions.
Next Steps
- CLI Reference – complete command documentation
- Security Model – cryptographic primitives, MFA, and threat model
- Delegation – invitation flow and cascade revocation
- Sync – conflict resolution and CRDT merge
- Set up Shamir recovery shards for disaster recovery:
sigyn-recovery split --identity alice --threshold 3 --total 5