Skip to main content

things-to-store-and-run.json is the package file Runtime Kit checks. It lists the records, package-owned files, and callable actions the package brings.

Use this page when you need exact field rules. If you want to copy a working file, use Package set with one record, Package-owned file, or Callable package slot.

File location

<package-name>/
  things-to-store-and-run.json
Runtime Kit reads this file from the package folder. Other package files only matter when things-to-store-and-run.json refers to them through package-local paths such as source_path.

Minimum file

{
  "package": "sample-package",
  "things": []
}
FieldTypeRequiredConstraintsMeaning
packagestringyesMust name the package whose folder owns this file.Separates package-owned records, bytes, and actions.
thingsarrayyesEach item must be a supported thing type.Declares records, stored bytes, and slots.
Unknown top-level fields may be rejected. The public machine-readable schema is reference/package-boundary.schema.json, and Runtime Kit Cookbook examples are kept aligned with it.

Thing type overview

Thing typeRequired fieldsPublic resultUse this recipe
recordtype, address, one payload actionOne package-owned durable record is admitted.Package set with one record
stored_bytestype, name, source_pathPackage-owned bytes are stored under a package-owned name.Package-owned file
slottype, name, methods, boundary, artifact or build dataOne callable action is admitted.Callable package slot
Unknown thing types are rejected before they become active.

record

{
  "type": "record",
  "address": "package::sample-package::main",
  "payload": { "ready": true }
}
FieldTypeRequiredConstraintsMeaning
typestringyesMust be "record".Selects the record thing shape.
addressstringyesShould be a package-owned public address.Names the durable record.
payloadJSON valueone payload action requiredMutually exclusive with payload_text, payload_base64, and remove.Stores a JSON payload.
payload_textstringone payload action requiredMutually exclusive with other payload actions.Stores text bytes.
payload_base64stringone payload action requiredMutually exclusive with other payload actions.Stores decoded bytes from base64 text.
removebooleanone payload action requiredUse true; mutually exclusive with payload fields.Retracts/removes the record.
Valid text record:
{
  "type": "record",
  "address": "package::sample-package::intro",
  "payload_text": "Welcome to the product."
}
Invalid record:
{
  "type": "record",
  "address": "package::sample-package::intro",
  "payload": { "title": "Welcome" },
  "payload_text": "Welcome"
}
This is invalid because a record must choose exactly one payload action.

stored_bytes

{
  "type": "stored_bytes",
  "name": "help/getting-started.txt",
  "source_path": "help/getting-started.txt"
}
FieldTypeRequiredConstraintsMeaning
typestringyesMust be "stored_bytes".Selects the stored-bytes thing shape.
namestringyesPackage-owned public name.Final package-owned byte name.
source_pathstringyesMust resolve inside the package folder.File to read from the submitted package.
Valid package-owned file:
{
  "type": "stored_bytes",
  "name": "help/getting-started.txt",
  "source_path": "help/getting-started.txt"
}
Invalid package-owned file:
{
  "type": "stored_bytes",
  "name": "secret.txt",
  "source_path": "../secret.txt"
}
This is invalid because source_path escapes the package folder. A package can only bring files it owns.

slot

{
  "type": "slot",
  "name": "help.search",
  "methods": [{ "name": "query" }],
  "boundary": {
    "call_shape": "envelope-bytes-in-envelope-bytes-out",
    "methods": [{ "name": "query" }]
  },
  "artifact": {
    "source_path": "slots/help-search.bin"
  }
}
FieldTypeRequiredConstraintsMeaning
typestringyesMust be "slot".Selects the package item that app code can ask to do work.
namestringyesPublic action name.The name app code calls through sendRequestToBitfieldTarget(...).
methodsarray of method objectsyesMust list public methods, usually { "name": "query" }.Declares the package’s callable method names.
boundaryobjectyesMust include call_shape and matching public methods.Describes what bytes the callable action receives and returns.
boundary.call_shapestringyesPublic recipes use "envelope-bytes-in-envelope-bytes-out".States that the action receives bytes and returns bytes.
boundary.methodsarray of method objectsyesShould match methods.Repeats the public methods for the callable action.
artifact.source_pathstringartifact path choiceMust resolve inside the package folder.Prebuilt package-owned bytes for the callable action.
Valid slot:
{
  "type": "slot",
  "name": "launch.next-step",
  "methods": [{ "name": "query" }],
  "boundary": {
    "call_shape": "envelope-bytes-in-envelope-bytes-out",
    "methods": [{ "name": "query" }]
  },
  "artifact": {
    "source_path": "slots/next-step.bin"
  }
}
Invalid slot:
{
  "type": "slot",
  "name": "launch.next-step",
  "methods": [],
  "boundary": {
    "call_shape": "envelope-bytes-in-envelope-bytes-out",
    "methods": [{ "name": "query" }]
  },
  "artifact": {
    "source_path": "../next-step.bin"
  }
}
This is invalid for two public reasons: the public method list is empty, and the artifact path escapes the package folder.

Complete valid package file

{
  "package": "launch-product",
  "things": [
    {
      "type": "record",
      "address": "package::launch-product::welcome-copy",
      "payload": {
        "headline": "Your launch stays fast.",
        "body": "Every feature keeps its package data and callable actions listed in one package file."
      }
    },
    {
      "type": "stored_bytes",
      "name": "help/getting-started.txt",
      "source_path": "help/getting-started.txt"
    },
    {
      "type": "slot",
      "name": "help.search",
      "methods": [{ "name": "query" }],
      "boundary": {
        "call_shape": "envelope-bytes-in-envelope-bytes-out",
        "methods": [{ "name": "query" }]
      },
      "artifact": {
        "source_path": "slots/help-search.bin"
      }
    }
  ]
}
This file is valid because every declared item is package-owned, each path stays inside the package folder, and the callable action has a public name plus bytes-in/bytes-out call details.

Common failures

SymptomCauseFix
Package admission rejects the file immediately.Missing top-level package or things.Add both fields, even when things is empty.
Record cannot be admitted.The record picked zero or more than one payload action.Use exactly one of payload, payload_text, payload_base64, or remove: true.
Stored bytes cannot be found.source_path does not exist inside the package folder.Put the file inside the package and point source_path to that package-local path.
Stored bytes or slot artifact is rejected.The path escapes the package folder.Remove ../ and absolute paths. A package cannot claim outside files.
App code cannot call the action.Slot name, methods, and boundary.methods do not describe the callable action clearly.Use a stable action name and include { "name": "query" } in both method lists when the recipe is query-shaped.

What app code may rely on

Public package file may sayApp code should not depend on
Package name, record address, stored byte name, package-local source path, action name, method names.Local absolute paths, private runner setup, hidden build machines, package compiler implementation details.
Payload shape owned by your package.Runtime Kit internal storage layout.
Callable action details: bytes in, bytes out.How the action implementation is wired internally.
NeedPage
First package filePackage set with one record
Package-owned bytesPackage-owned file
Callable targetCallable package slot
App request APIRuntime Kit API
Package guidePackages
Last modified on May 10, 2026