partyline README

The project's README from github.com/RFnexus/partyline. As one markdown file: README.md.

partyline

partyline

A group voice application for Reticulum, built on LXST, inspired by Mumble

Screenshot from 2026-09-04 07-05-40

Features

Installation

Requires Python 3.11 or newer

pip install partyline

For a system wide push to talk key, add the optional extra:

pip install "partyline[hotkeys]"

The graphical client uses Tk, which pip cannot install. On most OS/Distros it may already be installed by your system. If not:

On Debian or Ubuntu run sudo apt install python3-tk, on Fedora sudo dnf install python3-tkinter.

Installing from source

Requires Python 3.11 or newer, Reticulum, and LXST

git clone https://github.com/RFnexus/partyline
cd partyline
pip install .

Or install via rngit with:

git clone rns://4cf8a0651c4d73cacd0f93ac1d95e80a/public/partyline

For a system wide push to talk key, install the optional extra with:

pip install ".[hotkeys]"

This installs three commands: partyline, partyline-server and partyline-client.

Running

Start the GUI client:

partyline

Connect opens the server browser. Add a server by it's hash or use the server browser to find discovered servers from announces. Double click a room to join it. Settings has the audio devices, transmit mode, push to talk key, and UI appearance options Screenshot from 2026-09-04 07-06-15

Terminal client

partyline-client HASH --name Bob --room Lobby

Commands are: /join, /say, /poke, /who, /mute, /deaf

Type /ptt to toggle push to talk

Or as an operator: /kick, /ban, /smute, /op and /move

Server

Start a server:

partyline-server --name "My server" --profile opus-high

The server prints its destination hash for clients and with dial in enabled the number rnphone users call if configured for rooms. For rooms, access lists, operators, a server password and dial in, copy server_example.json and start with:

partyline-server --config server.json

Available --profile codecs for rooms:

See server_example.json for a full list of options. opus-high-med-low and the Codec2 modes are meant for voice, and music-high-med-low is meant for streaming music or broadcasting to a room. As a rule, use the highest bitrate your link can carry

Install as a systemd unit

To install as a systemd unit find the server command with which partyline-server then create /etc/systemd/system/partyline.service:

[Unit]
Description=Partyline voice server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=partyline
ExecStart=/usr/local/bin/partyline-server --config /home/partyline/server.json
Restart=on-failure

[Install]
WantedBy=multi-user.target

Then:

sudo systemctl daemon-reload
sudo systemctl enable --now partyline

Music/Broadcasting Rooms & Bots

Server operators can also configure broadcast-only rooms for high quality music and audio using LXST's Opus CELT profiles. The options are music-high, music-med, and music-low. Music rooms are a special type of room where only the listed identities can send audio. Add their identity hash, seperated by commas, in music

{"name": "Broadcast", "profile": "music-med", "music": ["0123456789abcdef0123456789abcdef"], "description": "Music/broadcast room. Only listed identities may talk. Uses LXSTs Opus CELT profile"}
Screenshot from 2026-09-05 17-07-35

An example Music Bot can be found under bots/music_bot.py. When Partyline is installed with pip, run it with python3 -m partyline.bots.music_bot

PTT, or slow-mode rooms, are rooms designed to work over slower links like LoRa, bare copper wire bitbashing, and packet radio. Anything with more than a steady ~3.5 kbps throughput can use a PTT room. They can co-exist with regular rooms in a Partyline server, allowing both fast and slow clients to communicate over voice.

Unlike regular rooms there is a bit of latency. PTT rooms pack outgoing audio to fill the link's MTU, sending fewer, fuller packets instead of one frame per packet, and give every listener a larger receive jitter buffer to smooth out the bursty arrival you get over radio mediums like LoRa.

Mark any room push to talk with "ptt": true. Optionally set "ptt_jitter_ms" to change the buffer depth. It's recommended to use PTT rooms with the codec2 profiles.

{"name": "LoRa 1200", "profile": "c2-1200", "ptt": true, "description": "Slow-link push to talk"}
{"name": "Packet Radio Net 700",  "profile": "c2-700",  "ptt": true, "ptt_jitter_ms": 9000}

LLM Disclosure Notice

Kimi K3 (https://www.kimi.com/en) third party hosted API was used for the following tasks:

UI Translation

The .po files are located in partyline/locale/

To update a translation, change the msgstr line under its English msgid

To add a language, copy partyline.pot to a new .po file and add it to LANGUAGES in partyline/i18n.py.

Run python partyline/locale/compile.py, then open a pull request with your changes or submit it to the LXMF address:

Credits

partyline (RFnexus/partyline)

voice-chat
Searching Database…

What is this?Partyline is an encrypted group voice application for the Reticulum network, built on the LXST audio stack and inspired by Mumble. You host a lightweight server, create rooms, and join them with a GUI or terminal client over any Reticulum transport.
Is this a desktop app, a server, or both?Both: 'partyline' is the GUI client and 'partyline-client' the terminal client you run on your machine, while 'partyline-server' is the server you self-host to create rooms others connect to.
How do I get it running?Run pip install partyline (needs Python 3.11+), then launch 'partyline' for the GUI client, 'partyline-client HASH --name Bob --room Lobby' for the terminal client, or 'partyline-server --name "My server" --profile opus-high' to spin up a server.
Do I need anything besides Python to run the GUI?You need Python 3.11+, the Reticulum and LXST stack, and Tk for the GUI client since pip cannot install Tk itself — on Debian/Ubuntu use 'apt install python3-tk', on Fedora 'dnf install python3-tkinter'. A system-wide push-to-talk key needs the optional [hotkeys] extra.
What's the catch with slow or radio links?Over very slow links (LoRa, packet radio, bare copper), you need special PTT/slow-mode rooms using Codec2 down to 700bps; these add some extra latency because audio is packed into fewer, fuller packets with bigger jitter buffers.
Is my voice encrypted when I talk over Partyline?Yes, voice and audio are encrypted end-to-end for realtime group voice over any Reticulum transport, as long as the link carries more than 6 kbps.
What is dial-in and which clients support it?When a server enables dial-in, phone-like LXST clients such as rnphone, Sideband, and MeshChatX can call the server and land directly in a configured room.
Can rooms be used for music streaming instead of voice?Yes, servers can configure broadcast-only music rooms using high-quality Opus profiles (14-56 kbps) where only identities on an allow-list can transmit, and an example music bot script is included under bots/musicbot.py.
How is access to a room controlled?Each room can be open, restricted to identified users, limited to an allow-list of identity hashes, or password-protected, and servers themselves can also require a password or allow-list.
Is the UI available in languages other than English?Yes, the client uses gettext-based i18n and already ships Esperanto, Spanish, Dutch, and Russian translations, with more languages addable via .po files.
Creator
RFnexus
Size
0.8 MB
Stars
117
Age
1mo
Commits · 90 Days