William Gill 57382e189a
Some checks failed
ci / test (push) Failing after 4m12s
ci / lint (push) Successful in 2m53s
Drop Windows from CI matrix
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>
2026-04-08 09:35:01 -05:00
2026-04-08 08:56:45 -05:00
2026-04-08 08:56:45 -05:00

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 drops mototrbod.toml)
    • Linux/macOS: current directory, $XDG_CONFIG_HOME/mototrbo (or ~/.config/mototrbo), then /etc/mototrbo
  • Env prefix: MOTOTRBO_, dotted keys mapped to underscores (e.g. tls.certMOTOTRBO_TLS_CERT)
  • Explicit file: pass --config /path/to/file.toml to 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.

Description
No description provided
Readme EUPL-1.2 187 KiB
Languages
Go 95.7%
PowerShell 2.9%
Shell 1.2%
Makefile 0.2%