CLI / Entry Points
The stable user-facing command is librux. Installed runtimes also ship lbx
as a short alias for the same command. After sourcing <prefix>/env.sh,
<prefix>/bin is added to PATH, and operators should prefer the unified
command form unless a guide explicitly calls out a lower-level binary.
Read Runtime Configuration first when you need to
understand what a command changes in config.yaml. This page focuses on the CLI
entry points used to inspect, change, and operate an installed host.
. <prefix>/env.sh
librux --help
lbx --help
Every command on this page can be typed with either name.
librux deploy status ./robot.deployment.yaml
lbx deploy status ./robot.deployment.yaml
Product deployments normally manage daemons through systemd. Development
workflows can start the same daemons directly through librux control or the
lower-level binaries described below.
Operator Commands
| Command | Dispatches to | Purpose |
|---|---|---|
librux status / lbx status |
librux-doctor |
show installed runtime status and diagnostics |
librux control [args] |
librux-control |
run the host control backend directly |
librux serve [args] |
librux-control |
alias for librux control |
librux config ... |
librux-config |
inspect or edit runtime configuration |
librux package ... |
librux-package |
validate or build managed packages |
librux launch ... |
librux-launch |
start, restart, stop, and inspect managed package leases |
librux deploy ... |
built in | validate, plan, start, restart, stop, or inspect robot application deployments |
librux subsystem ... |
librux-subsystem |
inspect registered subsystem sessions and clean stale state |
librux resource status |
librux-launch list |
list active and recently reaped resource leases |
librux resource inventory |
librux-launch inventory |
show CPU, NIC, link-layer, CAN, and device inventory |
librux resource stop <lease> |
librux-launch stop <lease> |
stop a managed lease and terminate its process scope |
librux timesync doctor |
librux-timesync-doctor |
check time-sync readiness |
librux timesync run ... |
librux-timesync |
run a manual time-sync helper path |
librux timesync daemon ... |
librux-timesyncd |
run the managed time-sync companion directly |
librux system ... |
systemctl / journalctl |
operate Librux systemd units |
Common tutorials.
. <prefix>/env.sh
librux --help
librux status
librux config --help
librux package --help
librux launch --help
librux deploy validate tutorials/deployments/teleop.deployment.yaml
librux subsystem status
librux resource inventory
librux timesync doctor
librux system status
Configuration values can be inspected and overridden by key path.
librux config get timed_exchange.inline_payload_threshold
librux config set timed_exchange.inline_payload_threshold 65536
The same key-path model applies to product shell and security settings.
librux config set product.name "Acme Robot Controller"
librux config set product.vendor "Acme Robotics"
librux config set control.frontend.mode custom
librux config set control.frontend.root /opt/acme/ui/dist
librux config set federation.security.mode required
librux config set federation.security.key_id robot-cell-a
librux config set federation.security.key_file /opt/librux/var/lib/security/federation.key
Use librux config tui for the common settings form, or use
librux config set for any supported dotted key. Secret material should usually
live in root-owned files or environment variables rather than inline YAML.
Deployment Commands
Use deployment commands before publishing robot tutorials or product deployment manifests.
librux deploy validate ./librux.deployment.yaml
librux deploy plan ./librux.deployment.yaml
librux deploy plan ./librux.deployment.yaml --json
librux deploy up ./librux.deployment.yaml
librux deploy restart ./librux.deployment.yaml
librux deploy status ./librux.deployment.yaml
librux deploy down ./librux.deployment.yaml
validate checks the level declared by the manifest. A manifest with only
instances and bindings is a subsystem composition. A manifest with robot
adds robot slot and capability validation. A manifest with both robot and
application also checks the selected app-role subsystem against required
capabilities and optional platform compatibility labels from the profiles
manifest field. plan prints the concrete
instances and launch modes after validation succeeds.
up reconciles missing or stale managed instances and keeps active matching
instances by default. restart is the explicit replacement path; it stops active
managed instances, cleans their runtime session state, and launches the desired
state again.
Lower-Level Runtime Tools
The installed bundle also ships the individual tools used by librux. These are
useful for scripts, debug sessions, and direct daemon launches.
librux-control- host control backend. Product installs usually run it aslibrux-control.service; development installs can run it directly withlibrux control --config "$LIBRUX_PREFIX/config.yaml".librux-config- runtime config editor andget/set/unsethelper.librux-package- packagevalidateandbuild.librux-launch- managed packagerun,restart,inventory,list,status, andstop.librux-subsystem- registered subsystemstatus,sessions,doctor, lifecycle transition requests, runtime bindings, and stale-statecleanup.librux-doctor- aggregate runtime diagnostics.librux-timesync- explicit Linux PTP/time-sync helper launcher.librux-timesyncd- managed time-sync companion used bytime_sync.management_mode=managed.librux-timesync-doctor- focused time-sync readiness doctor.librux-resourced- privileged resource companion for managed package leases, brokered resource FDs, affinity, cgroup placement, and cleanup.
Linux installs additionally provide shell helpers.
librux-timesync-install- installlinuxptp/ethtoolprerequisites.librux-device-policy-install- install Librux udev serial/USB device-node policy.librux-system-service-install- registerlibrux-control.service,librux-resourced.service, andlibrux-timesyncd.service.
Direct Development Launch
For a development install under a user prefix, keep the control backend in a separate terminal.
. /opt/librux/env.sh
librux control --config "$LIBRUX_PREFIX/config.yaml"
For product prefixes, prefer the system service.
sudo systemctl status librux-control.service --no-pager
librux dev control, librux dev resourced, and librux dev timesyncd are
developer conveniences for starting one daemon directly. librux dev all is
intentionally not implicit; start daemons in separate terminals when debugging
their logs.
Use librux launch run <package> --bind requirement=provider.interface when
you want to start one managed subsystem package and wire its required
interfaces without creating a full deployment. librux deploy up is the
command for reconciling a complete robot and application composition. Launch
bindings validate the local requirement name and target shape; deployment
manifests validate the complete provider contract graph.
Use librux launch restart <package> ... during iterative development when the
same package instance is already running or stale. It uses the same
--instance, --bind, --set, and --runtime-dir arguments as run, but the
process is always relaunched through the managed detached path.
If you start a subsystem without a required binding during development, it can
remain registered in WaitingBinding instead of failing at process start. Use
Runtime Graph in the Web Console, or the subsystem binding commands, to bind it
after both sides are visible.
librux subsystem bindings
librux subsystem bind app.cleaner.teleop.mobility compound.cleaner.mobility
librux subsystem bind app.cleaner.teleop.trash_disposal compound.cleaner.trash_disposal
librux subsystem unbind app.cleaner.teleop.mobility
Runtime bindings override launch bindings for the running control backend. They are intended for interactive development and operator repair; keep deployment manifests as the reviewable source for product compositions.
librux launch run prints a concise launch summary by default. Add --json
when a script needs the full resource-service response, lease details, or
machine-readable logs.
Subsystem Sessions
Subsystem processes do not need to be launched by a special development
launcher. A Python or C++ subsystem can be started from its normal main,
script, IDE, debugger, or test harness. The SDK registers a per-process session
with the local control backend when the subsystem comes up.
For a repeated development cycle, the backend treats the subsystem name and session identity together.
- the same live session can refresh its own status
- a stale or dead previous session with the same subsystem name can be replaced
- a different session with the same subsystem name is rejected while the previous session is still active
- late shutdown messages from an old session cannot remove the current session
Use the subsystem commands to inspect or repair runtime state.
librux subsystem status
librux subsystem status arm_controller
librux subsystem sessions --json
librux subsystem doctor arm_controller
librux subsystem bindings arm_controller
librux subsystem bind arm_controller.motion mobile_base.motion
librux subsystem unbind arm_controller.motion
librux subsystem pause arm_controller
librux subsystem resume arm_controller
librux subsystem reset arm_controller
librux subsystem fault arm_controller --reason "encoder timeout"
librux subsystem terminate arm_controller
librux subsystem kill arm_controller
librux subsystem cleanup arm_controller --stale
librux subsystem cleanup arm_controller --force
Lifecycle commands are requests. The runtime validates the current state and
delivers the request to the subsystem SDK hook through the registered notify
endpoint. Watch librux subsystem status <name> or Runtime Graph for completion.
terminate and kill are managed process actions, not lifecycle transitions.
They require a resource lease from librux-resourced. terminate gives the
process scope a SIGTERM grace window before escalation; kill sends
SIGKILL immediately.
cleanup --stale is the default-safe path and only removes inactive state.
cleanup --force is for operator intervention when the current runtime view is
known to be wrong.
Version Provenance
Installed runtime CLIs read the package version from the bundled
release-manifest.json when available. Use --version on librux,
librux-control, librux-config, librux-package, librux-launch,
librux-subsystem, librux-doctor, librux-timesync, librux-timesyncd,
librux-timesync-doctor, and librux-resourced when collecting runtime
provenance. Source-tree builds without a release manifest may report the
underlying package version instead.
Source-Tree Helpers
Source checkouts may include helper scripts for building or inspecting the tree. Those helpers are separate from the installed runtime CLIs listed above.