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)

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.
Which topics is it in?python
Creator
RFnexus
Size
0.8 MB
Stars
117
Age
1mo
Commits · 90 Days