Skip to main content

dev-null-tty

A keyboard-first terminal client for /dev/null, built with Textual and managed with uv.

The Following, Latest, and Trending journals load real commits from the signed /api/v1/log/{log} endpoint after sign-in. Each journal supports automatic cursor-based infinite scrolling and commit search. Guest users can view the profile and sign in; journals require an approved device. Signed-in users can publish commits, reply to a commit, or quote it. The modal composer shows the original commit above the editor for replies and quotes, and submits through the signed POST /api/v1/commits endpoint. Press Ctrl+Q or Escape to close the composer.

The profile's Sign in with GitHub action starts the documented PKCE device authorization flow. To preserve existing sign-ins, the app keeps its dedicated Ed25519 keypair under ~/.dev-null-tui/ (directory mode 0700, private key mode 0600, no passphrase). It opens the authorization page and, after approval, signs POST /api/v1/devices with the devnull-api namespace. The verifier and state remain in memory. The private key stays on the device and is never included in API requests.

Before opening the authorization page, the app registers its per-user XDG desktop handler for devnull:// (no sudo). After approval, the handler queues the callback for the running TUI, which checks the state before redeeming the one-time code. Pasting the full devnull://auth/callback?... URL remains available if callback handling is unavailable.

The device key stays in ~/.dev-null-tui/. On each launch, the app checks that key with a signed GET /api/v1/me and restores the profile when the device is still approved. A revoked or unapproved key is retained, but the app remains signed out so you can authorize a device again.

Log out removes the local private and public key files and clears the in-memory session; callback handoff data and the callback-handler registration are left untouched. This API does not expose a device-revocation endpoint, so use Settings → Devices to revoke the device's server-side approval too.

The handler can also be registered manually from the command line:

uv run dev-null-tty --register-handler

This registers a per-user XDG desktop entry for devnull:// (no sudo). The handler queues the callback in ~/.dev-null-tui/ with owner-only permissions; the running TUI validates its state and removes the handoff file. Manual paste remains available if registration is unavailable.

Run

uv run dev-null-tty

Keyboard shortcuts:

  • h / l — Previous / next journal
  • j / k — Next / previous commit
  • Shift+C — New commit
  • Shift+Q — Quote selected commit
  • Shift+R — Reply to selected commit
  • q — Quit

Test

uv run pytest

Release

Configure a PyPI trusted publisher for this GitHub repository using the .github/workflows/publish.yml workflow and the pypi environment. Update the version in pyproject.toml (and refresh uv.lock), then push a matching version tag, for example:

git tag v0.1.0
git push origin v0.1.0

The workflow checks that the tag matches the project version, runs the tests, builds the wheel and source distribution, and publishes them to PyPI using OpenID Connect. No PyPI API token is required.

The upstream project is nunomaduro/dev-null.sh.

Metadata

Release files for dev-null-tty 0.1.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 dev-null-tty 0.1.0
File Size Uploaded Provenance Actions
dev_null_tty-0.1.0.tar.gz 16.4 kB With provenance Details for dev_null_tty-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dev-null-tty 0.1.0
File Interpreter ABI Platform Actions
dev_null_tty-0.1.0-py3-none-any.whl Python 3 none any Details for dev_null_tty-0.1.0-py3-none-any.whl

Total release size: 34.8 kB

Release files / dev_null_tty-0.1.0.tar.gz

Download URL dev_null_tty-0.1.0.tar.gz
Size 16.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1be24c67fb4502d0407e9f5dcbf03e7fe759b3f12646400a0abc519f72c9609a
BLAKE2b-256 checksum
How to use checksums
6339e3bf6a96977e51886cce83c069650677298d33232c3eda381ba8c8b13179
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / dev_null_tty-0.1.0-py3-none-any.whl

Download URL dev_null_tty-0.1.0-py3-none-any.whl
Size 18.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
46874922b190551ad1d7b6c7534b5e4b41f6a2ac09c1d8082e49f27a86ec04d6
BLAKE2b-256 checksum
How to use checksums
b0b7b2d41ba9ddca39c041149e162eb6dadd7642a5a94cff88e9b6744fc0f808
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Security for dev-null-tty 0.1.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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dev_null_tty-0.1.0.tar.gz

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 Oct 21, 2026.

Transparency log

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