appxi.json

appxi.json describes your package. Generate it from a build and commit it:

Terminal
npx appxi package dist/MyApp-1.2.0.dmg --app my-app

appxi package fills in the facts it can read from the package and keeps the requirements and licensing blocks you wrote.

Example

JSON
{
  "schema": "appxi.package/1",
  "app_id": "my-app",
  "name": "My App",
  "version": "1.2.0",
  "platform": "macos",
  "format": "dmg",
  "architectures": ["arm64", "x86_64"],
  "min_os": "13.0",
  "bundle_id": "com.example.myapp",
  "signing": { "team_id": "ABCDE12345", "certificate_name": "Developer ID Application: Example Inc (ABCDE12345)" },
  "product_type": "app",
  "install": { "method": "dmg", "silent": true },
  "requirements": {
    "network": { "mode": "optional", "domains": ["api.example.com"] },
    "account": "none",
    "permissions": ["microphone"],
    "background": [],
    "runtimes": [],
    "data_collection": []
  },
  "updates": { "framework": "sparkle", "feed": "appxi", "channel": "stable", "ed_public_key": "…" },
  "licensing": { "mode": "none" }
}

Fields

FieldMeaning
app_idYour app's AppsXi slug.
product_typeapp, game, audio_plugin, extension or cli. It decides which install and launch tests run.
requirements.network.modenone, optional or required; list the domains the app talks to.
requirements.accountnone, optional or required: whether people need an account with you.
requirements.permissionsCamera, microphone, screen recording, accessibility, full disk access, location, contacts and so on.
requirements.backgroundLogin items, launch agents, services.
requirements.runtimesAnything people must install first (.NET, Java, a driver).
requirements.data_collectionWhat the app sends to you (analytics, crash reports).
updates.frameworksparkle, electron_updater, winsparkle, app_installer or none.
updates.channelstable or beta.
licensing.modenone (free or Level 0), license_key (Level 1) or appxi_sdk (Level 2, Sign in with AppsXi, coming later).

The listing shows the requirements to buyers. When the pipeline sees something the manifest does not declare, such as a launch agent or a permission, the build goes to a person.