Skip to content

Channels, agencies and codeplugs

Owners and admins configure channels under Channels, the outfits they belong to under Departments (agencies), and the channel plans that program a radio under Radio programming (codeplugs).

Starting from nothing? Press Build it for me

Build it for me, on the Radio programming screen, is the fast path. Tick the dispatch centers and channel banks you actually run, rename them in place, and PulseRadio builds the channels, channel groups, departments, radio layouts and permission rules in one step. It shows you every zone it is about to create before it writes anything, nothing is created until you press the button at the bottom of it, and everything it makes is ordinary configuration you can rename, reorder or delete afterwards. See The setup wizard.

Read this first if you are designing a channel plan

How a radio system is laid out is the reasoning behind everything the wizard builds: why every zone starts with your own main, why dispatch centers are counties rather than departments, and what the naming conventions are for. It is the fastest way to end up with a system people use.

Channel types name behavior, not names

The type is what a channel does on the air, not what it is called. A resource named "Car to Car" can be any of these, and nothing but this field tells them apart.

Type What it is
Trunked talkgroup A talkgroup on a trunked system. The system assigns a channel from a pool at key-up, so the talkgroup is a logical identity rather than a frequency, which is why this is the only type with a decimal talkgroup ID. Most modern county and statewide systems.
Conventional repeater One dedicated frequency pair through a repeater. Full coverage and console-reachable like a talkgroup, but it IS a frequency. Older agencies, fireground and most interop channels.
Direct / talkaround Radio to radio, no infrastructure. Line of sight and range-limited. A genuine car-to-car. A console has no path to it at all; see below.
Monitor only Listened to, never transmitted on by anybody. A neighbouring agency, a weather channel, a scanner position. Receive-only by construction, so no permission can turn it into a transmit channel.

The example that makes this matter

A real county's "CAR TO CAR" can be a dispatched trunked talkgroup, while every other car-to-car on the same system is true simplex. Same name, opposite behavior. Never infer the type from the name.

Who carries it

Direct channels never reach the dispatch board

A direct channel is two radios talking to each other. It does not go through the system, so there is no repeater and no console port for a dispatcher to sit on. PulseRadio enforces that: console operators do not carry direct channels, and a direct channel cannot be patched to anything.

This follows the channel's type, never its name. A trunked talkgroup called "CAR TO CAR" stays on the dispatch board and stays patchable, exactly as it should. If your car-to-car channels are showing up on the console, check that they are typed Direct / talkaround rather than Trunked talkgroup.

As with dispatch monitoring below, an explicit permission for a named person or role still wins, so a monitor position keeps working.

  • Dispatch monitored: does the dispatch center carry this channel at all? Turn it off and console operators cannot hear or key it, so field units genuinely have a channel dispatch is not on. It revokes the implicit grant only: an explicit permission for a named person or role still wins, which is how one monitor position keeps working.
  • Dispatch only: only console operators may transmit.
  • Restricted: the channel is carried in its own room and is unhearable without a grant. This is the real enforcement; the encryption label below is only what the padlock says.
  • TX locked: strict one-at-a-time on this channel, whatever the community's arbitration setting.

Categories

Categories (the Groups panel at the top of Channels) group the cards on the dispatch board. Named once, reused, ordered and colored. A channel in no category lands under "Unfiled" rather than vanishing.

Filing a channel: drag it onto a group. Either its row in the channel list below, or its chip inside the Groups panel; the group under the pointer lights up. Or pick the group from the list on the chip, which is there for keyboard and for phones and tablets where dragging is not available, and does exactly the same thing.

Dropping a channel on the dashed Unfiled box takes it out of every group, and every row in the channel list names the group it is in.

Groups are what a radio plan carries

A radio plan can either use these groups as its zones (the default, and what most communities want) or build its own zones by hand. Following the groups means filing a new channel into Fire puts it on every radio and every dispatch desk that carries Fire, with nothing to re-open and nothing to keep in step.

Build zones by hand only when a zone genuinely has to mix channels from two groups, or needs its own order, scan list and starting channel. That is a real thing to want on a radio; it is simply not the common case, and doing it means filing the same channels twice.

How a channel is said out loud

Radios announce the channel when you change channel or zone, the same way a real APX does, so you can change channel without looking at the radio.

The zone name is spoken on power-up only: switch the radio on and it says the zone and then the channel, because you have just picked it up and have no idea where it was left. After that, changing zone announces the channel you land on and nothing else.

