Skip to main content

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.