Build a custom machine

The manifest: machine.yaml

Python SDK version 1

Markdown
machine.yaml
machine: 2                         # the manifest format
slug: quote-follow-up              # the folder's own name
name: Quote Follow Up
version: 0.1.0
requires: {box: "1.2", sdk: 1}     # the Ownbox version it was built on, and the SDK
needs: []
permissions:                       # nothing is allowed unless it is named here
  think: {calls_per_month: 100}
  fetch: [api.example.com]
  keys: [{name: example, host: api.example.com, label: Example key}]
  data: [people:read, conversations:read]
  send: [{channel: email, per_day: 20}]
  packages: [{name: python-dateutil, version: 2.9.0.post0}]
on_forget: true                    # required when data names people
FieldTypeRequiredRule
machineintegerRequired2.
slugstringRequiredLowercase letters, digits and -, starting with a letter, 2 to 41 characters. Equal to the folder's name and to sdk.machine("<slug>"). Not one already on the Ownbox.
namestringRequiredWhat the owner reads. At most 60 characters.
versionstringRequiredMAJOR.MINOR.PATCH, like 0.1.0.
requires.boxstringOptionalThe Ownbox version it was built on, quoted, like "1.2". An older Ownbox refuses it.
requires.sdkintegerRequired1. An Ownbox on an older SDK refuses it.
needslistOptionalPlan features it needs, like [coworkers]. Default []. Anything here needs requires.box "1.2" or later.
permissionsmappingRequiredWhat it may touch (Permissions). {} asks for nothing.
on_forgetbooleanConditionalRequired, and true, when permissions.data names people:read or people:write. Default false.
authormappingOptional{name, contact}: a name of at most 60 characters, and an email or an https:// address.
resources.classstringOptionalsmall, standard or large. Default small. The memory, CPU and processes it gets (Limits). An Ownbox refuses a class its memory cannot hold.

The reader refuses a field it does not know, and suggests the one you meant. A field from an older format names its new place: sdk: is now requires.sdk. The reader's other fields (config, screens, coworkers, suites, in_process, pack) belong to the machines that ship with the Ownbox; a custom machine declares its pages in code, with m.screen.