PulseRadio works out the pronunciation from the channel name. It knows that EMS/FIRE is read "E M S Fire", that TAC 1 is "Tack One", that SO CH. 3 is "S O Channel Three", and that SWAT is a word while BCSO is spelled out.

It will not always get it right, so every channel and every category has a Spoken as box. Leave it blank and PulseRadio decides; type something and that is exactly what the radio says. The editor shows you what it will say either way, so you can check without going in game.

Underneath the box is the state of the audio:

Ready Recorded and in use. Play lets you hear it.
Rendering… Being recorded now. It usually takes a second or two.
Failed Could not be recorded.

While a channel is anything other than Ready, radios still announce it using the browser's own voice. It sounds less like a radio and it varies between machines, but nothing goes silent, and it switches to the real recording on its own once that is ready.

Changing a channel's name or its Spoken as re-records it. Nothing else has to be done.

Talkgroup IDs and encryption labels

A talkgroup ID is the decimal a radio displays, e.g. 1401. Trunked channels only; a conventional channel is a frequency and a simplex channel is neither.

Encryption algorithm and key ID are display only: they change what the padlock on the card says and nothing else. Restricted is what actually keeps people out, which is why the fields only appear once it is on. Labelling an open channel as encrypted would be worse than leaving it blank.

Channel marker

A marker is a short tone on a quiet channel, proving it is still alive. Set the seconds of silence before it fires; leave it blank for none.

Worth setting on the quiet channels somebody is relying on, and worth leaving off everywhere else. A marker on a channel that talks all day is a beep nobody needed. Silence is measured from the last transmission, so a busy channel never marks.

Permissions

Grants are additive and can name a user, a role, a department or a rank, each with receive and transmit separately.

The default is asymmetric on purpose:

  • an open channel with no permission rows is usable by every member; a community that has not configured permissions yet still has a working radio;
  • a restricted channel with no permission rows is usable by nobody. A misconfiguration must fail closed rather than hand out a secure talkgroup.

Agencies

An agency is the outfit somebody works for: a police department, a fire department, a dispatch center. It is PulseRadio's own record, so a community that has never opened PulseCAD has them too.

Each agency carries a name, a short name for the radio's screen (initials of the name if you leave it blank), a type, and a color. The type sets the default color; override it per agency if you want.

Being in an agency does exactly one thing: it decides which codeplug programs your radio. It is not a permission. Channel permissions still decide what a member may hear and say.

Radio ID blocks

Real systems block unit IDs by outfit: the sheriff in the 1000s, fire in the 2000s, EMS in the 3000s. A dispatcher reading 2107 off the screen knows it is a fire unit before anybody speaks.

Radio IDs start at on an agency is the bottom of its block, and the block runs to the end of that thousand: 2001 means this department's people are given 2001, 2002 and so on up to 2999. A new agency is given a block to suit its type automatically (police 1001, fire 2001, EMS 3001, and the next free thousand when one is already claimed), so a community that never opens this field still gets realistic numbers.

  • Leave it blank and this department has no block: its people draw from the community-wide run starting at 1001, which is what every agency did before blocks existed.
  • Departments created before August 2026 have no block until somebody sets one. Nothing changed under them on purpose: an existing community's numbering does not move because a feature shipped.
  • Changing a block never renumbers anybody. It decides the next number handed out. Existing IDs stay as they are, so the comms log keeps saying who was actually talking. Move one by hand on the People screen if you need it moved.

Individual numbers, and who may change their own, are covered under Radio IDs.

Rostering an agency

Open an agency and tick the members who belong to it, then Save roster. The list is saved as a whole set, so the last person to save wins, which is deliberate, and visible, rather than two admins each applying half a change.

Saving reprograms radios already in the world, so nobody has to rejoin to get their zones.

Rostering is what makes an agency codeplug apply to anyone

A codeplug assigned to an agency matches people through the roster. The setup wizard builds the agencies and their codeplugs but cannot know who belongs to which, so it rosters nobody, and until you do, every one of those plans matches no one and everybody is on default programming: all their channels in one zone per category, instead of their department's zones.

Nothing looks broken when this happens. The channels, the codeplugs and the zones are all correct on screen; they are simply not reaching anybody. The counter at the top of the Codeplugs screen is what tells you: if it says everyone is on default programming, this is why.

Mapping an agency to a PulseCAD department

If your community is linked to PulseCAD, each agency can be mapped to one CAD department. Membership then arrives on its own: anybody CAD says is in that department is in the agency, without being rostered by hand.

Those members are not shown in the roster list and cannot be removed there; unticking one would appear to work and then revert at their next sign-on. Change it in PulseCAD, or clear the mapping.

