Skip to content

Conventions

Reads end in one newline. Scalars use invariant G9 formatting, booleans are 0 or 1, vectors are x y z, and quaternions are x y z w. Strings are verbatim. Lists are newline-separated. Event and telemetry streams are newline-delimited JSON.

KindExampleNotes
scalar120000.001doubles unless a row says otherwise
vector6578100 0 0components use the path’s stated frame and unit
quaternion0 0 0 1unit x y z w, usually Body to CCI
flag1exactly 0 or 1
JSON{"ut":123}compact documents are atomic snapshots

Writes are line-buffered. A newline submits a command and lets echo report its errno. A close without a newline is best effort, which is a rather poor time to discover that a decoupler is gone.

Filesystem IDs replace characters outside A-Za-z0-9._- with _; collisions gain ~2, ~3, and so on. Empty, . and .. also become safe names. vessels/active/ is a live alias for the controlled vessel, while vessels/by-id/<id>/ addresses any listed vessel. Aggregate HTTP routes use raw KSA IDs; the filesystem and MQTT mirror use sanitized IDs.

MarkReadsWrites
Sensorcurrent sampled valuenever, EACCES
Statecurrent setpointidempotent token, number, flag, or vector
Triggerusually 0exact fire token, normally 1
Batchusage hintcommand lines followed by commit
Streamgrowing NDJSON logread only
Binary streamcontinuous bytes, never EOFread only

telemetry_enabled=false freezes sampled data. Detail, bodies, parts, events, debug, camera, audio, and scheduling each have their own gates in Configuration. control_enabled=false rejects controls. With control_all_vessels=false, only the controlled vessel accepts ordinary vessel control; camera focus, scale, always-render, and debug are intentionally exempt.

Commands are executed on KSA’s game thread. Most controls are Frame phase; attitude, burn, and RCS-mode are Solver phase. A normal write waits for the game thread, so separate writes cannot land in the same tick. Use a batch when that distinction matters.

errnoHTTPMeaning
EINVAL400malformed, non-finite, wrong arity, or out of range
ENOENT404path, vessel, or fitted module vanished
EACCES403read-only leaf, disabled control/debug, or authority failure
EBUSY409action cannot happen now, such as a fired trigger
EIO500KSA call threw
ETIMEDOUT504game thread did not drain before command_timeout_ms
EOPNOTSUPP501integration accessor has degraded after a fault

Clip and camera-track stores can additionally return EFBIG for per-file caps, ENOSPC for store caps, EEXIST for a duplicate create, and EPERM for unsupported directory operations.