Skip to main content

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 }
]
}
FieldTypeDescription
namestringDapp display name
versionstringDapp version string
descriptionstringHuman-readable description
createdAtISO8601Packaging timestamp
constraintsobjectSecurity policy used during packaging (type + allowedDependencies map)
entrystringEntry HTML file (always index.html)
files{path, bytes}[]Every file in the bundle — client verifies sizes against disk

Allowed Bundle Files

PathExtensionsNotes
src/**.ts, .tsxApplication source
assets/**.webpImages
abis/**.jsonContract ABIs (must parse as valid JSON)
addresses.jsonContract addresses
index.htmlEntry point
package.jsonDependencies (validated against allowlist)
tsconfig.json, vite.config.tsBuild 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.