Vexillum, usually shortened to VEX, is a new reflector program for amateur digital voice. One copy of it can host D-Star, DMR, M17, NXDN, P25 and Yaesu System Fusion reflectors at the same time, plus its own analog FM linking mode called VAFM. It first appeared in public in September 2026 and is still in beta. These are research notes on what it is, how it works, what is running today, and how it differs from XLX and URF.
At a glance
How solid these notes are
Almost everything here comes from one origin: the project's own documentation at vexdv.io and its live directory at activity.vexdv.io. Two dashboards run by other operators (ON6DP and W0CHP) confirm it is in real use. I found no reviews, forum threads or magazine coverage. The source code site (repo.kc1awv.net) returned errors during research, so the license and release history were not checked. Since 3 Nov 2026 some points have also been checked hands-on on N6JET's own server, VEXJET; those are marked "tested on VEXJET". Voice has not yet been tested on radios. Updated 4 Nov 2026.
A reflector is a server on the internet that hotspots, repeaters and software clients connect to so their users can talk to each other. Most reflector programs serve one mode, or a fixed set of modes with a transcoder in the middle. Vexillum takes a different approach. It is one program that runs many mode instances, and each instance is a complete reflector for one protocol with its own port and settings.
You can run more than one instance of the same mode. The project's own example is a public M17 reflector and a private M17 test reflector side by side, or 16 DMR instances, all from one install. A shared core handles the parts every reflector needs: configuration, logging, a web admin page, user accounts, a callsign allow and block list, metrics, and a read-only public status API.
The important thing to understand early: Vexillum does not transcode. A DMR user and a YSF user on the same server do not hear each other unless the operator runs a separate bridge program between those two instances. That is the opposite of XLX and URF, where cross-mode audio is the main feature.
A vexillum was the square flag carried by a Roman military unit, the banner its soldiers rallied around, and the word is the root of "vexillology", the study of flags. The project shortens it to VEX: its directory is VexDV, its bridge programs are named vex-..., and public servers are named things like VEX000, VEX493 and N6JET's VEX-JET. The author has not said why he chose the name, but a flag that brings people together suits a reflector well.
These are the defaults from the project documentation. Every operator can change them, and the docs say the operator's published details always win.
| Mode | Default port | Login | Rooms | Typical equipment |
|---|---|---|---|---|
| D-Star | 30001 UDP (DExtra) | None | Modules A to Z | D-Star radio through a hotspot or gateway |
| DMR | 62031 UDP | Password (Homebrew style) | Modules A to Z, talk on TG 7 | DMR radio through an MMDVM hotspot or repeater |
| M17 | 17000 UDP | None | Modules A to Z | M17 radio, hotspot or client |
| NXDN | 41400 UDP | None | One talkgroup per instance (default 61000) | NXDN gateway or client |
| P25 | 41000 UDP | None | One shared room | P25 gateway or client |
| YSF | 42000 UDP | None | One shared room | Fusion radio through a hotspot or gateway |
| VAFM (beta) | 43000 UDP and TCP, 43443 TLS and DTLS, WS 80, WSS 443 | Optional shared passphrase | One talker at a time | Software client, USB sound card, AIOC or CM108 radio interface, repeater link |
The server also listens on three private ports that should not be opened to the internet: the admin web page on 8080, the public status API on 8081, and metrics on 9090, all bound to 127.0.0.1 by default.
The project's protocol reference is unusually frank about this, and it matters if you plan to point existing equipment at a VEX server.
A documentation conflict
The user guide says D-Star supports "D-Plus, DExtra, or DCS-style linking". The protocol reference says plainly that only DExtra is implemented and D-Plus and DCS are not. The reference is the more detailed of the two, so these notes go with DExtra only. One hint the other way: on VEXJET (v0.2.0b), the admin database has listen settings for DPlus, DExtra and DCS. Not tested.
A hotspot or repeater logs in to a VEX DMR instance the same way it logs in to a DMR master: repeater ID, a SHA-256 password challenge, then a configuration block. You need the server address, port 62031 and the instance password from the operator.
Inside the instance, traffic is split into 26 modules named A to Z, the same layout as XLX. The default talkgroup scheme is:
| Talkgroup | What it does |
|---|---|
| TG 7 | Talk on the module you are linked to |
| TG 64001 to 64026 | Link to module A to Z (64001 is A, 64002 is B, and so on) |
| TG 64000 | Unlink from the module |
Group voice is only passed on timeslot 2 and only on the configured talk group. The docs warn that other servers may change these numbers. One live server, VEX493, uses TG 9 instead of 7.
Talker alias and GPS frames from the hotspot are accepted and stored with that station's session. The docs do not say whether they are relayed to other listeners.
M17 works like an mrefd reflector: 26 modules, no login, Codec 2 voice, one talker per module at a time. Packet-mode data frames are also relayed. A client can connect listen-only, which suits web listeners and monitors.
D-Star uses DExtra on port 30001 with 26 modules. Real D-Star hardware and other DExtra reflectors can connect with standard DSVT frames. There is also a simpler Vexillum-only control format for lightweight software clients.
These three behave like a single-room reflector. Every connected station on the instance shares one room, and only one person can talk at a time. If an operator wants more rooms, they run more instances on more ports.
VAFM is Vexillum's own protocol for linking analog FM. It is what makes VEX more than a digital-only reflector, and it is the part marked beta.
The docs point out that the TLS and DTLS options encrypt the internet path only. Encryption over the air is still not allowed on amateur bands in most countries.
In practice VAFM fills the same role as AllStarLink or EchoLink for a VEX server: a way to put analog repeaters and simple computer clients in the same room. One small inconsistency: most pages give the TCP default as 43000, but the reference overview lists 43000 and 43001.
Because Vexillum does no transcoding and has no built-in "interlink", every connection to another network or another mode is a small separate program called a bridge. The bridges log in to Vexillum like an ordinary client: as a DMR repeater, a YSF or NXDN hotspot, a DExtra link, or a VAFM client. The operator then marks that session as a bridge on the admin page so it shows correctly on dashboards.
| Bridge | Connects | Audio |
|---|---|---|
| vex-dmr-bridge | A VEX DMR instance to one or more Homebrew DMR networks: BrandMeister, TGIF, FreeDMR, FreeSTAR SystemX, DMR+, another Vexillum or a urfd reflector | Passed through unchanged |
| vex-openbridge-bridge | VEX DMR to BrandMeister over OpenBridge, its server-to-server link | Passed through unchanged |
| vex-xlx-bridge | VEX D-Star to a module on an XLX or urfd reflector | Passed through unchanged |
| vex-dmr-ysf-bridge | VEX DMR to VEX YSF | AMBE frames repacked, no transcoding |
| vex-nxdn-ysf-bridge | VEX NXDN to VEX YSF | AMBE frames repacked, no transcoding |
| vafm-homebrew-bridge | VEX VAFM (analog) to a Homebrew DMR master | Full transcode, Opus to AMBE+2 |
DMR, YSF and NXDN all use the same AMBE+2 voice codec, so these bridges can move the voice bits across without decoding them. The YSF instance acts as the hub: run the DMR to YSF and NXDN to YSF bridges against one YSF instance and all three modes hear each other. Add vex-dmr-bridge to the same DMR instance and outside networks such as BrandMeister or TGIF join the conversation.
What the bridge set does not cover yet: there is no D-Star to DMR, M17 to DMR or P25 bridge, because those need real transcoding between different codecs. The VAFM to DMR bridge is the only one that decodes audio.
It can still be done from outside Vexillum. On VEXJET module A, a DVSwitch converter joins P25 and M17 to DMR: MMDVM_Bridge and Analog_Bridge with the md380-emu software vocoder, G4KLX's P25Gateway for the P25 side and USRP2M17 for M17. All three links connect (tested on VEXJET, 4 Nov 2026); voice has not been tested yet. D-Star is harder, because its older AMBE codec needs a hardware vocoder. VEXJET added it on 5 Nov 2026 with two DVstick 30s on a Beelink mini PC: Analog_Bridge runs next to the sticks, and ircDDBGateway links into VEX's DExtra instance on modules A and B. Two lessons from that build: Analog_Bridge must sit next to the vocoder (over the internet it waits for each voice frame and falls behind), and ircDDBGateway always takes DExtra port 30001 on every address, so it needs its own network if another reflector already uses that port.
Bridge status
The bridges are newer than Vexillum itself. They have no releases, must be built from source with Go 1.25 or newer, and are described as tested on live traffic but with rough edges. The VAFM to DMR bridge needs native codec libraries. Tested on VEXJET: with Vexillum v0.2.0b, the newest bridge code expects a "bridgelink" feature that this version does not have, so older commits from before that change were built instead, and they work.
Operators can choose to publish their server to the VexDV public directory at activity.vexdv.io. Publishing is off by default. This is the directory as read on the evening of 4 Nov 2026, Pacific time:
| Server | Address | Modes published | Stations |
|---|---|---|---|
| VEX493 | Not published | DMR, NXDN, P25, YSF | 69 |
| VexDV Dev Server (VEX000) | vex000.kc1awv.net | All seven | 8 |
| VEX-BEL | vex.on6dp.be | All seven | 6 |
| VEX-JET (N6JET, San Jose CA) | vex.n6jet.com | DMR, M17, NXDN, P25, YSF | 8 |
| R4 enrollment validation | Test entry | None | Offline |
That is 4 servers online, 23 instances and 91 connected stations. By mode: 71 stations on DMR, 8 on YSF, 3 each on M17, NXDN and VAFM, 2 on P25, and 1 on D-Star. Two days earlier, on 2 Nov, there were 3 servers and 76 stations. The first servers appeared in the directory on 25 Sep 2026. VEX-BEL appears to be run by ON6DP in Belgium, judging by its hostname. A further public dashboard, vex.w0chp.radio, belongs to W0CHP but is not listed in the directory.
Vexillum itself does not include a web dashboard. Each server has a read-only public API, and W0CHP has written a separate dashboard, vex-dashboard, which the ON6DP and W0CHP servers both use.
N6JET runs Vexillum as VEXJET, at vex.n6jet.com in San Jose, alongside its XLX, URF and M17 reflectors. It went on the air on 3 Nov 2026 and is listed on DVRef and in the VexDV directory.
| Mode | How to reach it |
|---|---|
| DMR | vex.n6jet.com port 62031, modules A to Z (TG 64001 to 64026), talk on TG 7 |
| M17 | vex.n6jet.com port 17002, modules A to Z |
| YSF | YSF 95114 US-VEXJET |
| NXDN | NXDN 9512 |
| P25 | P25 9512 |
| D-Star | vex.n6jet.com port 30001 (DExtra), modules A to Z |
Its module A is Silicon Valley Multimode via VEX, one room where bridges and a converter join DMR, TGIF talkgroup 95110, YSF, NXDN, P25, M17 and D-Star. It shows what Vexillum can do when an operator adds the missing pieces around it.
More: VEXJET Purpose · How to connect a hotspot · VEXJET live activity
Pi-Star and WPSD download fresh host lists every night. Anything typed straight into those lists is replaced by the next download, so a VEX server that is not in the official lists yet disappears overnight. Both systems have a separate place for your own entries that the nightly update leaves alone. The examples use N6JET's VEXJET; for another VEX server, use its own address, numbers and ports.
Pi-Star keeps your entries in files in the /root folder. Every night it downloads the new lists, then adds these files back in. There is no web page for them, so they are edited over SSH (Pi-Star's dashboard has an SSH Access page under Expert).
rpi-rwsudo nano /root/DMR_Hosts.txtsudo /usr/local/sbin/HostFilesUpdate.sh| Mode | File | Fields |
|---|---|---|
| DMR | /root/DMR_Hosts.txt | name, ID, address, password, port, separated by Tabs, no spaces |
| YSF | /root/YSFHosts.txt | number;name;description;address;port;000; |
| NXDN | /root/NXDNHosts.txt | number, address, port, separated by Tabs |
| P25 | /root/P25Hosts.txt | number, address, port, separated by Tabs |
| M17 | /root/M17Hosts.txt | reflector name, address, port, separated by Tabs |
| D-Star | /root/DExtra_Hosts.txt | reflector name and address, separated by a Tab (read by the D-Star gateway, see below) |
The VEXJET lines, one in each file (the gaps are Tab characters). Copy only the part after the mode name:
VEXJET 0000 vex.n6jet.com passw0rd 6203195114;US-VEXJET;VEXJET;5.161.18.72;42000;000;9512 5.161.18.72 414009512 5.161.18.189 41100M17-VEX 5.161.18.72 17002XRFVEX 5.161.18.72On DMR, talk on TG 7 and pick a module with TG 64001 to 64026.
D-Star works differently. Pi-Star's nightly update does not handle it at all. Instead, ircDDBGateway, the D-Star gateway program, reads a second DExtra_Hosts.txt from its own home folder, /root, every time it starts, alongside the downloaded list. So put the D-Star line in /root/DExtra_Hosts.txt, then restart the gateway or reboot, and link to XRFVEX A (module A) or any module A to Z. N6JET's own D-Star gateway loads VEXJET exactly this way; it has not yet been tried on a Pi-Star hotspot.
WPSD has this built in: Admin, then Advanced, then Hosts File Editors. There is an editor for each kind of list: DMR, XLX, D-Star (CCS, DCS, DExtra and DPlus), YSF, P25, NXDN and APRS. Entries made there are stored apart from the downloaded lists and are not touched by the automatic refresh. Typing into the downloaded lists over SSH does not last; use the editors. WPSD has no M17 editor, as WPSD dropped M17. For D-Star, add VEXJET as a DExtra host: vex.n6jet.com, port 30001.
Pi-Star details are from its own update script and the format notes at the top of its host lists. WPSD details are from the WPSD manual. N6JET is setting up a test hotspot with these entries.
From the operator guide, in short:
vexillum.toml and edit it. The file only holds the runtime name, logging, database, and the admin, public API and metrics listeners. Mode instances are set up afterwards in the web admin page and stored in a SQLite database.VEX_ADMIN_BOOTSTRAP_PASSWORD, start the program, log in as admin and change the password straight away./opt/vexillum.Features worth knowing about:
W0CHP*. It applies to every mode at once and takes effect immediately without a restart, where XLX rereads its files about every 30 seconds./api/public/v1, with built-in Swagger docs, rate limiting and a liveness endpoint for uptime monitors.vexillum publisher verify, a VexDV administrator approves it, and Vexillum then installs a certificate (valid about 90 days and renewed automatically) and starts publishing. Each instance can be published or kept private (tested on VEXJET, 3 to 4 Nov 2026). The docs say client IP addresses, passwords and file paths are never published.The project advises treating early deployments as experimental.
| XLX (xlxd) | URF (urfd) | Vexillum | |
|---|---|---|---|
| Digital modes | D-Star, DMR, YSF | D-Star, DMR, YSF, M17, NXDN, P25 | D-Star (DExtra), DMR, YSF, M17, NXDN, P25 |
| Analog | No | USRP link to AllStar | VAFM, its own Opus protocol (beta) |
| Cross-mode audio | Built in, needs AMBE hardware for D-Star | Built in, tcd transcoder | Not built in. Separate bridges; DMR, YSF and NXDN only, plus analog to DMR |
| Room layout | 26 modules shared by all modes | 26 modules shared by all modes | Separate instances per mode; 26 modules on D-Star, DMR and M17 |
| Several reflectors on one server | No | No | Yes, any number of instances per mode |
| Administration | Text files | Text files | Web admin, user roles, audit log |
| Dashboard | PHP dashboard | PHP dashboard | None built in; JSON API plus third-party vex-dashboard |
| Linking to other reflectors | XLX interlink | URF interlink | Bridges to BrandMeister, TGIF, FreeDMR, XLX and urfd |
| Maturity | Since 2016 | Several years | Beta, public since Sep 2026 |
In short, XLX and URF are built around one room that every mode shares, with a transcoder making that work. Vexillum is built around many separate single-mode reflectors under one roof, easy to manage from a web page, with bridges added where the operator wants modes or networks joined.
Vexillum is written by Steve Miller, KC1AWV, credited on every page as "KC1AWV, Vexillum Developers, et al." KC1AWV has a long record of open amateur radio software on GitHub: gomrefdash (a dashboard for the mrefd M17 reflector), tools for the M17 reflector registry, MMDVM forks, and several projects for the Reticulum mesh network. The code, the bridges and the dashboard are hosted on his own code server at repo.kc1awv.net. The separate vex-dashboard is by W0CHP, who also writes the WPSD hotspot software.
Researched 2 Nov 2026. Origins: one project (documentation and directory) plus two independent operator dashboards.
A noncommercial hobby reference compiled by N6JET, gathered from public sources and shared freely for anyone interested in amateur digital voice.