Windows runners are not available for this project; keep cross-build verification on Linux and rely on local PowerShell scripts for Windows packaging. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
mototrbo
A Go service that sits next to MOTOTRBO MNIS on a Windows host and exposes its messaging surface to LAN clients over gRPC + REST, with mTLS auth and an optional ntfy.sh bridge for inbound TMS push notifications.
See docs/PLAN.md for the design and milestone plan.
Status
Pre-v0.1, milestone M1 in progress (pure protocol packages, no I/O).
| Package | Status |
|---|---|
internal/pkg/radioid |
✅ done |
internal/pkg/tms |
✅ done |
internal/pkg/ars |
✅ done |
internal/pkg/lrrp |
✅ done (immediate request + report decode) |
internal/pkg/mnis |
✅ done (UDP + loopback transport) |
internal/pkg/grpcserver |
M3 |
internal/app/restserver |
✅ done |
internal/app/ntfybridge |
✅ done |
internal/pkg/contacts (Badger) |
✅ done |
internal/pkg/cfgloader |
✅ done |
cmd/mototrbod |
✅ done |
cmd/mototrboctl |
✅ done |
Build & test
make build
make test
make vet
make lint # requires staticcheck
Configuration
Both mototrbod and mototrboctl load configuration through
internal/pkg/cfgloader, a thin wrapper around viper. Precedence is
flags > env > file > defaults.
- Format: TOML
- Search path:
- Windows:
%PROGRAMDATA%\mototrbo(this is the only location reachable when running under the SCM and is where the MSI dropsmototrbod.toml) - Linux/macOS: current directory,
$XDG_CONFIG_HOME/mototrbo(or~/.config/mototrbo), then/etc/mototrbo
- Windows:
- Env prefix:
MOTOTRBO_, dotted keys mapped to underscores (e.g.tls.cert→MOTOTRBO_TLS_CERT) - Explicit file: pass
--config /path/to/file.tomlto bypass the search path
Starter configs live in configs/:
Windows installer
A WiX v4 source for an MSI lives at
installer/windows/mototrbod.wxs.
The MSI installs to C:\Program Files\mototrbo\, drops a default
mototrbod.toml and data\ / logs\ directories under
C:\ProgramData\mototrbo\, and registers mototrbod as a LocalSystem
auto-start Windows service that is started on install and removed on
uninstall.
Building the MSI locally
CI does not produce Windows artifacts; build the MSI on a Windows host with PowerShell:
# one-time
dotnet tool install --global wix
# every build
pwsh scripts/build-msi.ps1 -Version 0.1.0
# -> dist\mototrbo-0.1.0-x64.msi (+ SHA256SUMS.txt)
scripts/build-binaries.ps1 is the binaries-only shortcut if you do
not need the MSI.