A modern, asynchronous Windows application for discovering, monitoring, configuring, and controlling RTN simulcast receivers.
Warning
Work in progress
Simulcast Utility Suite is under active development and although it has just reached a stable public release. Features, the interface, and especially the plugin framework may evolve as the project grows.
Simulcast Utility Suite is a modern WPF desktop application for discovering, monitoring, configuring, and controlling RTN simulcast receivers from one responsive interface.
RTN (Racetrack Television Network) delivers live racing and simulcast content to racetracks, casinos, sportsbooks, and off-track betting facilities throughout North America. Simulcast Utility Suite provides a modern receiver-management experience focused on responsiveness, clear live status, and extensibility.
Receiver communication and long-running operations use an asynchronous architecture so the interface remains responsive. A central receiver manager acts as the source of truth for selection, configuration, connection state, activity, channel information, and plugin integrations.
The application has grown beyond basic receiver control into an extensible platform. Plugins can add interface elements, commands, schedules, media feeds, themes, settings, persistent data, and application behavior without modifying the core application.
Once public builds are available, the latest installer will be published on the GitHub Releases page.
β Download the latest release
The self-contained Windows x64 installer does not require users to install the .NET runtime separately. Setup supports both per-user and workstation-wide installations.
Monitor receiver status, activity, channel information, EPG progress, and receiver details while keeping channel controls and actions close at hand.
Discover, validate, add, edit, delete, and fluidly reorder receivers without leaving the main application shell.
Import, enable, disable, refresh, configure, and actively unload plugins at runtime. Plugin-defined settings are presented using controls that match the application theme.
Open one independent, non-modal virtual remote per receiver and continue working in the main window while commands are sent.
- β‘ Asynchronous receiver discovery, communication, and refresh operations
- π‘ Live online, offline, warning, editing, transmitting, and idle activity states
- πΊ Current channel, EPG information, event times, and live progress display
- π Validated channel control with command throttling and visual feedback
- π² Plugin-powered channel discovery actions such as Feeling Lucky
- β Add, edit, delete, validate, and fluidly reorder receiver configurations
- πΉ Independent virtual remote windows with live activity feedback
- π Animated, stacked success, information, and error notifications
- π Immediate startup refresh and guarded per-receiver or refresh-all actions
- π§© Runtime plugin importing, enabling, disabling, refreshing, and removal
- π¨ Plugin-provided application themes, including title-bar appearance
- πΎ Persistent receiver configuration and plugin-specific data storage
- π¦ Styled per-user and workstation-wide installers with optional receiver import
The dashboard provides quick access to the selected receiver and its controls:
- Receiver name, identifier, IP address, MAC address, and software version
- Online status, last-seen time, and current receiver activity
- Current channel, event information, start and end times, and progress
- Validated channel entry and plugin-provided channel actions
- Refresh, edit, virtual remote, and other receiver actions
- Plugin-provided cards, controls, schedules, and media experiences
Receiver selection is synchronized through the receiver manager, ensuring every view and open virtual remote reflects the current receiver information.
Plugins implement ISimulcastPlugin from SimulcastUtility.Plugins and receive an IPluginContext during initialization. Plugins can be imported as a single DLL, a collection of DLLs, or a ZIP package.
- π Access and observe the receiver collection and selected receiver
- π‘ Dispatch receiver commands through the application's command services
- π₯ Locate and extend application views with custom WPF elements
- π¬ Open application dialogs and publish themed notifications
- π¨ Register themes and control light or dark title-bar appearance
- πΎ Store plugin-specific data through the application data-store API
- β Expose named settings, descriptions, choices, toggles, and list selectors
- π§ Handle application startup arguments
- π Subscribe to receiver and application events
- β» Enable, disable, refresh, unload, and remove plugin code at runtime
Plugin settings can be implemented by using IPluginSettingsProvider from SimulcastUtility.Plugins which allows the plugin to easily get the setting values and define what settings are available for the plugin using attributes.
The built-in settings experience currently supports:
- Text
- Numeric
- Toggle
- Checkbox
- MultiCheckbox
- Dropdown (choice)
- SideBySideList
These are provided via the PluginSetting attribute using PluginSettingControlType enum.
Plugins may be placed directly inside the configured plugin directory or in their own subdirectory when dependencies are required.
Plugins/
βββ ExamplePlugin.dll
βββ RTNSPlugin/
β βββ RTNPlugin.dll
β βββ PluginDependency.dll
βββ ExamplePlugin2/
βββ Plugin.dll
βββ PluginDependency1.dll
βββ PluginDependency2.dll
The application recursively discovers compatible plugins. Shared Simulcast Utility contract assemblies should not be copied into an individual plugin directory.
For complete guidance, see the Plugin Development Wiki.
- Windows 10 version 1809 or newer
- 64-bit Windows installation
The official installer publishes a self-contained application, so no separate .NET installation is required.
- .NET 10 SDK
- Visual Studio 2026 or another IDE with WPF support
- Inno Setup 6 when building the installer (Possibility of upgrading to Inno Setup 7 in the future)
Clone and build the project:
git clone https://github.com/NyxionSoftware/SimulcastUtilitySuite.git
cd SimulcastUtilitySuite
dotnet restore
dotnet build SimulcastUtilitySuite.slnx
dotnet run --project SimulcastUtility\SimulcastUtility.csprojRun the installer builder from the repository root:
Installer\build-installer.cmdAn optional version can be supplied as the first argument:
Installer\build-installer.cmd 1.0.0The generated installer is written to Installer\Output\SimulcastUtilitySetup.exe and lets the user choose between:
- A per-user installation under
%LOCALAPPDATA%\Programswithout elevation - A workstation installation under
%ProgramFiles%\NyxionSoftwarewith administrator approval
The installer can optionally import an existing receivers.json file. The themed uninstaller independently offers removal of receiver configuration, installed plugins, and plugin data.
Unless overridden through configuration, application data is stored under:
%LOCALAPPDATA%\SimulcastUtility
| Data | Default location |
|---|---|
| Receiver configuration | receivers.json |
| Logs | Logs\ |
| Installed plugins | Plugins\ |
| Plugin data and settings | PluginData\ |
Logging and plugin directories can be changed through application configuration. The uninstaller preserves application data unless the user explicitly selects a cleanup option.
| Project | Responsibility |
|---|---|
SimulcastUtility |
WPF executable, startup, and application windows |
SimulcastUtility.Wpf |
Views, view models, controls, themes, and WPF plugin services |
SimulcastUtility.Application |
Receiver workflows, commands, events, and application interfaces |
SimulcastUtility.Core |
Receiver models, enums, exceptions, and shared domain logic |
SimulcastUtility.Infrastructure |
Receiver persistence and infrastructure services |
SimulcastUtility.Configuration |
Application configuration models |
SimulcastUtility.Logging |
Logging infrastructure |
SimulcastUtility.Plugins |
Plugin contracts, loading, settings, storage, and runtime management |
Installer |
Inno Setup source, generated payload, and installer builder |
- Manual receiver discovery and validation
- Receiver channel control and virtual remote
- Receiver configuration, deletion, and drag-to-reorder
- Live receiver status, activity, EPG, and progress
- Animated application notifications
- Runtime plugin management and active unloading
- Plugin settings and persistent data-store APIs
- Application-wide plugin themes
- Styled per-user and workstation installer
- Automatic receiver discovery
- Receiver group management
- Multi-language support
The GitHub Wiki covers application usage, receiver management, configuration, plugin installation, plugin development, settings, data storage, UI integration, and themes.
- Getting Started
- Managing Receivers
- Managing Plugins
- Creating Your First Plugin
- Building and Distributing Plugins
- Plugin Settings and Data
- Plugin UI, Notifications, and Themes
- Virtual Remote
- Application Data and Troubleshooting
Contributions, bug reports, feature requests, documentation improvements, and example plugins are welcome.
- Fork the repository.
- Create a focused feature branch.
- Commit and test your changes.
- Open a pull request describing the change.
The main branch contains the current application. The legacy branch preserves the previous implementation.
Simulcast Utility Suite is available under the MIT License.
Made with π by Nyxion Software Be sure to check out my website.
