📵 56k Screech
Retro dial-up internet manager for the macOS menu bar — because connecting to the internet should be a deliberate act, not an automatic reflex.
What it does
56k Screech lives in the menu bar and actually controls your Mac's Wi-Fi. When the internet isn't turned on via DialUp, it simply doesn't work. No silent syncs, no background notifications, no cloud quietly refreshing without your knowledge.
And of course — connecting is accompanied by an authentic dial-up sound ritual. 📟
56k Screech is menu-bar-only: it never shows a Dock icon or a Cmd+Tab entry.
Features
| 📡 | Real Wi-Fi on/off (networksetup), reconciled every second against the actual radio state (catches manual toggles from the system menu too) |
| 🔊 | Dial-up handshake sound — bundled recording, with a ~12s procedurally generated fallback if it (or afplay) is unavailable |
| ⏱ | Live connection timer |
| ⚡ | Real-time download / upload speed |
| 📦 | Data transferred in the current session |
| 💰 | Cost per session — currency and price/hour are live-editable in Settings |
| 📊 | Stats: today / 7 days / 30 days / all time, plus the last 5 sessions |
| 🔔 | Notification Center alert (with a chime) after you've been online past a configurable time limit — includes a one-tap "Disconnect" button |
| 😴 | Billing and the alert timer pause across system sleep — waking up doesn't inflate your session cost or fire an overdue alert the instant you're back |
| ⚙️ | In-menu Settings: currency, price/hour, modem sound on/off, alerts on/off + limit, Wi-Fi interface picker |
| 🚀 | LaunchAgent for automatic startup |
The menu bar icon itself reflects connection state: 📵 offline, 📡 connecting, 📶 connected (idle), 🌐 connected (actively transferring data).
Installation
pip
pip install 56k-screech
From source
git clone https://github.com/muzzug/screech.git
cd screech
pip install -e .
Running
screech
# or, without the installed entry point:
python -m screech.app
The 📵 icon appears in the menu bar. Click → "Connect to internet".
The modem sound plays in full before Wi-Fi actually turns on — that's the ritual, not a hang. Expect a several-second delay between clicking Connect and the radio (and the status row) actually going live.
Automatic startup (LaunchAgent)
screech install-launchagent
Uninstall:
screech uninstall-launchagent
Configuration
Most settings are edited live from the app itself — click the Settings section in the menu to expand it:
- Currency and Price/hour — used to compute the cost shown live and recorded per session
- Modem sound — turn the dial-up handshake on/off
- Alerts — toggle on/off, plus a Limit (min) for how often you get a Notification Center reminder while connected
- Wi-Fi Interface — pick the right Wi-Fi device from a submenu populated
from
networksetup -listallhardwareports, instead of editing code; this is the fix if 56k Screech "does nothing" (or reports it couldn't turn Wi-Fi on) when you click Connect
Alerts use macOS Notification Center, so the first time you connect you'll be asked to grant 56k Screech permission under System Settings → Notifications. Each alert plays the standard notification chime — if you'd rather it stayed silent, turn off the sound for 56k Screech there.
Settings are persisted to:
~/Library/Application Support/56k Screech/config.json
Session history (used for the Stats section) is stored in:
~/Library/Application Support/56k Screech/sessions.db
A Reset Stats… item at the bottom of the Stats section permanently erases all recorded session history.
License
MIT © Ondřej "Muzzug" Kadlec
Metadata
Release files for 56k-screech 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| 56k_screech-1.0.1.tar.gz | 2.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 56k_screech-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.3 MB
Release files / 56k_screech-1.0.1.tar.gz
| Download URL | 56k_screech-1.0.1.tar.gz |
|---|---|
| Size | 2.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dc5bfcc42eedaf44926c8a2246cd936f9cf5691ef8f0ea4101f71ac6c68f01a8
|
|
BLAKE2b-256 checksum How to use checksums |
3ebff6ddf7826c46f65d87c74d003af60efd3ab32567e68c05f988b78768fbcc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 28, 2026.
Transparency logRelease files / 56k_screech-1.0.1-py3-none-any.whl
| Download URL | 56k_screech-1.0.1-py3-none-any.whl |
|---|---|
| Size | 2.6 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b49397c0f3ab42bfd80d59d4309366ca256292b9d3a5eaa00cde6e537710c78d
|
|
BLAKE2b-256 checksum How to use checksums |
8748bae754da6b13d36c70b3791dd18ce14c525c3d2f94b5cd3026370fff6d98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 28, 2026.
Transparency log