Generate and edit Harris XG-100P personality (.PRS) files without Harris RPM software.
WARNING: USE AT YOUR OWN RISK. This software modifies radio personality files. Incorrectly configured personality files may brick your radio or cause it to malfunction. The authors are not responsible for any damage to radios, equipment, or property. Always validate files before loading onto a radio. Keep backups of working personalities. This tool is not affiliated with or endorsed by L3Harris Technologies.
STATUS: In Development. This tool is under active development. While the binary format has been extensively reverse-engineered and tested against known-good RPM files, it has NOT been exhaustively tested on all XG-100P hardware revisions and firmware versions. Test on non-critical equipment first.
IMPORTANT: This tool does NOT load mission plans onto radios. QuickPRS generates and edits .PRS personality files. To actually load a personality onto an XG-100P radio, you still need Harris RPM software (for now). QuickPRS replaces the personality creation and editing workflow, not the radio flashing process.
- 100% binary format decoded (49 section types, 27 option sections, 514+ fields)
- Create PRS files from scratch or INI config files
- Import from RadioReference (SOAP API or paste from website)
- Import from scanner formats (CHIRP, Uniden Sentinel, SDRTrunk)
- 45+ CLI commands for scripting and batch processing
- Full GUI with tree view, inline editing, drag-and-drop, RadioReference import
- Built-in channel templates (MURS, GMRS, FRS, Marine, NOAA, Interop, Public Safety)
- Built-in P25 system database (30 major US systems)
- JSON export/import for human-editable radio configs
- Export to CHIRP CSV, Uniden CSV, SDRTrunk, DSD+, Markdown, INI
- Merge, clone, and compare PRS files
- Radio option editing (GPS, display, audio, bluetooth, buttons, etc.)
- P25 encryption key management and NAC editing
- Fleet batch processing (same config to multiple radios with unique unit IDs)
- Fleet consistency checking across multiple radios
- Zone planning, capacity estimation, and statistics
- Configuration health check with best practice suggestions
- Department-specific profiles (fire, law enforcement, EMS, search & rescue)
- Frequency spectrum map visualization
- Configuration snapshots for change tracking
- File watcher with auto-validation
- Comprehensive validation against XG-100P hardware limits
- File repair and data salvage for damaged PRS files
- Lossless binary roundtrip (parse and rewrite produces byte-identical output)
- 4,000+ automated tests
quickprs build patrol.ini -o radio.PRS
quickprs set-option radio.PRS gps.gpsMode ON
quickprs validate radio.PRSquickprs create radio.PRS --name "PATROL"
quickprs inject radio.PRS p25 --name PSERN --sysid 892 --freqs-csv freqs.csv --tgs-csv tgs.csv
quickprs inject radio.PRS conv --template murs
quickprs inject radio.PRS conv --template noaa
quickprs inject radio.PRS conv --template interop
quickprs validate radio.PRSpython -m quickprspip install -r requirements.txt
python -m quickprs # Launch GUI
python -m quickprs --help # CLI helpOr use the standalone EXE from Releases (no Python required).
sv-ttk— Modern theme for the GUIdarkdetect— Auto dark mode detectionwindnd— Drag-and-drop file support (Windows)zeep— RadioReference SOAP API access (requires premium subscription)
| Command | Description |
|---|---|
create |
Create a new blank PRS file |
build |
Build a complete PRS from an INI config file |
wizard |
Interactive guided personality setup |
fleet |
Batch-build for a fleet of radios with unique unit IDs |
inject p25 |
Add a P25 trunked system with frequencies and talkgroups |
inject conv |
Add conventional channels (from CSV or built-in template) |
inject talkgroups |
Add talkgroups to an existing group set |
clone |
Clone a specific system from one PRS file to another |
clone-personality |
Create a modified copy of a personality |
merge |
Merge systems and channels from one PRS into another |
remove |
Remove a system, trunk set, group set, or conv set |
edit |
Edit personality metadata or rename sets |
rename |
Batch rename channels/talkgroups with regex patterns |
sort |
Sort channels or talkgroups by name, frequency, or ID |
set-option |
Get/set radio options (GPS, audio, bluetooth, display, etc.) |
encrypt |
Set/clear P25 encryption on talkgroups |
set-nac |
Set Network Access Code on P25 conv channels |
bulk-edit |
Batch-modify talkgroup or channel settings |
renumber |
Auto-number channels sequentially |
auto-name |
Auto-generate talkgroup short names from long names |
auto-setup |
One-click P25 system setup from RadioReference |
import-rr |
Import a P25 system from RadioReference API |
import-paste |
Import from pasted RadioReference text |
import-scanner |
Import from CHIRP, Uniden, or SDRTrunk CSV |
import-json |
Create a PRS from a JSON file |
systems |
Browse/search/add from built-in P25 system database |
template-csv |
Generate blank CSV/INI templates for data entry |
validate |
Validate PRS file against XG-100P hardware limits |
capacity |
Show memory usage and remaining capacity |
repair |
Fix corrupted PRS files or salvage data |
info |
Print personality summary (--detail for full breakdown) |
stats |
Show channel statistics and frequency band analysis |
compare |
Compare two PRS files (--detail for semantic diff) |
diff-report |
Generate personality change report between two files |
export |
Export to CHIRP, Uniden, SDRTrunk, DSD+, or Markdown format |
export-csv |
Export all data to CSV files |
export-json |
Export PRS to structured JSON |
report |
Generate full HTML report of radio configuration |
card |
Generate printable summary reference card |
zones |
Generate and export zone plans |
freq-tools |
Frequency reference (repeater offsets, CTCSS tones, channel lookup) |
list |
Quick-list systems, talkgroups, channels, frequencies, or options |
dump |
Dump raw section structure and hex data |
diff-options |
Compare radio options between two PRS files |
iden-templates |
List standard IDEN frequency templates |
cleanup |
Find and fix duplicates and unused sets |
search |
Search across PRS files for frequencies, talkgroups, or names |
backup |
Create, list, or restore timestamped backups |
health |
Configuration health check with best practice suggestions |
suggest |
Smart improvement suggestions with ready-to-run commands |
freq-map |
Frequency spectrum map visualization |
fleet-check |
Compare configs across multiple radios for consistency |
snapshot |
Save/compare configuration snapshots for change tracking |
profiles |
Department-specific profiles (fire, law, EMS, SAR) |
export-config |
Export PRS to editable INI config file |
watch |
File watcher with auto-validation on change |
cheat-sheet |
Quick reference of common CLI workflows |
INI-style config files let you define an entire radio personality in one place:
[personality]
name = PATROL.PRS
author = Dispatch
[system.PSERN]
type = p25_trunked
long_name = PSERN SEATTLE
system_id = 892
wacn = 781824
[system.PSERN.frequencies]
851.0125,806.0125
851.5125,806.5125
852.0125,807.0125
[system.PSERN.talkgroups]
1000,PD DISP,Police Dispatch
1001,PD TAC1,Police Tactical 1
2000,FD DISP,Fire Dispatch
[channels.MURS]
template = murs
[channels.NOAA]
template = noaa
[channels.INTEROP]
template = interop
[channels.LOCAL]
; short_name, tx_freq, rx_freq, tx_tone, rx_tone, long_name
RPT IN,147.000,147.600,100.0,100.0,Repeater Input
RPT OUT,147.600,147.600,,,Repeater Output
SIMPLEX,146.520,146.520,,,2m Calling
[options]
gps.gpsMode = ON
bluetooth.btMode = OFF
misc.password = 1234Build with: quickprs build patrol.ini -o patrol.PRS
| Template | Channels | Description |
|---|---|---|
murs |
5 | Multi-Use Radio Service (151-154 MHz) |
gmrs |
22 | General Mobile Radio Service (462-467 MHz) |
frs |
22 | Family Radio Service (462-467 MHz) |
marine |
15 | Marine VHF (156-157 MHz) |
noaa / weather |
7 | NOAA Weather Radio (162 MHz) |
interop |
20 | National Interoperability (NPSPAC) |
public_safety |
10 | Public Safety simplex frequencies |
Usage: quickprs inject file.PRS conv --template murs
python -m pytest tests/ -qNote: Test PRS data files are not included in this repository. Tests that require .PRS files will skip gracefully if the test data directory is empty.
- This software is provided AS-IS with NO WARRANTY of any kind
- Incorrectly configured personality files may damage or disable your radio
- Always test on non-critical equipment before deploying to field radios
- Always keep backups of known-working personality files
- This tool is an independent project and is NOT affiliated with, endorsed by, or supported by L3Harris Technologies, Harris Corporation, or any radio manufacturer
- XG-100P, RPM, and related trademarks belong to their respective owners
- Users are responsible for ensuring their radio configurations comply with all applicable FCC regulations and local laws
- The P25 system database contains publicly available information from FCC records
MIT