Storeware Docs

Manifest reference

Every key of storeware.app.toml: its value, its limits and what it does.

Every key the platform accepts, read from the same schema the CLI and the server check a manifest against. A key not listed here is refused. The manifest explains how the sections work together.

For completion and checks in your editor, put this line at the top of storeware.app.toml. Editors that read JSON Schema for TOML, such as Taplo and the Even Better TOML extension, follow it:

#:schema https://storeware.ai/docs/schemas/storeware.app.json

Top level

KeyValueRequiredMeaning
manifest_versionintegernoWhich shape of manifest this is. Write 2. From 1 to 2.
apptableyesWho the app is and where it lives.
oauthtableyesWhat the app may reach.
privacytablenoWhere data requests and erasures are posted.
billingtablenoWhat the app charges, collected by Storeware on the merchant’s bill.
webhookstablenoWhere events are posted, and which ones.
extensionstablenoPanels in the admin and blocks on the shop front.
settingslist of tablesnoUp to 30 fields a merchant fills in on your app’s page in their settings. At most 30.
app_proxytablenoPages under the shop’s own address, at /apps/your-slug/.
automationstablenoTriggers and actions your app adds to the shop’s automations.
checkouttablenoWhere your app takes part in checkout.
runtimetablenoRun your app on Storeware, free, at https://<slug>.storewareapps.com. In beta.
knowledgetablenoWhat your app knows about products, merged into search and every AI agent’s view of the catalogue.
metafieldstablenoTyped fields your app keeps on a merchant’s records.
mcptablenoTools your app adds to every assistant on a shop.

[app]

Who the app is and where it lives.

KeyValueRequiredMeaning
slugstringyesYour client id. Lower case letters, digits and hyphens, 2 to 63 characters. It never changes. Matches ^[a-z0-9][a-z0-9-]{1,62}$.
namestringyesWhat merchants see on the consent screen and in their Apps list. At most 120 characters.
descriptionstringnoA sentence or two for merchants. At most 500 characters.
homepage_urlhttps URLnoYour public site, shown to merchants.
urlhttps URLnoYour home inside the admin, opened full height with a session token. With it, merchants install from Storeware.
navigationlist of tablesnoUp to five pages inside your home, listed under it in the admin. At most 5.
privacy_policy_urlhttps URLnoYour privacy policy, shown to merchants.
support_urlhttps URLnoWhere merchants get help, shown to merchants.

[[app.navigation]]

Up to five pages inside your home, listed under it in the admin.

KeyValueRequiredMeaning
labelstringyesThe link text, up to 30 characters. At most 30 characters.
pathstringyesA path inside your home, starting with /. Matches ^\/[A-Za-z0-9._~/-]*$.

[oauth]

What the app may reach.

KeyValueRequiredMeaning
redirect_urislist of https URLnoWhere an install that starts on your own site returns to, matched exactly. Not needed when app.url is set. Defaults to [].
scopeslist of stringyesThe permissions the app asks for. A merchant grants all of them or does not install. At least 1.

[privacy]

Where data requests and erasures are posted.

KeyValueRequiredMeaning
urlhttps URLyesReceives the compliance events. Needed when the app reads customer or order data.

[billing]

What the app charges, collected by Storeware on the merchant’s bill.

KeyValueRequiredMeaning
modemanaged, apiyesmanaged: Storeware shows your plans at install and on your app’s page. api: your app asks for each charge.
planslist of tablesnoUp to six plans. At most 6. Defaults to [].

[[billing.plans]]

Up to six plans.

KeyValueRequiredMeaning
keystringyesWhat your app asks for, in lower_snake_case. Matches ^[a-z][a-z0-9_]{1,31}$.
namestringyesWhat the merchant reads, up to 40 characters. At most 40 characters.
descriptionstringnoOne line under the name. At most 200 characters.
intervalmonth, yearnomonth or year. Charged in advance. Defaults to "month".
pricestablenoThe price in all four currencies, in minor units, each set by hand. Leave it out for a free plan.
trial_daysintegernoDays before the first charge, up to 90, once per shop. From 0 to 90. Defaults to 0.
featureslist of stringnoUp to eight short lines shown with the plan. At most 8. Defaults to [].
usagetablenoCharges by use on top of the plan, billed at the end of each period, never more than the cap. Needs billing.mode api.

[billing.plans.prices]

The price in all four currencies, in minor units, each set by hand. Leave it out for a free plan.

