The App Registry
The VibeDepot registry is a community-driven catalog of apps hosted as a separate GitHub repository. It’s the source of truth for what apps are available in the store.
How It Works
Section titled “How It Works”The registry is a GitHub repo (vibedepot-registry) containing:
- App source files — Each app lives in
apps/{app-id}/with a manifest, entry HTML, and assets. - Release bundles — ZIP files in
apps/{app-id}/releases/{version}.zip. - Validation scripts — TypeScript scripts that validate all apps against Zod schemas.
- Registry index — An auto-generated
registry.jsoncontaining metadata for every published app.
Registry Structure
Section titled “Registry Structure”vibedepot-registry/├── apps/│ ├── email-writer/│ │ ├── manifest.json│ │ ├── index.html│ │ ├── thumbnail.png│ │ └── releases/│ │ └── 0.1.0.zip│ └── code-reviewer/│ ├── manifest.json│ └── ...├── schemas/│ ├── manifest.schema.ts│ └── registry-entry.schema.ts├── scripts/│ ├── validate.ts│ └── build-index.ts├── registry.json # Auto-generated└── package.jsonThe registry.json File
Section titled “The registry.json File”This is the file the VibeDepot shell fetches to populate the store. It’s an array of RegistryEntry objects:
[ { "id": "email-writer", "name": "Email Writer", "version": "0.1.0", "description": "AI-powered email drafting assistant.", "author": "vibedepot", "category": "productivity", "keywords": ["email", "writing", "ai"], "permissions": ["ai", "storage.kv"], "providers": ["anthropic", "openai", "gemini"], "thumbnail": "thumbnail.png", "bundle": "https://raw.githubusercontent.com/.../0.1.0.zip", "checksum": "a1b2c3d4e5f6...", "installs": 0, "updatedAt": "2025-01-15T12:00:00Z", "featured": false }]See the Registry Entry Reference for all fields.
CI Pipeline
Section titled “CI Pipeline”On Pull Requests
Section titled “On Pull Requests”GitHub Actions runs the validation script (npm run validate):
- Schema validation for every app manifest
- Entry file existence checks
- API key pattern scanning
- App ID uniqueness across the registry
PRs that fail validation cannot be merged.
On Merge to Main
Section titled “On Merge to Main”The index builder (npm run build-index) runs automatically:
- Reads every app’s
manifest.json - Computes SHA256 checksums for release ZIPs
- Generates GitHub raw content URLs for bundles
- Outputs the updated
registry.json
Caching Strategy
Section titled “Caching Strategy”The VibeDepot shell uses a three-tier caching strategy for registry data:
1. Memory Cache
Section titled “1. Memory Cache”During a session, the registry is cached in memory. No disk or network access needed for subsequent requests.
2. Disk Cache (1-Hour TTL)
Section titled “2. Disk Cache (1-Hour TTL)”The registry is saved to ~/.vibedepot/registry-cache.json with a timestamp. If the cache is less than 1 hour old, it’s used directly. If it’s fresh from disk, a background refresh is triggered.
3. Network Fetch
Section titled “3. Network Fetch”If the disk cache is stale or missing, the shell fetches registry.json from GitHub.
Offline Fallback
Section titled “Offline Fallback”If the network is unavailable, the shell uses the stale disk cache rather than showing an empty store. Users see the last-known catalog until connectivity is restored.
Publishing Flow
Section titled “Publishing Flow”From an app developer’s perspective:
- Run
vibedepot validateto check your app. - Run
vibedepot publishto create a bundle and open a GitHub PR. - Registry maintainers review the PR.
- On merge, CI rebuilds
registry.jsonand the app appears in the store.
See Publishing to the Registry for the complete guide.
Standalone Schemas
Section titled “Standalone Schemas”The registry uses its own Zod schemas (in schemas/) rather than importing from @vibedepot/shared. This keeps the registry repo independent — it can be cloned and run without the full monorepo. The schemas are kept in sync manually.
Next Steps
Section titled “Next Steps”- App Lifecycle — How apps go from registry to running
- Publishing to the Registry — Developer publishing guide
- Registry Entry Reference — Complete field documentation