Skip to main content
devskim

Terminal feed reader for Hacker News, Reddit, lobste.rs, and GitHub Trending.

License: MIT PyPI version Python versions GitHub release CI codecov

Features

  • Unified scrollable feed from HN, Reddit subreddits, lobste.rs, and GitHub Trending
  • Color-coded by source: HN orange, lobste.rs red, GitHub green, subreddits in a cycling palette
  • Read text posts and Ask HN inline — no browser needed
  • Split view with post body / repo stats and threaded comments or README side by side
  • Filter feed by source, refresh on demand, paginate with m
  • Keyword search with /, copy URL with y, mark seen posts dimmed automatically
  • Config file at ${XDG_CONFIG_HOME:-~/.config}/devskim/config.toml — created automatically on first run

Install

Homebrew (macOS/Linux)

brew tap emarkou/devskim
brew install devskim

pip

pip install devskim

pipx (isolated install)

pipx install devskim

From source

Requires Python 3.11+.

git clone https://github.com/emarkou/devskim.git
cd devskim
pip install -e .

On first run, a config file is created at $XDG_CONFIG_HOME/devskim/config.toml (defaults to ~/.config/devskim/config.toml). Edit it to change subreddits:

nano "${XDG_CONFIG_HOME:-~/.config}/devskim/config.toml"
subreddits = ["programming", "ClaudeAI", "machinelearning"]
hn_story_count = 30
reddit_post_count = 15
lobsters_post_count = 25
github_trending_count = 25
# github_trending_language = "python"   # filter by language (optional)
# github_trending_since = "daily"       # daily | weekly | monthly
cache_ttl_minutes = 10

Run devskim — changes take effect on next launch or press r to refresh.

Demo

Demo

Key bindings

Main feed

Key Action
j / ↓ Move down
k / ↑ Move up
Enter Open post + comments split view
f Cycle source filter (All → HN → r/sub → lobste.rs → GitHub → …)
m Load more stories
r Refresh all sources
y Copy story URL to clipboard
/ Keyword search
q Quit

Split view

Key Action
j / ↓ Scroll down
k / ↑ Scroll up
Tab Switch between post/stats and comments/README pane
o Open URL in browser
q / Esc Close

Config

$XDG_CONFIG_HOME/devskim/config.toml (default: ~/.config/devskim/config.toml) — created on first run with defaults. If ~/.devskim exists and the XDG path does not, the legacy location is used automatically.

Key Default Description
subreddits ["programming", "python", "machinelearning"] Subreddits to include
hn_story_count 30 HN stories per fetch
reddit_post_count 15 Posts per subreddit per fetch
lobsters_post_count 25 lobste.rs posts per fetch
github_trending_count 25 GitHub trending repos per fetch
github_trending_language "" Filter by language (e.g. "python"), empty = all
github_trending_since "daily" Trending window: daily, weekly, or monthly
cache_ttl_minutes 10 Minutes before refreshing cache
theme "auto" Color theme: auto (detect terminal), dark, light, or any Textual theme name (nord, dracula, solarized-light, …)
browser "" Browser command for opening URLs (e.g. "firefox", "open -a Safari"). Empty = system default

Tech stack

Library Role
Textual TUI framework
httpx Async HTTP client
Click CLI entry point

Related posts:

Metadata

Release files for devskim 0.8.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 devskim 0.8.0
File Size Uploaded
devskim-0.8.0.tar.gz 1.4 MB Details

Built distribution (wheel)

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

Total release size: 1.4 MB

Release files / devskim-0.8.0.tar.gz

Download URL devskim-0.8.0.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
d6f36a13f0701d53e444c8fc2d2479d1ab8e4d07d460a23b5be11a9a60638a26
BLAKE2b-256 checksum
How to use checksums
76def88d07661543adbb2433dbb1e768948a1f56b46b7632121bef19475fd305
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 May 13, 2026.

Transparency log

Release files / devskim-0.8.0-py3-none-any.whl

Download URL devskim-0.8.0-py3-none-any.whl
Size 28.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77dd5413014c4ea5c7020e98be75acb478388ab4b5c58ad030c65411150e4be3
BLAKE2b-256 checksum
How to use checksums
f5d375b383887de08cf3cb36cf942364dfa6f4d657c7d4878154b515df9e7eca
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 May 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 release files

0.7.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