Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
翻訳待ち
The ROS 2 web dashboard and operator panel that never leaves your network. Offline, read-only, one docker run.
翻訳待ち
Loading the full README.
Read the full README ↗Styri — one offline operator panel for ROS 2 and VDA 5050 robots. See, send and stop a mixed fleet from any browser on site. No cloud, no account. Free for up to 3 robots.
Run it on any Linux box on the robots' network (amd64 or arm64):
docker run --rm --network host ghcr.io/styri-dev/styri-core:v2.0.1
Open http://<this machine's IP>:8080. Host networking lets Styri see DDS discovery on your LAN. Open source: read the code before you run it.
A mixed fleet, no hardware? One ROS 2 robot and two VDA 5050 vehicles on one map, all simulated:
cd examples/mixed-fleet && docker compose up
The first run builds the simulated robots, which takes a few minutes. Open http://localhost:8080 and log in with styri-demo. docker compose down -v resets the demo, map edits included.
On a Mac? Run Styri on the robot or any Linux machine on its network, and open the panel from any browser, Mac included. Docker on macOS can't see a robot on another machine, but the mixed-fleet demo runs there too.
styri usersstyri check — tests your config against the live robots and broker, PASS or FAIL per lineControl is off until an admin turns it on. Operator stop is a software stop, not a safety function. Read SAFETY.md before you turn control on.
docs/COMPATIBILITY.md lists what Styri supports. So far it has been tested against simulators only: Nav2's loopback simulator, Styri's own ROS 2 sim and vda-5050-lib's virtual AGV, not a real vendor robot.
| Robots | Price | ||
|---|---|---|---|
| Core | Up to 3, one site | Free, open source (Apache-2.0) | You're here |
| Pilot | Up to 20, one site | $360/month or $3,600/year | Buy or talk to us |
| Enterprise | More robots, multiple sites | Talk to us | Talk to us |
More than three robots? Styri Pilot is the public ghcr.io/styri-dev/styri-pro image plus a license file: docs/PILOT.md.
Free VDA 5050 bench: styri-vda-bench, an unofficial self-check.
Guides: styri.dev/help. Something not showing up? See docs/TROUBLESHOOTING.md.
Deploying to a client fleet? We can set it up for you. Styri Setup or talk to us.
Apache-2.0. See LICENSE. Bundled third-party software is listed in NOTICE. Styri comes with no warranty and no safety certification: see SAFETY.md.
Verify it yourself:
sudo tcpdump -i any 'not net 10.0.0.0/8 and not net 172.16.0.0/12 and not net 192.168.0.0/16 and not host 127.0.0.1 and not net 224.0.0.0/4'
Nothing should appear while Styri runs. (DDS discovery uses LAN multicast, 224.0.0.0/4, which never leaves your network.)
ROS 2 nodes ──DDS──▶ Styri bridge ──local WebSocket──▶ Styri panel ──LAN──▶ any browser
│
└──▶ local activity log (SQLite)
One container: a small bridge subscribes to your ROS 2 topics and serves a static web panel. Nothing leaves the machine except to browsers on your LAN.
Pass settings as environment variables, for example
docker run -e ROS_DOMAIN_ID=7 -e STYRI_MIN_VOLTAGE=23.0 --rm --network host ghcr.io/styri-dev/styri-core:v2.0.1.
| Variable | Default | |
|---|---|---|
ROS_DOMAIN_ID | 0 | Must match the robot |
STYRI_ROBOT_NAME | the host name | Shown in the header |
STYRI_BATTERY_TOPIC | /battery_state | A sensor_msgs/BatteryState topic |
STYRI_DIAGNOSTICS_TOPIC | /diagnostics | A diagnostic_msgs/DiagnosticArray topic |
STYRI_MIN_VOLTAGE | unset | Volts. Below this the Voltage tile turns amber and the status shows a low-voltage warning, whatever the charge reads. Unset, voltage is shown but never judged. |
Different topic names, another message type, the robot's own status, or a few
values of your own? Describe them in one styri.yaml and mount it:
robot: {name: amr-01, namespace: /robot1}
battery: {topic: battery, percentage: charge, percentage_scale: 1, warn_below: 30}
status: {topic: mode, field: data, fault: [ERROR, STOPPED]}
fields:
- {label: Motor current, topic: motor/current, field: data, unit: A, warn_above: 12}
docker run --rm --network host -v "$PWD/styri.yaml:/etc/styri/styri.yaml:ro" ghcr.io/styri-dev/styri-core:v2.0.1 styri check
styri check tests the file against the live robot and names anything it can't
find, with close matches. Presets for Nav2 (navigation status), TurtleBot 4
and generic BatteryState robots ship in the image, along with Nav2's and
other common message types. Your robot's own message types load as an
overlay. The full reference:
docs/MAPPING.md.
All settings: docs/DEVELOPMENT.md. What works with what: docs/COMPATIBILITY.md. Something not showing up? See docs/TROUBLESHOOTING.md.
Issues and pull requests are welcome. See docs/DEVELOPMENT.md to build and test locally.