FMS for the 2026 FRC game REBUILT, built by Team 2718.
This repository contains:
PossumFMS.Core: .NET 10 backend that manages match state, Driver Station communication, field hardware, and SignalR updates.PossumFMS.Web: Svelte web frontend used to operate and monitor the FMS.PossumFMS.Firmware: Arduino firmware for the ESP32 field hardware
- ASP.NET Core app targeting
net10.0. - SignalR hub endpoint:
/fmshub. - Core components:
Arena: authoritative match state machine and timing.GameLogic: game-specific scoring/data hooks.DriverStationManager: high-frequency FMS <-> DS networking.AccessPointManager: VH-113 AP configuration and status polling.FieldHardwareManager: TCP manager for ESP32 field devices.
- SvelteKit + Vite + Tailwind CSS.
- Uses SignalR client to connect to
/fmshub. - In dev mode, Vite proxies
/fmshubtohttp://localhost:5000. - Uses
@sveltejs/adapter-staticfor production static builds.
Install these tools on Windows:
- Git
- .NET 10 SDK
- [Node.js LTS with pnpm] (https://nodejs.org/en/download)
- Visual Studio Code
ms-dotnettools.csharpms-dotnettools.csdevkit(optional but useful)svelte.svelte-vscodebradlc.vscode-tailwindcssdbaeumer.vscode-eslintesbenp.prettier-vscode
From repo root:
# Backend restore (from PossumFMS.Core)
dotnet restore PossumFMS.sln
# Frontend install (from PossumFMS.Web)
pnpm installBuild the frontend once, then run only the backend:
# Terminal 1 (from PossumFMS.Web)
pnpm build
# Terminal 2 (from PossumFMS.Core)
dotnet runOpen the UI from the backend URL (typically http://localhost:5000).
The backend serves static files from PossumFMS.Web/build.
Use two terminals when actively editing Svelte UI:
# Terminal A (from PossumFMS.Core)
dotnet run
# Terminal B (from PossumFMS.Web)
pnpm devOpen the Vite URL shown in Terminal B (typically http://localhost:5173).
Unit tests live in PossumFMS.Core.Tests (xUnit, targeting net10.0).
# Run all tests (from repo root or PossumFMS.Core.Tests/)
dotnet test PossumFMS.Core.Tests/PossumFMS.Core.Tests.csproj
# Run with detailed output
dotnet test PossumFMS.Core.Tests/PossumFMS.Core.Tests.csproj --logger "console;verbosity=normal"
# Run a specific test class
dotnet test PossumFMS.Core.Tests/PossumFMS.Core.Tests.csproj --filter "FullyQualifiedName~ArenaTests"
# Run with code coverage (requires coverlet — installed automatically via xunit template)
dotnet test PossumFMS.Core.Tests/PossumFMS.Core.Tests.csproj --collect:"XPlat Code Coverage"# Backend build
dotnet build .\PossumFMS.Core\PossumFMS.sln -c Release
# Frontend checks/lint/build
pnpm check
pnpm lint
pnpm buildThe backend and frontend produce separate deployable artifacts.
From repo root:
# Windows x64 publish (framework-dependent)
dotnet publish .\PossumFMS.Core.csproj -c Release -r win-x64 --self-contained false -o .\publish\win-x64
# Linux x64 publish (framework-dependent)
dotnet publish .\PossumFMS.Core.csproj -c Release -r linux-x64 --self-contained false -o .\publish\linux-x64Outputs:
- Windows:
PossumFMS.Core\publish\win-x64\ - Linux:
PossumFMS.Core\publish\linux-x64\
If you want standalone binaries without requiring preinstalled .NET runtime, set --self-contained true (larger output).
From repo root:
pnpm install
pnpm buildOutput:
- Static site:
PossumFMS.Web\build\
Because this frontend is static (adapter-static), the same built files can be served on Windows or Linux by any static web server.