# Versioning and changelog

Part of [Build a custom machine](https://www.ownbox.io/sdk/guide).

**SDK 1** is a promise: every call in it keeps working, with the same names, on every Ownbox on SDK 1. A machine says
which it was built on with `requires.sdk`, and an Ownbox on an older SDK refuses it with `sdk_too_new`. **The manifest
format** is `machine: 2`. **The Ownbox version** a machine needs is `requires.box`: an older Ownbox refuses it until its
next update arrives.

What would break a machine never changes within SDK 1: a call's name, an argument's name or meaning, the shape of an
answer, or a refusal's `code`. A new call, a new optional argument, a new field in an answer, or a new `code` can
arrive at any time, so read answers by their keys and handle a `code` you do not know. The names under **Not yet** are
kept: `m.menu` and `m.activity` arrive in SDK 1; `m.store`, `m.query`, `m.media` and `m.upload` are reserved.

| Date | Change |
|---|---|
| 2026-10-14 | `resources.class` sets the memory, CPU and processes a machine gets; an Ownbox refuses a class its memory cannot hold. |
| 2026-10-14 | A new version of an installed machine, sent from its files, is that machine's update. |
| 2026-10-14 | After a failed check, your AI sends the fixed files to the same build. |
| 2026-10-14 | The name *custom machine*, in every word a person reads. This guide's old address forwards here. |
| 2026-10-13 | `packages:` from the Ownbox's own list, installed from its own copies. |
| 2026-10-13 | A custom machine on a partner's Ownbox installs on Ownbox's yes. |
| 2026-10-13 | A machine's pages are drawn in the Ownbox's own look: screens, cards, settings and Run now. |
| 2026-10-12 | screen.json v1, checked before anyone sees it. |
| 2026-10-12 | Build a machine on the Ownbox: the check and the two dry runs before the owner's yes. |
| 2026-10-12 | `m.store`, `m.query`, `m.media` and `m.upload` reserved. |
| 2026-10-12 | `machine: 2`, one manifest for every machine. |