KeyValueRequiredMeaning
usdintegeryesUS dollars, in cents. From 1 to 10000000.
gbpintegeryesPounds sterling, in pence. From 1 to 10000000.
eurintegeryesEuros, in cents. From 1 to 10000000.
inrintegeryesIndian rupees, in paise. From 1 to 10000000.

[billing.plans.usage]

Charges by use on top of the plan, billed at the end of each period, never more than the cap. Needs billing.mode api.

KeyValueRequiredMeaning
captableyesThe most one period can cost, in all four currencies.
termsstringyesWhat the merchant reads about the rate, such as 2 cents a label. At most 200 characters.

[billing.plans.usage.cap]

The most one period can cost, in all four currencies.

KeyValueRequiredMeaning
usdintegeryesUS dollars, in cents. From 1 to 10000000.
gbpintegeryesPounds sterling, in pence. From 1 to 10000000.
eurintegeryesEuros, in cents. From 1 to 10000000.
inrintegeryesIndian rupees, in paise. From 1 to 10000000.

[webhooks]

Where events are posted, and which ones.

KeyValueRequiredMeaning
urlhttps URLyesWhere events are posted. Redirects are never followed.
eventslist of stringyesTopics to receive. Each needs a scope that reads the same data. At least 1.

[extensions]

Panels in the admin and blocks on the shop front.

KeyValueRequiredMeaning
adminlist of tablesnoPanels and actions your app adds to the admin.
storefrontlist of tablesnoBlocks your app adds to the shop front.
sectionslist of tablesnoUp to ten sections a merchant can place on any page from the page editor. At most 10.

[[extensions.admin]]

Panels and actions your app adds to the admin.

KeyValueRequiredMeaning
pointadmin.product.detail.sidebar, admin.product.detail.action, admin.product.index.action, admin.collection.detail.sidebar, admin.collection.detail.action, admin.order.detail.sidebar, admin.order.detail.action, admin.orders.index.action, admin.customer.detail.sidebar, admin.customer.detail.action, admin.customers.index.action, admin.settings.blockyesWhere in the admin it appears: a panel beside a record, an action in a record’s Apps menu, or an action on the rows ticked in a list.
urlhttps URLyesThe page framed in the panel, or in the window an action opens.
titlestringyesThe panel’s heading, or the action’s name in the menu. At most 60 characters.

[[extensions.storefront]]

Blocks your app adds to the shop front.

KeyValueRequiredMeaning
blockstorefront.product.below_description, storefront.product.above_add_to_cart, storefront.cart.summary, storefront.collection.headeryesWhere on the shop front the block appears.
urlhttps URLyesWhere Storeware asks for the block’s content.
formathtml, componentsnohtml, sanitised to text, lists, tables and links, or components, drawn in the shop’s own style. Defaults to "html".

[[extensions.sections]]

Up to ten sections a merchant can place on any page from the page editor.

KeyValueRequiredMeaning
handlestringyesThe section’s key, in lower_snake_case. It never changes. Matches ^[a-z][a-z0-9_]{1,31}$.
namestringyesWhat the merchant sees in the page editor, up to 40 characters. At most 40 characters.
descriptionstringnoOne line about the section, shown in the page editor. At most 200 characters.
urlhttps URLyesWhere Storeware asks for the section’s content.
formathtml, componentsnocomponents (the default) or html. Defaults to "components".

[app_proxy]

Pages under the shop’s own address, at /apps/your-slug/.

KeyValueRequiredMeaning
urlhttps URLyesWhere Storeware forwards each request, signed and without the shopper’s cookies.

[automations]

Triggers and actions your app adds to the shop’s automations.

KeyValueRequiredMeaning
triggerslist of tablesnoUp to 20 things that can start an automation, fired by your app. At most 20. Defaults to [].
actionslist of tablesnoUp to 20 steps a merchant can add to an automation. At most 20. Defaults to [].

[[automations.triggers]]

Up to 20 things that can start an automation, fired by your app.

KeyValueRequiredMeaning
keystringyesThe trigger’s key, in lower_snake_case letters. Matches ^[a-z][a-z_]{1,31}$.
labelstringyesWhat the merchant reads, such as A review was left. At most 60 characters.
descriptionstringnoOne line about when it fires. At most 200 characters.
fieldslist of tablesnoUp to 20 values the trigger carries, which a condition can test. At most 20. Defaults to [].

[[automations.triggers.fields]]

Up to 20 values the trigger carries, which a condition can test.

KeyValueRequiredMeaning
keystringyesThe value’s key, in lower_snake_case. Matches ^[a-z][a-z0-9_]{1,63}$.
labelstringyesWhat the merchant reads. At most 60 characters.
typetext, number, boolean, date, urlyesThe kind of value.

