Build a Commerce Studio app
Start here
The manifest
cockpit.json reference
The top-level keys, localisable strings, and the public JSON Schema.
Navigation
The four recognised group keys, id/parent anchors, hosted tab hubs, badges, and Solar icon names.
List views
Columns and the 26 column types, the filter types, sorting, KPIs, view modes, bulk actions and saved views.
Detail views
Sections, tabs, headers, children, banners, metrics, referenced-by and concurrency.
Forms
create and edit modes, the 34 field types, sections, steps, constraints, seeds and error mapping.
Actions and writes
The action kinds, which are in production use, and how write and api dispatch to your own capability.
Widgets
The two dashboard renderers that exist — EntityCount and EntityList.
Permissions and scope
Gating a view, publishing your own grants, and making an entity market-scopeable.
Shipping it
Commerce Studio contributes no pages of its own — its studio navigation array is deliberately empty. Everything an operator sees there comes from an installed app's cockpit.json, and the studio merges every installed app's declarations into one interface.
So this is not a niche extension point. It is how the section exists at all: the products, orders, customers, prices, payments, shipping and inventories screens a merchant uses are the same declarations described on these pages, shipped by the platform's own apps.
What you write, and what you do not
You write JSON. One manifest declaring navigation entries, views and widgets.
You do not write:
- Vue components, bundles, or anything to export.
- Tables, columns, filters, pagination, sorting, loading states or empty states.
- Authentication, tenant context or permission checks in the UI.
- Forms, field controls or client-side validation.
- Migrations, tenant filters or endpoint plumbing.
A view declares its shape with a type — list, detail or form, and those three are the only view types — and the studio dispatches to a built-in renderer that reads and writes your entity for you.
The shortest possible app
{
"$schema": "https://schemas.revenexx.com/cockpit.schema.json",
"navigation": [
{ "label": { "en": "Suppliers" }, "icon": "building", "route": "/suppliers", "group": "pim" }
],
"views": [
{
"route": "/suppliers",
"type": "list",
"entity": "suppliers",
"columns": [
{ "name": "code", "label": "Code", "type": "text" },
{ "name": "name", "label": "Name", "type": "text" }
]
}
]
}
That renders a sidebar entry under the PIM section and a paginated, sortable list of your entity. Preview it locally in about two minutes.
What this group covers, and what App Studio owns
This group is the Commerce-specific surface: how a manifest becomes a screen in Commerce Studio, and every key of cockpit.json.
The rest of an app belongs to App Studio and is linked rather than repeated:
| Concern | File | Page |
|---|---|---|
| Identity, dependencies, events, schedules | manifest.json | Manifest reference |
| Your entities | schema.json | Schema reference |
| Your HTTP routes | manifest.capabilities.json | Capabilities |
| What your app may reach | manifest.permissions | App permissions |
| What a merchant configures | settings.json | Settings |
| Marketplace listing and pricing | billing.json | Billing and events |
| Deploying and installing | — | App lifecycle |
New to apps entirely? Start with Build your first App.