API reference¶
Every public member of the two routine-authoring surfaces — Chassis and Routine, both frozen contracts — extracted from the headers. This page is generated, so it cannot fall behind the code: a member added to one of those headers appears here the next time the tool runs, and the host test build fails if it has not. It is not the whole API — see "What is not here" below.
A member of those surfaces with no documentation comment fails the build, naming itself. That gate is what makes "generated" mean "complete" rather than "generated from whatever someone remembered to write".
What is not here, and why. This page covers the two surfaces you write an autonomous routine against. shulib's public surface is far larger — roughly 160 public types across a dozen subsystems — and almost none of it is generated here.
Being frozen is not the selector, and it is worth saying so plainly: the coordinate frame, the units and angle semantics, the HAL interface signatures and the kinematics contract are all locked contracts too, and none of them is generated here either. The honest reason is narrower — the generator was pointed at the two types a routine author touches, and has not been pointed anywhere else yet.
Shipped, public, and absent:
- The diagnostics and logging API —
ITelemetrySinkandLogLevel; the sinks (TermSink,SdSink,NullSink,LevelFilterSink,RateLimitedSink); the records (DebugRecord,MotionResult,RunSummary,SessionInfo); the monitors (FaultLatch,FaultCode,HealthMonitor,LoopMonitor,PoseDeltaGuard); and the blackbox (BlackboxReaderand its format). This is the largest omission by far, and guide chapter 11 is its real documentation — it teaches the transcript line by line, which is how you actually use this layer. - Localization —
GpsCorrector,AprilTagCorrector,TagMap,EkfFusion,ComplementaryFusion,Localizer(chapter 3). - The run guard —
RunGuardand its config/report types (chapter 14 states what "guaranteed" does and does not cover). - The seams — mechanism, controller and digital-input (chapter 13), plus the whole
hal/interface set and itshal/prosadapters.
Each of those is documented in its own header, and the headers are written to be read — every one opens with why it exists, not just what it does. Until this page grows, that is where the rest of the API lives, and the user guide is the map to it.
Two real constraints shape when that changes. Adding a header here also puts it under the coverage gate, so an undocumented public member starts failing the build — that is the point of the gate, and it is also why expanding is a piece of work rather than a switch. And gating a seam that is deliberately not frozen would pin it in place, which is a way of freezing it by accident; the Freeze Register records which seams those are and why they are still open.
Pages¶
Chassis— the frozen facade — The public surface every autonomous routine is written against. Frozen as register row F6 on 2026-08-12: every member below changes only with a major API-version bump plus a migration note.Routine— the recipe layer — The Tier-2 chain: a complete autonomous routine as a sequence of named steps, each delegating to exactly oneChassisverb.
Every public member, alphabetically¶
| Member | Type | Page |
|---|---|---|
Chassis::brake |
Chassis |
chassis.md |
Chassis::cancel |
Chassis |
chassis.md |
Chassis::Chassis |
Chassis |
chassis.md |
Chassis::Chassis (overload 2) |
Chassis |
chassis.md |
Chassis::Chassis (overload 3) |
Chassis |
chassis.md |
Chassis::deps |
Chassis |
chassis.md |
Chassis::drive |
Chassis |
chassis.md |
Chassis::followTrajectory |
Chassis |
chassis.md |
Chassis::followTrajectory (overload 2) |
Chassis |
chassis.md |
Chassis::hold |
Chassis |
chassis.md |
Chassis::lastCompleted |
Chassis |
chassis.md |
Chassis::lastExitReason |
Chassis |
chassis.md |
Chassis::motionConfig |
Chassis |
chassis.md |
Chassis::moveTo |
Chassis |
chassis.md |
Chassis::operator= |
Chassis |
chassis.md |
Chassis::operator= (overload 2) |
Chassis |
chassis.md |
Chassis::pose |
Chassis |
chassis.md |
Chassis::scheduler |
Chassis |
chassis.md |
Chassis::scheduler (overload 2) |
Chassis |
chassis.md |
Chassis::setPose |
Chassis |
chassis.md |
Chassis::strafeAuthority |
Chassis |
chassis.md |
Chassis::strafeTo |
Chassis |
chassis.md |
Chassis::turnTo |
Chassis |
chassis.md |
Chassis::wait |
Chassis |
chassis.md |
Chassis::waitUntil |
Chassis |
chassis.md |
Chassis::~Chassis |
Chassis |
chassis.md |
ChassisConfig::motion |
ChassisConfig |
chassis.md |
ChassisConfig::scheduler |
ChassisConfig |
chassis.md |
MotionOptions::maxAngularSpeed |
MotionOptions |
chassis.md |
MotionOptions::maxLinearSpeed |
MotionOptions |
chassis.md |
MotionOptions::timeout |
MotionOptions |
chassis.md |
MotionOptions::validate |
MotionOptions |
chassis.md |
Routine::brake |
Routine |
routine.md |
Routine::chassis |
Routine |
routine.md |
Routine::driveTo |
Routine |
routine.md |
Routine::face |
Routine |
routine.md |
Routine::followTrajectory |
Routine |
routine.md |
Routine::followTrajectory (overload 2) |
Routine |
routine.md |
Routine::hold |
Routine |
routine.md |
Routine::lastTrajectory |
Routine |
routine.md |
Routine::moveTo |
Routine |
routine.md |
Routine::ok |
Routine |
routine.md |
Routine::operator= |
Routine |
routine.md |
Routine::operator= (overload 2) |
Routine |
routine.md |
Routine::pause |
Routine |
routine.md |
Routine::result |
Routine |
routine.md |
Routine::Routine |
Routine |
routine.md |
Routine::Routine (overload 2) |
Routine |
routine.md |
Routine::Routine (overload 3) |
Routine |
routine.md |
Routine::startAt |
Routine |
routine.md |
Routine::strafeTo |
Routine |
routine.md |
Routine::then |
Routine |
routine.md |
Routine::turnTo |
Routine |
routine.md |
Routine::waitFor |
Routine |
routine.md |
Routine::~Routine |
Routine |
routine.md |
RoutineResult::cause |
RoutineResult |
routine.md |
RoutineResult::completed |
RoutineResult |
routine.md |
RoutineResult::exit |
RoutineResult |
routine.md |
RoutineResult::ok |
RoutineResult |
routine.md |
RoutineResult::skipped |
RoutineResult |
routine.md |
RoutineResult::steps |
RoutineResult |
routine.md |
RoutineResult::stoppedAt |
RoutineResult |
routine.md |
RoutineResult::stoppedName |
RoutineResult |
routine.md |
RoutineStopCause::ActionFailed |
RoutineStopCause |
routine.md |
RoutineStopCause::MechanismFailed |
RoutineStopCause |
routine.md |
RoutineStopCause::MotionFailed |
RoutineStopCause |
routine.md |
RoutineStopCause::None |
RoutineStopCause |
routine.md |
RoutineStopCause::WaitTimedOut |
RoutineStopCause |
routine.md |
TrajectoryResult::completedLegs |
TrajectoryResult |
chassis.md |
TrajectoryResult::exit |
TrajectoryResult |
chassis.md |
TrajectoryResult::succeeded |
TrajectoryResult |
chassis.md |
TrajectoryResult::totalLegs |
TrajectoryResult |
chassis.md |
Where the other documents fit¶
- The user guide teaches the ideas in order, and chapter 10 is the API as prose — when to reach for a verb, what it does when things go wrong, which gotchas bite. It deliberately does not restate signatures; this reference owns those.
- The cookbook answers "how do I write the routine I am writing right now", with compiled recipes.
- This reference answers "what exactly exists, and what is its exact spelling".
Last updated 2026-08-14 — published from the main release branch, commit 6d5dd35. This site tracks releases, so between them it can lag the repository — that lag is deliberate, and it is what keeps the development log off the public site. For the current state of the code, see the repository.