One department maps to one agency. If the department is later deleted in PulseCAD, the agency says so and falls back to its hand-rostered members rather than breaking.

Standalone communities see none of this

The PulseCAD mapping control only appears when your community is actually linked. There is no empty dropdown to puzzle over.

Codeplugs

A codeplug is the real-radio concept: a named channel plan, assigned to everyone, an agency, a role or a person. Joining that agency programs a member's radio from it.

The screen is Radio programming, and on it the object is called a radio layout rather than a codeplug. Same thing: the plain-English name leads and the radio word follows, exactly as Departments (agencies) and Dispatch desks (positions) do. This page uses codeplug because that is the word you came looking for.

A plan carries either the channel groups you built on the Channels screen (the default) or zones you build by hand. See Groups are what a radio plan carries.

A codeplug decides layout, not access. It can list a channel the holder has no grant for, and that channel will simply be dropped; a plan is not a way to hand somebody a restricted talkgroup.

Preview, on the right of every layout in the list, drops the radio under that row: which zone, what it comes up on, what else is in it, with arrows to step the zone knob. It does not open the editor, so looking at a layout never risks changing one.

The same display sits inside the editor as What the radio shows, where it follows the boxes you tick as you tick them. Either way it draws the zones as the radio will carry them: which zone, what it comes up on, what else is in it and what it scans. It is the layout itself, before anybody's permissions are applied.

What a codeplug is assigned to

Assign to Matches
Everyone here Every member of the community, whatever department or role they are in.
Agency Everybody in that agency, whether rostered by hand or arriving through the PulseCAD mapping. This is the one to use when departments carry different radios.
Role Everybody with that community role.
Person One named member.
PulseCAD department / rank (legacy) Addresses a CAD record directly. Only offered to a linked community, and only worth keeping for plans written before agencies existed; an agency mapped to the same department does the same job and can also be rostered by hand.

When more than one matches, the most specific wins: a person beats a rank, which beats an agency, which beats a raw CAD department, which beats a role, which beats everyone here.

Everyone here is a floor, not a takeover

It sits at the bottom of that list on purpose. A community-wide plan programs the people no other plan names (exactly the people who would otherwise be on default programming) and never displaces the department plans you have already built.

It is also the honest way to say "everybody gets the same radio". Role → Member looks like it means that and does not: your dispatchers, your admins and you are not members, so they would all miss it.

Somebody in two agencies

