Skip to main content

partyline

partyline

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

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

Features

  • Encrypted, realtime group voice and audio over any Reticulum transport capable of >6 kilobits per second
  • An easy to host lightweight server and protocol. Spin up a Partyline server in under 30 seconds.
  • Per room access and channel control. open, identified users only, allow lists of identity hashes, or a password. Servers can also require a password or an allow list
  • Dial-in: rnphone and other LXST clients such as Sideband and MeshChatX can call the server and land in a room too, when enabled
  • Rooms each with its own LXST codec configurable by the server. Opus for fast links, Codec2 down to 700 bps for slow ones.
  • GUI and terminal client with multiple language support

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:

  • opus-high - Opus voice, 16 kbps
  • opus-med - Opus voice, 8 kbps
  • opus-low - Opus voice, 6 kbps
  • c2-3200 - Codec2, 3200 bps
  • c2-2400 - Codec2, 2400 bps
  • c2-1200 - Codec2, 1200 bps
  • c2-700 - Codec2, 700 bps
  • music-low - Opus music, 14 kbps
  • music-med - Opus music, 28 kbps
  • music-high - Opus music, 56 kbps

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:

  • I18N localization and UI gettext() implementation
  • Translation of UI elements and of eo, es, nl, and ru PO files
  • Misc debugging and creation of rnsconfig.py RNS helper utilities

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

Metadata

Release files for partyline 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for partyline 1.0.5
File Size Uploaded
partyline-1.0.5.tar.gz 313.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for partyline 1.0.5
File Interpreter ABI Platform
partyline-1.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 655.1 kB

Release files / partyline-1.0.5.tar.gz

Download URL partyline-1.0.5.tar.gz
Size 313.0 kB
Tags Source
SHA-256 checksum
How to use checksums
11a4825d77841696ab7f0f30e9d316e96ab60d7e982ca37d516ba2f4369481dc
BLAKE2b-256 checksum
How to use checksums
d183b2c27b927b0485815a97986884a59fd5a9c47f539ec133be18ae77b706e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / partyline-1.0.5-py3-none-any.whl

Download URL partyline-1.0.5-py3-none-any.whl
Size 342.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5eb97e4de369cea97582d17fa69312bf5c3f24fc52bc35e2dea856d171bc9841
BLAKE2b-256 checksum
How to use checksums
5abf4ed58edb27dd5e076f8dfc5e8de194c97ab7562cfbfde66feab50ad03bf7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

1.0.5 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page