Skip to main content

Basic packaging

vibe package vibe.yaml -o myapp.vibeapp
The output is a ZIP-based .vibeapp archive containing:
  • The vibe.yaml manifest
  • All referenced assets
  • Optional seed data (initial state)

With encryption

# Provide password on the command line (visible in shell history — avoid in CI)
vibe package vibe.yaml -o myapp.vibeapp --password "my-secret-password"

# Read password from a file (preferred)
vibe package vibe.yaml -o myapp.vibeapp --password-file secrets/pw.txt

# Omit --password to be prompted interactively (most secure)
vibe package vibe.yaml -o myapp.vibeapp
Encrypted packages use AES-256-GCM with Argon2id key derivation (OWASP interactive profile: m=64 MiB, t=3, p=4).

With seed data

Seed data is a directory of pre-populated content that gets embedded as the app’s initial state. Each subdirectory becomes a signed _vibe_initial_state/<name>.tar.gz entry.
vibe package vibe.yaml -o myapp.vibeapp --seed-data ./initial-data/
Use this to ship apps with pre-loaded databases, sample files, or other data that should be present on first run.

Signing

Always sign packages you distribute publicly:
# Generate a keypair (one-time setup)
vibe keygen -o my-signing

# Sign the package
vibe sign myapp.vibeapp --key my-signing.key

# For encrypted packages, provide the password to sign
vibe sign myapp.vibeapp --key my-signing.key --password-file secrets/pw.txt
Keep my-signing.key private. Distribute my-signing.pub to users or embed it in the macOS host app for trusted verification.

Inspect before distributing

vibe inspect myapp.vibeapp
Shows the manifest contents, file listing, signature state, and whether encryption is present.

Verify the signature

vibe verify myapp.vibeapp --key my-signing.pub
Confirms the package hasn’t been tampered with.

Distributing without signing (dev mode)

During development you can skip signing. Recipients will see an “Unsigned (Dev Mode)” orange warning and must explicitly acknowledge running unsigned code.
Never distribute unsigned packages publicly. Always sign before sharing with end users.