Basic packaging
The output is a ZIP-based .vibeapp archive containing:
- The
vibe.yaml manifest
- All referenced assets
- Optional seed data (initial state)
With encryption
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.
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:
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
Shows the manifest contents, file listing, signature state, and whether encryption is present.
Verify the signature
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.