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 withy, 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
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)
| File | Size | Uploaded | |
|---|---|---|---|
| devskim-0.8.0.tar.gz | 1.4 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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