Manifest Reference
Complete reference for reeve-manifest.json — all fields, permissions, categories, and validation rules.
Manifest Reference — reeve-manifest.json
Every Reeve app requires a reeve-manifest.json at the project root. The Cockpit reads this file when installing your app to validate permissions, display metadata, and configure the runtime environment.
Full Example
{
"id": "com.yourcompany.my-app",
"name": "My Sales Dashboard",
"version": "1.2.0",
"description": "A real-time sales dashboard with AI-powered insights.",
"longDescription": "Track revenue, orders, and customer trends with beautiful charts. Ask your AI questions about your store and get instant answers backed by live data.",
"author": {
"name": "Your Name",
"email": "you@yourcompany.com",
"url": "https://yourcompany.com"
},
"category": "analytics",
"tags": ["shopify", "revenue", "dashboard"],
"permissions": [
"data.shopify",
"ai.complete",
"storage.read",
"storage.write"
],
"entrypoint": "index.html",
"icon": "public/icon.png",
"screenshots": [
"public/screenshots/dashboard.png",
"public/screenshots/detail.png"
],
"minReeveVersion": "2.0.0",
"pricing": {
"model": "subscription",
"price": 19,
"currency": "USD",
"interval": "month",
"trial": {
"days": 14
}
},
"support": {
"url": "https://yourcompany.com/support",
"email": "support@yourcompany.com",
"docs": "https://docs.yourcompany.com"
}
}Fields
Identity
| Field | Type | Required | Description |
|---|---|---|---|
id | string | ✓ | Reverse-domain unique identifier (e.g. com.acme.sales-dashboard). Must be globally unique in the Marketplace. |
name | string | ✓ | Display name shown in the App Store (max 60 chars). |
version | string | ✓ | Semantic version (MAJOR.MINOR.PATCH). Must increment on every Marketplace submission. |
description | string | ✓ | Short description shown in App Store cards (max 140 chars). |
longDescription | string | — | Full description shown on the app detail page. Supports Markdown. |
ID format rules:
- Must match the pattern
[a-z0-9]+(\.[a-z0-9-]+)+ - Minimum 3 segments (e.g.
com.company.appname) - Cannot contain uppercase letters or spaces
- Cannot start with
com.reeve(reserved)
Author
"author": {
"name": "Your Name",
"email": "you@yourcompany.com",
"url": "https://yourcompany.com"
}| Field | Type | Required | Description |
|---|---|---|---|
author.name | string | ✓ | Developer or company name |
author.email | string | ✓ | Contact email (not shown publicly) |
author.url | string | — | Developer website |
Category
| Field | Type | Required | Description |
|---|---|---|---|
category | Category | ✓ | Primary App Store category |
tags | string[] | — | Search tags (max 10, each max 30 chars) |
Valid category values:
| Value | Store Section |
|---|---|
analytics | Analytics & Reporting |
marketing | Marketing |
email | Email & SMS |
social | Social Media |
ads | Advertising |
inventory | Inventory & Operations |
customer-service | Customer Service |
finance | Finance |
automation | Automation |
ai-tools | AI Tools |
productivity | Productivity |
other | Other |
Permissions
"permissions": [
"data.shopify",
"ai.complete",
"storage.read",
"storage.write"
]Declare only the permissions your app actually uses. Requesting unused permissions will fail app review.
| Permission | What It Grants | Review Scrutiny |
|---|---|---|
ai.complete | Call reeve.ai.complete() | Low |
ai.stream | Call reeve.ai.stream() | Low |
storage.read | Read from cloud storage | Low |
storage.write | Write/delete from cloud storage | Low |
data.shopify | Query Shopify orders, products, customers | Medium |
data.email | Query Klaviyo/email campaign data | Medium |
data.social | Query social media metrics | Medium |
data.ads | Query ad campaign performance | Medium |
data.analytics | Query web analytics (GA4, PostHog) | Medium |
events.subscribe | Listen to platform events | Low |
events.emit | Emit custom app:* events | Low |
Security note: Reviewers check that every declared permission is used in your app's code. Unused permissions are an automatic rejection reason.
Entrypoint & Assets
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
entrypoint | string | ✓ | — | Path to the root HTML file, relative to project root |
icon | string | ✓ (for Marketplace) | — | App icon: 512×512px PNG, relative to project root |
screenshots | string[] | — | — | 1–5 screenshots for App Store page. 1280×800px PNG recommended |
Compatibility
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
minReeveVersion | string | — | '1.0.0' | Minimum Reeve version required to run this app |
Pricing
For paid Marketplace apps:
"pricing": {
"model": "subscription",
"price": 29,
"currency": "USD",
"interval": "month",
"trial": {
"days": 7
}
}| Field | Type | Options | Description |
|---|---|---|---|
pricing.model | string | 'free', 'subscription', 'one-time' | Pricing model |
pricing.price | number | — | Price in smallest unit (USD cents if using 'usd') |
pricing.currency | string | 'USD' | Currency code (USD only in current preview) |
pricing.interval | string | 'month', 'year' | Billing interval (subscription only) |
pricing.trial.days | number | 1–90 | Free trial length |
Reeve takes 30% of subscription revenue. Developers receive 70%. Billing, refunds, and subscription management are handled by Reeve.
Support
| Field | Type | Required | Description |
|---|---|---|---|
support.url | string | — | Support page URL |
support.email | string | — | Support email |
support.docs | string | — | Documentation URL |
At least one of support.url or support.email is required for Marketplace submission.
Template Examples
React App (Analytics Dashboard)
{
"id": "com.acme.sales-dashboard",
"name": "Sales Dashboard",
"version": "1.0.0",
"description": "Real-time Shopify revenue and order analytics.",
"author": {
"name": "Acme Dev",
"email": "dev@acme.com"
},
"category": "analytics",
"tags": ["shopify", "revenue", "charts"],
"permissions": ["data.shopify", "storage.read", "storage.write"],
"entrypoint": "index.html",
"icon": "public/icon.png"
}Agent App
{
"id": "com.acme.store-concierge",
"name": "Store Concierge Agent",
"version": "1.0.0",
"description": "An AI agent specialized for DTC brand management.",
"author": {
"name": "Acme Dev",
"email": "dev@acme.com"
},
"category": "ai-tools",
"tags": ["agent", "shopify", "assistant"],
"permissions": [
"ai.complete",
"ai.stream",
"data.shopify",
"data.email",
"data.ads",
"storage.read",
"storage.write",
"events.subscribe"
],
"entrypoint": "index.html",
"icon": "public/icon.png",
"pricing": {
"model": "subscription",
"price": 49,
"currency": "USD",
"interval": "month",
"trial": { "days": 14 }
}
}Email Tool
{
"id": "com.acme.campaign-builder",
"name": "AI Campaign Builder",
"version": "2.1.0",
"description": "Generate, preview, and send Klaviyo campaigns with AI.",
"author": {
"name": "Acme Dev",
"email": "dev@acme.com"
},
"category": "email",
"tags": ["klaviyo", "email", "ai", "campaigns"],
"permissions": [
"ai.complete",
"data.email",
"data.shopify",
"storage.read",
"storage.write"
],
"entrypoint": "index.html",
"icon": "public/icon.png",
"pricing": {
"model": "subscription",
"price": 29,
"currency": "USD",
"interval": "month",
"trial": { "days": 7 }
},
"support": {
"email": "support@acme.com",
"docs": "https://docs.acme.com/campaign-builder"
}
}Validation Rules
The Cockpit validates your manifest on install. Here's exactly what gets checked:
| Rule | Error If Violated |
|---|---|
id must match [a-z0-9]+(\.[a-z0-9-]+)+ | INVALID_APP_ID |
id must have ≥ 3 segments | INVALID_APP_ID |
name ≤ 60 chars | FIELD_TOO_LONG |
description ≤ 140 chars | FIELD_TOO_LONG |
version must be valid semver | INVALID_VERSION |
category must be a valid value | INVALID_CATEGORY |
permissions must be valid permission names | UNKNOWN_PERMISSION |
entrypoint file must exist | MISSING_ENTRYPOINT |
icon file must exist (if specified) | MISSING_ASSET |
pricing.model must be free, subscription, or one-time | INVALID_PRICING_MODEL |
pricing.trial.days must be 1–90 | INVALID_TRIAL_DAYS |
During Marketplace review, additional checks apply:
iconis required (512×512 PNG)author.emailis required and must be verifieddescriptionandlongDescriptionmust be substantive- At least one
supportcontact is required permissionsmust exactly match what's used in code (automated scan)- App must load within 5 seconds on a standard connection
Manifest Schema
Download the full JSON Schema for IDE autocomplete and validation:
# .vscode/settings.json
{
"json.schemas": [
{
"fileMatch": ["reeve-manifest.json"],
"url": "https://cdn.meetreeve.com/schemas/manifest.json"
}
]
}Related
- Getting Started — scaffold with a pre-filled manifest
- SDK Reference — permissions and what they unlock
- App Review — review checks that validate your manifest