Website PyPI Python License: MIT
Full-screen terminal news reader built with Textual. Sidebar, headlines, article pane, themes, AI summarize/explain, and text-to-speech that can highlight the sentence being read.
Website: nishal21.github.io/News-CLI · Author: nishal.dev · PyPI: worldnews-cli
Requires Python 3.9+.
Fastest path for most people:
pip install worldnews-cliIsolated tool install (recommended on shared machines):
pipx install worldnews-cli
# or
uv tool install worldnews-cliIf you see python is not recognized or pip is not recognized:
py -m pip install worldnews-cli
py -m worldnewsOr reinstall Python from python.org and enable Add python.exe to PATH.
Optional extras for offline/gTTS playback helpers:
pip install "worldnews-cli[voice]"From a local clone (developers):
pip install -e .
# or
pip install -r requirements.txtworldnews
# short alias:
newsIf the console script is not on your PATH:
python -m worldnews
# Windows launcher often works as:
py -m worldnewsUseful flags:
worldnews --category tech
worldnews --chat
worldnews --summary
worldnews --offline
worldnews --add-feed "My Blog" "https://example.com/feed.xml"
worldnews --version| Key | Action |
|---|---|
j / k or arrows |
Move in the list |
Enter |
Open article (on a phone-width terminal: full-screen reader) |
Esc / q |
Back to list, or quit |
a / e |
AI summarize / explain |
t |
Speak article (press again to stop) |
/ |
Filter headlines |
Ctrl+P |
Command palette |
s |
Settings (App, AI, Voice) |
[ / ] |
Previous / next feed |
1–9 |
Jump to a numbered category |
b |
Bookmark |
o |
Open in browser |
? |
Help |
On narrow terminals (about under 84 columns), the app switches to a phone layout: Enter opens the reader full width, Esc/Back returns to the list, and a Back button appears in the action row.
- Categories such as General, Tech, Hacker News, AI, Sports, Anime, plus All, Bookmarks, Offline, and My Feeds
- Custom sites via palette
add-feed(website or RSS; feed discovery when possible) - Infinite scroll on headline lists (50 at a time)
- Animated ASCII boot / fetch splash (WORLD NEWS figlet + gradient)
- Themes: Newsroom (default), Phosphor, Broadsheet, Nord, GitHub Dark, High Contrast
- AI summarize / explain / chat (default free provider needs no key; many others supported)
- Speak (
t) with free Edge TTS by default; optional Fish Audio, Gemini, Groq, and paid live providers - Paste a voice id or library URL in Settings → Voice when you use a provider API key
Config lives under ~/.config/worldnews/ (older ~/.news-cli-*.json files are still read).
Default free path: OpenCode Zen (big-pickle), no API key.
Also wired: Hack Club AI, Ollama, LM Studio, Groq, Gemini, OpenRouter, and others.
In the app: s → AI tab (or palette → ai-provider). Pick a provider/model, paste a key if required, Save key, Apply AI.
Hack Club keys: ai.hackclub.com
| Provider | Cost | Key |
|---|---|---|
| Edge TTS | Free | None (default) |
| Fish Audio | Free tier | fish.audio (s2.1-pro-free, news/narrator voices) |
| Gemini TTS / Live | Free tier | Google AI Studio |
| Groq Orpheus | Free tier | Groq |
| Deepgram Aura-2 / Live | Free credit | Deepgram |
| OpenAI / Realtime | Paid | OpenAI |
| ElevenLabs / Live | Free/paid | ElevenLabs |
| Cartesia / Live | Paid | Cartesia |
| gTTS | Free | None |
Flow: s → Voice → provider → model → voice (or paste id/URL) → API key if needed → Apply voice → t.
You can also set FISH_API_KEY, GEMINI_API_KEY, OPENAI_API_KEY, and similar env vars.
Provider docs: Fish · Gemini speech · Groq TTS
Cell-grid terminals (including Windows Terminal) often cannot shape Indic scripts the way a browser does. World News keeps the TUI usable with a safe default:
| Mode | How to enable | Behavior |
|---|---|---|
| safe (default) | Settings → App → Scripts, or no flag | No Indic/Arabic glyphs in the TUI (list + reader); press o for browser |
| plain | --plain / --ascii |
Same as safe for hostile scripts |
| native | --native-titles |
Show native script in list/reader (may still overlap on Windows Terminal) |
Fonts / hosts
- Windows: use Windows Terminal, not legacy
cmd.exe. Set the profile font to Nirmala UI or Noto Sans Malayalam. - Termux: install a Malayalam-capable font (e.g. Noto) via your font packages.
- Linux / macOS: UTF-8 locale (
LANG=*.UTF-8) + Noto / Meera / Rachana.
Startup forces UTF-8 I/O and enables Windows virtual terminal processing when possible. Full OpenType shaping still requires a capable terminal + font — for clearest reading press o (open in browser).
This is a terminal UI. On Android, Termux is the usual host:
pkg update && pkg install python libxml2 libxslt libjpeg-turbo
pip install worldnews-cli
# optional
pip install "worldnews-cli[voice]"
pkg install termux-api ffmpeg
python -m worldnewsOther options: JuiceSSH/ConnectBot into a machine that already has worldnews, or a-Shell/iSH on iOS with Python + pip.
Width behavior (approximate):
| Columns | Layout |
|---|---|
| 100+ | Sidebar + list + reader |
| 84–99 | List first; Enter opens reader |
| under 84 | Single column; Enter = reader, Esc = list |
| under 56 | Compact rows and short keyhints |
Links open with termux-open-url when Termux API is installed.
git clone <your-repo-url>
cd news-cli
pip install -e ".[dev,voice]"
python -m worldnewscd docs
npm install
npm run dev
npm run buildMIT