Skip to main content

Tyrtulia TUI

Terminal client for Tyrtulia, the headless forum for small multi-user servers (tildes, pubnixes, club servers). Built with Textual.

  • On the server itself it talks to Tyrtulia through its Unix socket: the operating system tells the forum who you are, so there is nothing to log in to.
  • From anywhere else it logs in with your SSH key (a signed challenge) and keeps the session token in a private file.
  • It only knows GET / and follows the links the forum returns: an action appears in the footer only when the forum offers it to you (reply, edit, pin, hide...).
  • Notifications arrive in real time over Server-Sent Events.

A thread in Tyrtulia TUI

The list of threads

Requirements

  • Python 3.14.
  • OpenSSH client (ssh-keygen), to sign the login challenge when you connect from outside the server.
  • A Tyrtulia 1.x instance.

Installation

With uv:

uv tool install tyrtulia-tui

With pip:

python3.14 -m venv ~/.local/share/tyrtulia-tui
~/.local/share/tyrtulia-tui/bin/pip install tyrtulia-tui
ln -s ~/.local/share/tyrtulia-tui/bin/tyrtulia-tui ~/.local/bin/tyrtulia-tui

Administrators can install it once for every user of the server, for example in /opt/tyrtulia-tui with a link in /usr/local/bin.

Usage

On the server, just run it. It finds the socket in /run/tyrtulia/tyrtulia.sock (or /var/run/tyrtulia/tyrtulia.sock on BSD):

tyrtulia-tui

From another machine, point it to the forum and give your username and SSH key. Your first SSH key is registered from the server itself (profile, k) or by the operator:

tyrtulia-tui --url https://forum.example.org --user alice --key ~/.ssh/id_ed25519

The key can also be the .pub file, to sign with ssh-agent. Without --user, you read as a guest and can log in later with l.

Option Meaning
--socket PATH Unix socket of the server.
--url URL URL of the server, for remote access.
--user NAME Username for the SSH key login.
--key FILE SSH private key (or its .pub with the agent). Defaults to ~/.ssh/id_ed25519, id_ecdsa or id_rsa.
--config FILE Configuration file.

Configuration

Every key is optional; command line options win:

# ~/.config/tyrtulia-tui/config.toml
url = "https://forum.example.org"
username = "alice"
key = "~/.ssh/id_ed25519"
# socket = "/run/tyrtulia/tyrtulia.sock"

Session tokens are kept in ~/.local/state/tyrtulia-tui/tokens.json (mode 0600), and the last post you read in each thread in read.json next to it, to show how many posts are new. Both follow XDG_STATE_HOME.

Keys

Where Key Action
Everywhere q Quit
i Notifications
/ Search (words, "a phrase", OR, NOT, prefix*)
p Your profile and SSH keys
l / o Log in / log out (remote access)
Threads Enter Open
n New thread
w Latest or watching
r Refresh
] / [ Next / previous page
Thread ↑ ↓ (k j) Move between posts
r Reply to the thread
a Answer the selected post
e / d Edit / delete the selected post
s Subscription: watching, normal, muted
t Change the title
f Report the selected post
h, P, C Moderators: hide or unhide, pin, close
Esc Back
Editor Ctrl+S Send
F7 Select all
Esc Cancel
Notifications Enter Open the post
a Mark all as read
Profile e Edit your about
k / x Add an SSH key from a .pub file / delete the selected key

Only the actions the forum allows you appear in the footer.

Development

Everything runs in Docker:

docker compose run --rm dev sh -c 'ruff format src tests && ruff check src tests && mypy && pytest'

The tests drive the client and the interface (Textual's Pilot) against a real Tyrtulia instance running in-process, plus a real tyrtulia serve with Unix users inside the container.

e2e/run.sh runs the end-to-end test: on Debian with systemd, ten people use the real TUI in tmux against one Tyrtulia instance installed from PyPI. Five Unix users go through the socket and five SSH key accounts log in over HTTP; they post, answer, mention, edit, moderate, report and search, and see each other's notifications in real time.

License

Tyrtulia TUI is free software, released under the GNU General Public License v3.0 or later.

Metadata

Release files for tyrtulia-tui 1.0.0

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

Source distribution (sdist)

Source distribution for tyrtulia-tui 1.0.0
File Size Uploaded Provenance Actions
tyrtulia_tui-1.0.0.tar.gz 34.6 kB Without provenance Details for tyrtulia_tui-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for tyrtulia-tui 1.0.0
File Interpreter ABI Platform Actions
tyrtulia_tui-1.0.0-py3-none-any.whl Python 3 none any Details for tyrtulia_tui-1.0.0-py3-none-any.whl

Total release size: 74.3 kB

Release files / tyrtulia_tui-1.0.0.tar.gz

Download URL tyrtulia_tui-1.0.0.tar.gz
Size 34.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4f73e7cd82cfc9236efe5632aaeccff52d3b3eeeb56fe0f00d8fe0f647a6419e
BLAKE2b-256 checksum
How to use checksums
6b9df1d3d328cf7dfc8cf2421acfd3117b940f8cab11f0f4f4f616802a92a358
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / tyrtulia_tui-1.0.0-py3-none-any.whl

Download URL tyrtulia_tui-1.0.0-py3-none-any.whl
Size 39.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f9bf5c9d33417ea0f03d47771ec99b455e31664ac86a3ffafe6c12487cb0eb70
BLAKE2b-256 checksum
How to use checksums
e1963cf834d713e91812ee5e4636a111059bcbf916652b357476eae20aaca83f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.3 {"installer":{"name":"uv","version":"0.13.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for tyrtulia-tui 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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