Skip to content

File format

Here is a complete, working file, small enough to read in one go. Everything below explains a piece of it.

{
  "data_version": 1,
  "updated": "2026-08-09",

  "mode_colors": {
    "cw":      "#0072B2",
    "phone":   "#009E73",
    "digital": "#E69F00",
    "beacon":  "#56B4E9"
  },

  "license_classes": {
    "Full": {
      "80M": [
        {"start": 3500000, "end": 3570000, "mode": "cw"      },
        {"start": 3570000, "end": 3600000, "mode": "digital" },
        {"start": 3600000, "end": 3800000, "mode": "phone"   }
      ],
      "40M": [
        {"start": 7000000, "end": 7040000, "mode": "cw"      },
        {"start": 7040000, "end": 7100000, "mode": "digital" },
        {"start": 7100000, "end": 7200000, "mode": "phone"   }
      ]
    },
    "Foundation": {
      "80M": [
        {"start": 3500000, "end": 3570000, "mode": "cw"    },
        {"start": 3600000, "end": 3700000, "mode": "phone" }
      ],
      "40M": [
        {"start": 7000000, "end": 7040000, "mode": "cw"    },
        {"start": 7100000, "end": 7200000, "mode": "phone" }
      ]
    }
  }
}

data_version and updated are optional. They exist for your own record keeping, so you can tell which revision of your plan you are running.

Modes and colors

The mode_colors block is your list of modes and the color each one gets on the panadapter.

Add as many modes as you like

There is no fixed set and no upper limit. If your band plan separates narrow-band digital from wide-band digital, or DX windows from ordinary CW, give each one its own entry.

The shipped IARU files define around twenty modes each, several deliberately sharing a color so related segments read as one family.

Colors are HTML color codes

Written as #RRGGBB, the same notation used across the web and in virtually every image editor. If you have a band chart image whose colors you want to match, open it in an image editor and use the eyedropper tool to read the code.

The mode name is the label

RimuSDR prints the mode name on the bar in capitals, but only when the segment is wide enough on screen for the text to fit. cw is almost always legible; narrow_band_digital only appears when you are zoomed well in.

Two to twelve characters is a good target. Black or white text is chosen automatically to suit your color.

A starting palette

These are the colors the shipped plans use. They stay distinguishable under the common forms of color vision deficiency, so they are a safe place to begin.

Code Color Typical use
#0072B2 Blue CW
#009E73 Green Phone
#E69F00 Orange Digital
#56B4E9 Sky blue Beacon
#F0E442 Yellow Special or channelized
#D55E00 Vermillion Mixed CW and phone
#CC79A7 Purple Satellite

License classes and bands

Each entry under license_classes is one license class. The names are entirely yours and appear word for word in the License Class drop-down, so write them the way your regulator does: Full, Foundation, Class A, Klasse E.

You need at least one.

Band names

Use the meter designation. The M suffix is optional and case does not matter, so 40M, 40m, and 40 are all understood.

The bands available on a standard HF and 6 m radio are 2200M, 630M, 160M, 80M, 60M, 40M, 30M, 20M, 17M, 15M, 12M, 10M, and 6M.

Frequencies are in hertz

This is the most common mistake

Frequencies are plain whole numbers of hertz, with no commas, decimal points, or units. 14.150 MHz is 14150000. Double-check a few values before you load the file.

Gaps are meaningful

RimuSDR paints only where you have defined a range. Anything you leave out has no bar above it, which is exactly what you want for a segment your class may not use.

In the ARRL file, the General class starts 20 m phone at 14225000 rather than 14150000. That 75 kHz gap is how the Extra-only segment shows itself as unavailable.

Order and overlap

Ranges do not need to be listed in frequency order, though keeping them ascending makes the file much easier to maintain. Where two ranges overlap, the one written later is drawn on top.

Keep the bands consistent

Give every license class the same set of band names, even where the ranges inside them differ. This keeps the Mode Colors table complete for every class.

The one rule that catches everyone

Every mode must exist in both places

Every mode value used in license_classes must also exist as an entry in mode_colors, spelled identically. This is how RimuSDR knows what color to paint a segment.

"mode_colors": {
  "sat": "#CC79A7"
},

"license_classes": {
  "Full": {
    "10M": [
      {"start": 29300000, "end": 29510000, "mode": "sat"}
    ]
  }
}
Spelling must match
The name sat has to be identical in both places. Writing "mode": "satellite" against a "sat" color entry will not connect. Underscores count too.
Capitalization does not
CW in one place and cw in the other still works. Keeping everything lowercase in both places is the habit least likely to trip you up.
A mismatch turns the segment gray
If a mode is used but never defined, that segment is drawn plain gray with no other warning, which is easy to miss on a busy display. A gray segment nearly always means a typo in one of the two places.