Closed Beta · Report Issues

Bringing the warmth of PTT
back to life on modern desktops

An instant messaging app built for PTT (Taiwan's largest BBS).
Transforming PTT into a seamless chat experience.

uPtt Login Screen

Where Tradition Meets Innovation

No complex Telnet keyboard commands needed — chat on PTT as naturally as breathing.

Mail to Conversations

Automatically transforms PTT internal mail into intuitive conversations — no more fragmented communication. Supports quote-reply to keep conversation context clear.

Contact Management

Pin important conversations, drag-and-drop reordering, block or hide contacts. Right-click menu provides multi-level operations.

Waterball Integration

PTT's instant waterball messages are also captured and displayed. Built-in batch deduplication ensures no duplicates or missed messages.

How It Works

uPtt connects directly to PTT's official servers, using internal mail as the message transport layer — no third-party relay needed.

Warning: Please do not manually delete mailbox items while using uPtt to avoid accidental deletions.
1

Send Message

Messages you type in uPtt are formatted and sent to PTT servers as internal mail via PyPtt, while simultaneously saved to the local database.

2

Background Polling

A worker thread polls internal mail every 5 seconds, identifying and parsing uPtt-format messages. Built-in timestamp synchronization ensures consistent ordering.

3

Real-time Display

Parsed messages are saved to the SQLite database and the UI thread is notified via Qt Signals to update in real time, displaying familiar chat bubbles.

Three Message Types, Unified Management

uPtt intelligently identifies and handles different types of PTT messages.

uPtt

uPtt Messages

uPtt-format messages are parsed, saved to the local database, and automatically deleted from PTT inbox to keep it clean.

Mail

Regular Mail

Regular mail from other users is displayed as mail cards in conversations. Original mail is preserved in PTT inbox — never deleted.

Waterball

Waterball Messages

PTT's instant pop-up messages (waterball) are captured and displayed as inline bubbles, with batch fingerprint hashing for deduplication.

Security & Privacy First

Your data belongs only to you. uPtt collects no personal information and connects to no third-party servers.

Local-only Storage

All chat history and account data is stored exclusively in your local SQLite database — nothing is uploaded to third parties.

Native Protocol

Connects directly to PTT's official servers (ptt.cc). The only additional connection is to GitHub API for version checking — pure and secure.

Automated Leak Prevention

CI integrates TruffleHog scanning, Bandit static analysis, and dynamic credential detection tests to ensure sensitive information never leaks.

Code Signing

Release builds are signed by SignPath.io and verified by the SignPath Foundation, ensuring downloaded binaries haven't been tampered with.

Download Now

No development environment needed — just download and run.

Or install via pip (Python 3.12+)

Stable builds on PyPI, preview builds (Beta / RC) are also auto-published.

# Stable
$ pip install uPtt
$ uptt

# Preview (Beta / RC)
$ pip install --pre uPtt
$ uptt

Developer Quick Start

uPtt is built with Python 3.12 and PySide6. Contributions welcome.

# Clone the project
$ git clone [email protected]:uPtt-messenger/uPtt-app.git
$ cd uPtt-app

# Install dependencies
$ pip install -r requirements.txt

# Run
$ python src/run_app.py

# Test
$ pytest --cov=src/uPtt tests/

Keyboard Shortcuts

KeyAction
Ctrl+NFocus new conversation input
Ctrl+WClose current conversation
Ctrl+QQuit the application
EnterSend message