[[automations.actions]]

Up to 20 steps a merchant can add to an automation.

KeyValueRequiredMeaning
keystringyesThe action’s key, in lower_snake_case letters. Matches ^[a-z][a-z_]{1,31}$.
labelstringyesWhat the merchant reads, such as Send a text. At most 60 characters.
descriptionstringnoOne line about what it does. At most 200 characters.
urlhttps URLyesWhere Storeware posts the step, signed, with an idempotency key.
fieldslist of tablesnoUp to 20 values the merchant fills in for the step. At most 20. Defaults to [].

[[automations.actions.fields]]

Up to 20 values the merchant fills in for the step.

KeyValueRequiredMeaning
keystringyesThe value’s key, in lower_snake_case. Matches ^[a-z][a-z0-9_]{1,63}$.
labelstringyesWhat the merchant reads. At most 60 characters.
typetext, multi_line_text, number, boolean, url, selectyesThe kind of value.
requiredbooleannoWhether the step needs it. Defaults to false.
optionslist of tablesnoFor a select, the choices: from 2 to 30. At most 30. At least 2.

[[automations.actions.fields.options]]

For a select, the choices: from 2 to 30.

KeyValueRequiredMeaning
valuestringyesWhat your app receives. At most 60 characters.
labelstringyesWhat the merchant reads. At most 60 characters.

[checkout]

Where your app takes part in checkout.

KeyValueRequiredMeaning
delivery_ratestablenoDelivery choices your app offers. If it fails or is slow, the shop’s own rates are shown.

[checkout.delivery_rates]

Delivery choices your app offers. If it fails or is slow, the shop’s own rates are shown.

KeyValueRequiredMeaning
urlhttps URLyesWhere Storeware asks for rates, with the basket and address. Needs checkout:read.

[runtime]

Run your app on Storeware, free, at https://<slug>.storewareapps.com. In beta.

KeyValueRequiredMeaning
mainstringnoThe file storeware app deploy bundles. Defaults to src/worker.ts. At most 200 characters. Defaults to "src/worker.ts".
egresslist of stringnoHosts your code may call besides Storeware’s API, such as api.example.com. Nothing else is reachable. At most 20. Defaults to [].
bundlestringnoThe bundle’s SHA-256, written by storeware app deploy. Do not edit it. Matches ^[0-9a-f]{64}$.

[knowledge]

What your app knows about products, merged into search and every AI agent’s view of the catalogue.

KeyValueRequiredMeaning
urlhttps URLyesWhere Storeware asks your app about a product.
attributeslist of stringnoAttribute keys your app may set, in lower_snake_case. Defaults to [].
relationslist of stringnoRelations your app may assert between two products. Defaults to [].
scopeslist of stringnoScopes these calls use. Defaults to [].

[metafields]

Typed fields your app keeps on a merchant’s records.

KeyValueRequiredMeaning
definitionslist of tablesyesUp to 50 fields. At most 50. At least 1.
scopeslist of stringnoScopes these writes use. Defaults to [].

[[metafields.definitions]]

Up to 50 fields.

KeyValueRequiredMeaning
owner_typeproduct, variant, collection, customer, order, storeyesThe kind of record the field belongs to.
keystringyesThe field’s key, in lower_snake_case. Matches ^[a-z][a-z0-9_]{1,63}$.
namestringyesWhat a merchant sees. At most 200 characters.
descriptionstringnoA longer note for the merchant. At most 2000 characters.
typesingle_line_text, multi_line_text, integer, decimal, boolean, date, urlyesThe kind of value the field holds.
is_listbooleannoWhether the field holds a list of values. Defaults to false.
storefront_visiblebooleannoWhether shoppers see it. Never allowed for customer or order fields. Defaults to false.

[mcp]

Tools your app adds to every assistant on a shop.

KeyValueRequiredMeaning
toolslist of tablesnoThe tools.

[[mcp.tools]]

The tools.

KeyValueRequiredMeaning
namestringyesThe tool’s name, in lower_snake_case. Matches ^[a-z][a-z0-9_]{2,63}$.
descriptionstringyesWhat the tool does, for the model choosing it. At most 500 characters.
urlhttps URLyesWhere Storeware calls the tool.
scopeslist of stringnoScopes the tool uses. Defaults to [].
input_schematable of any keysnoThe tool’s arguments, as JSON Schema. Defaults to {"type":"object","additionalProperties":false}.

On this page