Hacker News + Reddit + lobste.rs terminal feed viewer
Project description
grokfeed
Terminal feed reader for Hacker News, Reddit, and lobste.rs.
Features
- Unified scrollable feed from HN, Reddit subreddits, and lobste.rs
- Color-coded by source: HN orange, lobste.rs red, subreddits in a cycling palette
- Read text posts and Ask HN inline — no browser needed
- Comments viewer with nested replies (up to 2 levels)
- Filter feed by source, refresh on demand
- Config file at
~/.grokfeed/config.toml— created automatically on first run
Install
Homebrew (recommended)
brew tap emarkou/grokfeed
brew install grokfeed
On first run, a config file is created at ~/.grokfeed/config.toml. Edit it to change subreddits:
nano ~/.grokfeed/config.toml
subreddits = ["programming", "ClaudeAI", "machinelearning"]
hn_story_count = 30
reddit_post_count = 15
lobsters_post_count = 25
Changes take effect on next launch or press r to refresh.
From source
Requires Python 3.11+. Recommended: use uv.
# with uv
uv venv --python 3.13 .venv
source .venv/bin/activate
uv pip install -e .
# or plain pip (Python 3.11+)
pip install -e .
Run
grokfeed
Screenshots
Key bindings
Main feed
| Key | Action |
|---|---|
j / ↓ |
Move down |
k / ↑ |
Move up |
Enter |
Open post body (text posts) or URL in browser (link posts) |
c |
Open comments |
f |
Cycle source filter (All → HN → r/sub → lobste.rs → …) |
r |
Refresh all sources |
q |
Quit |
Post body modal
| Key | Action |
|---|---|
j / ↓ |
Scroll down |
k / ↑ |
Scroll up |
c |
Open comments for this post |
o |
Open URL in browser |
q / Esc |
Close |
Comments modal
| Key | Action |
|---|---|
j / ↓ |
Scroll down |
k / ↑ |
Scroll up |
q / Esc |
Close |
Config
~/.grokfeed/config.toml — created on first run with defaults.
subreddits = ["programming", "python", "machinelearning"]
hn_story_count = 30
reddit_post_count = 15
lobsters_post_count = 25
Edit to add or remove subreddits. Changes take effect on next launch or r refresh.
Tech stack
| Library | Role |
|---|---|
| Textual | TUI framework |
| httpx | Async HTTP client |
| Typer | CLI entry point |
| Rich | Text rendering |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file grokfeed-0.2.0.tar.gz.
File metadata
- Download URL: grokfeed-0.2.0.tar.gz
- Upload date:
- Size: 407.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25715120bb51a08e93b0426a14613af8408644ffc6b9030ac47a5b223862badf
|
|
| MD5 |
c21a656a0c03bf5cc1e289a844a12656
|
|
| BLAKE2b-256 |
5953cee592e243ca801044abbec41ca160340fc38a3ee45d709d473a5dba745c
|
Provenance
The following attestation bundles were made for grokfeed-0.2.0.tar.gz:
Publisher:
release.yml on emarkou/grokfeed
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grokfeed-0.2.0.tar.gz -
Subject digest:
25715120bb51a08e93b0426a14613af8408644ffc6b9030ac47a5b223862badf - Sigstore transparency entry: 1429115422
- Sigstore integration time:
-
Permalink:
emarkou/grokfeed@e12d1f1246ee24fe92bfe8826ad8c6fc205f212e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/emarkou
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e12d1f1246ee24fe92bfe8826ad8c6fc205f212e -
Trigger Event:
push
-
Statement type:
File details
Details for the file grokfeed-0.2.0-py3-none-any.whl.
File metadata
- Download URL: grokfeed-0.2.0-py3-none-any.whl
- Upload date:
- Size: 19.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b8769088050620e0d7b5b2b16d77b93ed7385478616ad539d5a73ddd24b947c
|
|
| MD5 |
69962b6c1600b6524b986fd4403e3d9c
|
|
| BLAKE2b-256 |
231c85cb9d166d5e802fa96c57536c82cadd933d1faa842a4247f0ae160ef1c5
|
Provenance
The following attestation bundles were made for grokfeed-0.2.0-py3-none-any.whl:
Publisher:
release.yml on emarkou/grokfeed
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
grokfeed-0.2.0-py3-none-any.whl -
Subject digest:
9b8769088050620e0d7b5b2b16d77b93ed7385478616ad539d5a73ddd24b947c - Sigstore transparency entry: 1429115444
- Sigstore integration time:
-
Permalink:
emarkou/grokfeed@e12d1f1246ee24fe92bfe8826ad8c6fc205f212e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/emarkou
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e12d1f1246ee24fe92bfe8826ad8c6fc205f212e -
Trigger Event:
push
-
Statement type: