Manifest & Bundle Schema
Every VibeFi dapp bundle contains a manifest.json generated by vibefi package. The client verifies this manifest before building.
Manifest Structure
{
"name": "My Dapp",
"version": "1.0.0",
"description": "A VibeFi dapp",
"createdAt": "2026-02-14T12:00:00.000Z",
"constraints": {
"type": "default",
"allowedDependencies": { "react": "19.2.4", "viem": "2.45.0", "..." : "..." }
},
"entry": "index.html",
"files": [
{ "path": "index.html", "bytes": 542 },
{ "path": "src/App.tsx", "bytes": 1823 },
{ "path": "abis/ERC20.json", "bytes": 4201 },
{ "path": "addresses.json", "bytes": 312 },
{ "path": "assets/logo.webp", "bytes": 8422 }
]
}
| Field | Type | Description |
|---|---|---|
name | string | Dapp display name |
version | string | Dapp version string |
description | string | Human-readable description |
createdAt | ISO8601 | Packaging timestamp |
constraints | object | Security policy used during packaging (type + allowedDependencies map) |
entry | string | Entry HTML file (always index.html) |
files | {path, bytes}[] | Every file in the bundle — client verifies sizes against disk |
Allowed Bundle Files
| Path | Extensions | Notes |
|---|---|---|
src/** | .ts, .tsx | Application source |
assets/** | .webp | Images |
abis/** | .json | Contract ABIs (must parse as valid JSON) |
addresses.json | — | Contract addresses |
index.html | — | Entry point |
package.json | — | Dependencies (validated against allowlist) |
tsconfig.json, vite.config.ts | — | Build configuration |
addresses.json
Flat or nested JSON mapping names to Ethereum addresses:
{
"pool": "0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2",
"tokens": {
"USDC": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
}
}
All addresses validated for EIP-55 checksums during packaging. Numeric values (e.g., chainId) are permitted as metadata.
Determinism
The file list is sorted alphabetically and serialized with a stable JSON stringifier. Identical source produces identical manifests and therefore identical IPFS CIDs across runs.