Reeve
Developers

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

FieldTypeRequiredDescription
idstringReverse-domain unique identifier (e.g. com.acme.sales-dashboard). Must be globally unique in the Marketplace.
namestringDisplay name shown in the App Store (max 60 chars).
versionstringSemantic version (MAJOR.MINOR.PATCH). Must increment on every Marketplace submission.
descriptionstringShort description shown in App Store cards (max 140 chars).
longDescriptionstringFull 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"
}
FieldTypeRequiredDescription
author.namestringDeveloper or company name
author.emailstringContact email (not shown publicly)
author.urlstringDeveloper website

Category

FieldTypeRequiredDescription
categoryCategoryPrimary App Store category
tagsstring[]Search tags (max 10, each max 30 chars)

Valid category values:

ValueStore Section
analyticsAnalytics & Reporting
marketingMarketing
emailEmail & SMS
socialSocial Media
adsAdvertising
inventoryInventory & Operations
customer-serviceCustomer Service
financeFinance
automationAutomation
ai-toolsAI Tools
productivityProductivity
otherOther

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.

PermissionWhat It GrantsReview Scrutiny
ai.completeCall reeve.ai.complete()Low
ai.streamCall reeve.ai.stream()Low
storage.readRead from cloud storageLow
storage.writeWrite/delete from cloud storageLow
data.shopifyQuery Shopify orders, products, customersMedium
data.emailQuery Klaviyo/email campaign dataMedium
data.socialQuery social media metricsMedium
data.adsQuery ad campaign performanceMedium
data.analyticsQuery web analytics (GA4, PostHog)Medium
events.subscribeListen to platform eventsLow
events.emitEmit custom app:* eventsLow

Security note: Reviewers check that every declared permission is used in your app's code. Unused permissions are an automatic rejection reason.


Entrypoint & Assets

FieldTypeRequiredDefaultDescription
entrypointstringPath to the root HTML file, relative to project root
iconstring✓ (for Marketplace)App icon: 512×512px PNG, relative to project root
screenshotsstring[]1–5 screenshots for App Store page. 1280×800px PNG recommended

Compatibility

FieldTypeRequiredDefaultDescription
minReeveVersionstring'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
  }
}
FieldTypeOptionsDescription
pricing.modelstring'free', 'subscription', 'one-time'Pricing model
pricing.pricenumberPrice in smallest unit (USD cents if using 'usd')
pricing.currencystring'USD'Currency code (USD only in current preview)
pricing.intervalstring'month', 'year'Billing interval (subscription only)
pricing.trial.daysnumber1–90Free trial length

Reeve takes 30% of subscription revenue. Developers receive 70%. Billing, refunds, and subscription management are handled by Reeve.


Support

FieldTypeRequiredDescription
support.urlstringSupport page URL
support.emailstringSupport email
support.docsstringDocumentation 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:

RuleError If Violated
id must match [a-z0-9]+(\.[a-z0-9-]+)+INVALID_APP_ID
id must have ≥ 3 segmentsINVALID_APP_ID
name ≤ 60 charsFIELD_TOO_LONG
description ≤ 140 charsFIELD_TOO_LONG
version must be valid semverINVALID_VERSION
category must be a valid valueINVALID_CATEGORY
permissions must be valid permission namesUNKNOWN_PERMISSION
entrypoint file must existMISSING_ENTRYPOINT
icon file must exist (if specified)MISSING_ASSET
pricing.model must be free, subscription, or one-timeINVALID_PRICING_MODEL
pricing.trial.days must be 1–90INVALID_TRIAL_DAYS

During Marketplace review, additional checks apply:

  • icon is required (512×512 PNG)
  • author.email is required and must be verified
  • description and longDescription must be substantive
  • At least one support contact is required
  • permissions must 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"
    }
  ]
}

On this page