Open-source FRC tooling monorepo for Team 3544.
Tools to prototype, tune, diagnose, simulate, log, and drive Team 3544 robots.
Goal: Make the robot faster to develop, easier to debug, easier to tune, and more reliable at competition.
3544-FRC-Toolkit/
├── apps/
│ ├── dashboard/ Vite + React match/sim/replay dashboard
│ ├── code-generator/ Python + Qt boilerplate generator
│ ├── robot-health/ Python + Qt pit diagnostic app
│ └── subsystem-tuner/ Python + Qt live mechanism tuner
└── packages/
├── 3544FRCLib/ Java WPILib library (robot-side)
├── dashboard-core/ Shared TS logic (NT client, models)
├── dashboard-ui/ Shared React components
├── field-sim/ 2D field & mechanism visualization
├── power-diagnostics/ Power and current analysis logic
└── replay-engine/ NT recording and replay engine
Each part has its own README.md with full details.
The live-first dashboard path is implemented and wired to the sample robot simulation.
| Part | Status |
|---|---|
apps/dashboard |
Live React dashboard with overview, power, subsystems, tunables, health/faults, field simulation, NT live viewer, and replay JSON import |
robot |
WPILib sample robot publishes the /3544/ dashboard contract in simulation |
packages/3544FRCLib |
Reusable NT, health, tunable metadata, dashboard publishing, and power publishing helpers |
packages/dashboard-core |
Shared NT key schema, robot/replay models, and live/replay data source interfaces |
packages/field-sim |
Field visualization is currently implemented inside apps/dashboard; package remains the future extraction target |
packages/replay-engine |
Replay model/import path exists; full recording/export engine is still future work |
packages/power-diagnostics |
Live power dashboard is implemented in apps/dashboard; package remains the future extraction target |
| Python apps | Markdown specs exist; implementation is still future work |
Understanding what depends on what tells you what to build first.
packages/3544FRCLib — no internal dependencies (robot-side Java)
packages/dashboard-core — no internal dependencies
packages/replay-engine — depends on: dashboard-core
packages/power-diagnostics — depends on: dashboard-core
packages/field-sim — depends on: dashboard-core
packages/dashboard-ui — depends on: dashboard-core
apps/dashboard — depends on: dashboard-core
dashboard-ui
field-sim
power-diagnostics
replay-engine
apps/code-generator — no internal dependencies (standalone Python app)
apps/robot-health — no internal dependencies (standalone Python app)
apps/subsystem-tuner — no internal dependencies (standalone Python app)
dashboard-core ──┬──▶ replay-engine ────────┐
├──▶ power-diagnostics ─────┤
├──▶ field-sim ─────────────┤──▶ apps/dashboard
└──▶ dashboard-ui ──────────┘
3544FRCLib ──▶ (robot project, not this monorepo)
code-generator ──▶ (standalone)
robot-health ──▶ (standalone)
subsystem-tuner ──▶ (standalone)
If you are setting up the full monorepo from scratch, follow this order:
Build packages/dashboard-core first. Everything else in the TS stack depends on it.
packages/replay-enginepackages/power-diagnosticspackages/field-simpackages/dashboard-ui
Build apps/dashboard after all packages are ready.
packages/3544FRCLib is a self-contained Gradle project. Build and link it to your robot project independently of the TS stack.
apps/code-generator, apps/robot-health, and apps/subsystem-tuner are standalone Python apps with no dependencies on the rest of this monorepo.
Run the robot simulation and dashboard in two terminals.
Terminal 1:
cd robot
./gradlew simulateJavaTerminal 2:
cd apps/dashboard
npm install
npm run devOpen the Vite URL printed by npm run dev, usually http://localhost:3000. The dashboard connects to the NT4 server at localhost:5810.
cd apps/dashboard
npm install
npm run devAll three Python apps follow the same pattern:
cd apps/<app-name> # code-generator | robot-health | subsystem-tuner
python -m venv .venv
pip install -r requirements.txt
python main.pyAdd packages/3544FRCLib as a local Gradle dependency in your robot project:
implementation project(':packages:3544FRCLib')- Generate subsystem boilerplate with
apps/code-generator - Integrate the subsystem into robot code using
packages/3544FRCLib - Tune the mechanism live with
apps/subsystem-tuner - Validate the robot before matches with
apps/robot-health - Monitor during driving and testing with
apps/dashboard - Replay match data afterward to diagnose issues
- Extract the app-local field, replay, and power logic into their package directories when those packages need to be consumed outside
apps/dashboard. - Implement full replay recording/export once live dashboard workflows are stable.
- Build out the Python apps from their current specs.
- Add automated TypeScript and Java tests once local
node,npm, and a JDK withjavacare available.
All NetworkTables keys are published under /3544/ to avoid collisions with WPILib defaults.
/3544/Robot/Pose
/3544/Robot/Mode
/3544/Robot/Enabled
/3544/Robot/BatteryVoltage
/3544/Power/TotalCurrent
/3544/Power/TotalPower
/3544/Power/SubsystemNames
/3544/Power/Battery/Voltage
/3544/Power/Battery/TotalCurrent
/3544/Power/Battery/TotalPower
/3544/Power/Subsystems/<Subsystem>/Current
/3544/Power/Subsystems/<Subsystem>/Power
/3544/Power/Subsystems/<Subsystem>/Energy
/3544/Health/Faults
/3544/Health/Warnings
/3544/Health/CAN/Utilization
/3544/Health/Status
/3544/Subsystems/Names
/3544/Subsystems/Shooter/TopRPM
/3544/Subsystems/Shooter/TargetRPM
/3544/Subsystems/Shooter/Ready
/3544/Tunables/Names
/3544/Tunables/Shooter/kP
/3544/Tunables/Shooter/kV
/3544/Tunables/Shooter/TargetRPM
/3544/Simulation/TurretAngleDeg
/3544/Simulation/DriveMode
/3544/Simulation/IntakeState
- One source of truth for NT keys
- Fast robot loops — no excessive allocations in periodic methods
- Live and replay use the same dashboard components
- All tools work with real robot and simulation
- Generated code is readable and easy to modify manually