SSRF-Lite GitHub ↗

Open source · Chicago Offline

Radio reference data that people and software can both read.

SSRF-Lite is plain YAML describing who runs a radio system, where it lives, how it transmits, and what it takes to use it. Search the channels, see repeater sites on a map, and download the same files that feed codeplugger.

SSRF-Lite logo: a document with record lines and an antenna radiating signal arcs

Browse channels

Every assignment in the library as one row, sorted by frequency: repeater output, input, mode, tone or color code, callsign, and site. Filters apply to the table and the map together, and the URL updates so a view can be shared.

Freq (MHz) Input (MHz) Mode Tone / CC Name Callsign Location Service Notes Source

Library

One YAML file per system or channel plan, organized by geography and service. Each file has its own page with channels, sites, sources, and download links.

What SSRF-Lite is

A simplified take on the NTIA Standard Spectrum Resource Format: enough structure for software to join and validate, little enough that a club member can edit it in a text editor.

Facts, not preferences

Organizations, sites, stations, RF chains, channel plans, tones, talkgroups, and authorizations. Which channels go into which radio is a separate concern, handled by profiles.

Readable by people

Plain YAML with stable record IDs. Review it in a pull request, correct it in a text editor, and keep local-only data in a private overlay repo with the same layout.

Validated by schema

Pydantic models are the source of truth, published as JSON Schema so editors and CI can check a file without running Python.

Built for provenance

Every file carries its sources and access dates, so it is clear where a record came from and what still needs verification on the air.

Layered by design

Public data here, community data in shared overlays, personal data in private ones. Later roots override earlier records by ID.

Compiled for consumers

The site also publishes a flat codeplug.json feed with the relational data already joined, for apps that just want channels.

Use the data

Grab the compiled feed, or clone the repo and work with the YAML directly.

Fetch the compiled feed

# one flat array of joined channel records
curl -s https://chicago-offline.github.io/ssrf-lite/codeplug.json \
  | jq '.[] | select(.service == "gmrs") | {callsign, rx_mhz, tx_mhz, ctcss}'

Each record carries rx/tx frequency, tone or color code, callsign, coordinates, and the source file. No schema knowledge required.

Build a codeplug

# from a codeplugger checkout next to ssrf-lite
uv run codeplugger-profile my_profile.yml \
  --ssrf-root ../ssrf-lite/ssrf \
  --output-format chirp-csv > output.csv

Profiles pick assignments by ID; SSRF-Lite supplies the facts. See codeplugger.

Validate locally

git clone https://github.com/Chicago-Offline/ssrf-lite
cd ssrf-lite
uv sync
make test          # schema + semantic data lint
make serve-site    # this site at http://localhost:8000

A minimal file

ssrf_lite_version: "0.5.3"
organizations:
  - id: org_example
    name: "Example Radio Club"
stations:
  - id: stn_example_440
    call_sign: "W9XYZ"
    organization_id: org_example
    service: "amateur"
antennas:
  - id: ant_example_440
    station_id: stn_example_440
rf_chains:
  - id: chain_example_440
    station_id: stn_example_440
    antenna_id: ant_example_440
    rx: { freq_mhz: 444.100 }
    tx: { freq_mhz: 449.100, emission: "16K0F3E" }
    mode: { type: "FM", ctcss_tx_hz: 107.2 }
assignments:
  - id: asg_example_440
    rf_chain_id: chain_example_440
    channel_name: "W9XYZ 440"
    usage: "repeater"