Being on two rosters at once is normal (a volunteer is on the fire roster and the sheriff's roster all year), so two agency codeplugs can match the same person, and most specific wins cannot separate them: they are the same kind of subject.

What separates them is the agency that member is working today, which they set themselves. See Working as: they change it on the in-game radio itself, not on this screen and not on the website.

A member who has never chosen still gets a stable radio: the same one of their codeplugs every time, picked by name order. Stable, but arbitrary, which is why choosing is worth doing.

If you delete an agency, codeplugs assigned to it are not deleted with it. They show as assigned to a deleted agency and match nobody, so you can re-target them. Deleting them for you would silently reprogram everybody who was in that agency with nothing left to explain why.

Default programming, and the counter that admits to it

A member no codeplug matches still gets a working radio: every channel their permissions allow, arranged one zone per channel category, with an empty scan list. That is a fallback, not a plan somebody built.

So the screen says so, at the top: "27 of 29 people have no programming of their own", with a Which people? disclosure that names up to twenty-four of them. If your community uses the legacy PulseCAD department or rank subjects, that count can read high (those are not resolved member by member) and the screen tells you when that applies.

See what one person actually gets

Several layouts can match one person, permissions then narrow what the winner granted, and neither of those is visible by reading the list. What does one person's radio look like?, at the bottom of Radio programming, answers it directly: pick anybody and it shows which layout they get (or that none covers them and they are on the default), then draws the radio they come up with, zone by zone.

It is worked out by the same code the radio itself runs, so it is the real answer rather than a summary of what you wrote. Looking changes nothing.

The setup wizard

On the Radio programming screen, Build it for me builds a working radio system: tick the agencies your server runs and it creates the departments, the channels, the channel groups, one radio layout per department and the permission rules to match. Nothing is created until you press the button at the bottom of it, and anything you already have under the same name is left exactly as it is.

It sits below the layouts, behind that button, and does not open by itself here: the screen's own subject is your radio layouts. A brand-new community meets the same wizard on the hub's Set up your radio screen, which is the guided path from an empty community to people talking. The reasoning behind what it builds is in What the setup wizard builds.

It is not a preset you accept. It is a set of modules you pick from, because no two servers run the same agencies and a template that is 80% right leaves you renaming thirty channels by hand.

Module Contributes
Dispatch center: Blaine County, Los Santos Metro, State Patrol A law main, a car-to-car, a regional car-to-car where it has one, an agency and a codeplug.
Channel bank: SA Tacs, LTAC, Pools, Fire & EMS, statewide interop A numbered family of channels, which becomes a zone in every codeplug. Fire & EMS also builds a fire department per county: an agency, an encrypted fire car-to-car of its own, and a fire codeplug that mirrors a law one. See the fire department.

Each center's name, prefix, agency and short name are editable in the wizard, before anything is written, and the rename is real: calling Blaine "Sandy Shores" with prefix SS regenerates SSLAW1, SSC2C and SSFIRE1 together, and renames the Sandy Shores Fire Department and its channels with them.

It prints the whole layout (every zone of every codeplug, in the order the knobs turn, with scanned channels marked) before it writes.

Why zone 1 holds everybody's dispatch channel

The instinct is a zone per agency: a POLICE zone, a FIRE zone. Real codeplugs are not built that way, because a zone knob is turned with a thumb while driving and the channel you need in an emergency must not be two clicks away. So every zone starts with the holder's own main and car-to-car, then the other centers' mains, then what the zone is for, and zone 1, DAY TO DAY, is the one a unit lives in all shift.

This is also why radio zones are independent of the console's categories: the console groups channels by who owns them, a radio groups them by when you reach for one. The full reasoning is in How a radio system is laid out.

Applying is all-or-nothing, and it skips anything already named the same rather than duplicating it, so re-running it later to add a bank you left out is safe. It reports what it actually created, which may be less than the preview if some of it was already there.

Which builds you see depends on your plan

The free plan offers the starter builds: the three dispatch centers, and a small version of each shared channel set: three tactical channels rather than ten, two law tactical rather than nine, a fire department with its main and one EMS channel. They are sized to fit inside the free channel limit, so a county with a fire service, law tactical and interop is a complete radio system on the free plan.

Each starter says what its full version adds, and a starter is a prefix of it: SATAC1 to SATAC3 are the same three channels the full set starts with. So moving to Pro and running the wizard again adds SATAC4 to SATAC10 beside them rather than a second set. The full-size sets and the optional agency packs are on Pro and are not listed on the free plan.

Your plan's channel limit applies here

The summary shows a running count, "17 of 10 channels", against the channel limit on your plan, and turns red once a selection would go over it. Over the limit the Create all of this button is disabled and the panel says by how much: nothing is created, and there is no half-built system to unpick. Deselect some of it, or change your plan on Plan & ownership.

Because a re-run skips what already exists, the count is what the selection would add, not what it contains. A community already at its limit can still re-run the wizard; it simply creates nothing.

Encrypted channels come with their permission grants, because a restricted channel with no grants is usable by nobody. Those grants are deliberately wide (every role that can use the radio), so narrow them before you launch if you run scanner or civilian characters.

Tones

The tone board ships seeded: alert tones, two- and three-beep, a channel marker, SOS, evacuation, and nine fire/EMS station tones. Owners can rename, reorder, upload their own, or reset to the shipped set.

Recording

Recording and transcription are on by default for new communities, with 30-day retention, and can be turned off by an owner on History → Recordings.

The recorder writes one audio file per push-to-talk and transcribes it on our own servers; nothing is sent to a third party. A channel marked recording excluded is never captured, which is the escape hatch for a channel that should not be logged.

Car-to-car channels are never recorded

A direct / talkaround channel is radio to radio and never passes through the system, so there is nothing for the system to capture. This is not a setting: the exclusion is forced on for those channels and cannot be switched off. The comms log still records that a transmission happened.

Recording is separate from the comms log, which is always written for every community whether recording is on or not: one row per transmission with the channel, who, when and how long, but no audio. That is what makes a net auditable without keeping anybody's voice.

Finding and playing recordings

History has three tabs. On the air is the comms log: every key-up, recorded or not. Recordings is the same list narrowed to the transmissions that have audio, which is where to go when you want to hear something rather than to work out what happened. Changes made here is the audit log.

Both lists filter by channel and search transcripts, and page back through older traffic with Older and Newer. Each recording has a play button and a download button. You need the manage channels permission to open either, and playback separately re-checks that you are allowed on that channel; being able to read the log does not let you play back a channel you cannot hear.