Keyboard-first terminal UI for arXiv digest triage and live arXiv search
Project description
arXiv Subscription Viewer
Triage arXiv papers from your terminal.
History mode or live API search · keyboard-first review · optional citation and LLM enrichment
🚀 Getting Started
Use whichever entry path matches how you already follow papers:
history/workflow: review local daily digests with persistent date navigation, bookmarks, notes, and collections.- Live arXiv search: start directly from the API when you want the newest matching papers without preparing local files first.
# Confirm Python support
python3.13 --version
# Install as a CLI tool
uv tool install arxiv-subscription-viewer
# or: python3.13 -m pip install --user arxiv-subscription-viewer
# Optional faster fuzzy matching
uv tool install "arxiv-subscription-viewer[fuzzy]"
# Check environment & config health
arxiv-viewer doctor
# Search arXiv API directly
arxiv-viewer search --category cs.AI
# Search by topic
arxiv-viewer search --query "diffusion transformer" --field title
# Paginate through results (instead of collecting the newest day)
arxiv-viewer search --query "attention" --mode page --max-results 100
# Generate a cron-friendly Markdown digest
arxiv-viewer digest --category cs.AI --period weekly --output digest.md
# Browse from a local history/ archive (see docs/history-mode.md)
arxiv-viewer browse
# List local history dates
arxiv-viewer dates
# Show version
arxiv-viewer --version
# Print config file path
arxiv-viewer config-path
# Module entrypoint, equivalent to arxiv-viewer
python -m arxiv_browser --version
Requires Python 3.13+ · Press
?in-app for help ·Ctrl+popens commandsGlobal options:
--version·--debug(log to file) ·--ascii(ASCII-only icons) ·--color auto|always|never·--no-color·--theme {monokai|catppuccin-mocha|solarized-dark|solarized-light|high-contrast}Debug log paths:
~/.config/arxiv-browser/debug.log(Linux) ·~/Library/Application Support/arxiv-browser/debug.log(macOS) ·%APPDATA%/arxiv-browser/debug.log(Windows)
🧭 Choose A Workflow
history/ archive
Run the viewer from the directory that contains your history/ folder:
mkdir -p ~/research/arxiv/history
cd ~/research/arxiv
# Save a digest as history/2026-02-13.txt
arxiv-viewer
This path is best when you review daily digests in order and want persistent local state.
Live arXiv search
Use the API-first path when you want to start from current arXiv results:
arxiv-viewer search --category cs.AI
arxiv-viewer search --query "diffusion transformer" --field title
If something looks off, run arxiv-viewer doctor to check config, history discovery, CLI setup, and environment assumptions.
✨ Highlights
| Feature | Key | |
|---|---|---|
| 🔍 | Fuzzy search with filters (cat:cs.AI, tag:, unread, starred) |
/ |
| ⚡ | Quick triage — review visible unread papers one at a time | T |
| 📈 | Trend Radar & author profiles — local history trends and exact author tracking | Ctrl+p |
| 🤖 | AI summaries, chat, comparison, paper remix & auto-tag via any LLM CLI (Claude, Copilot, llm, …) | Ctrl+s / C / Ctrl+v / Ctrl+p / Ctrl+g |
| 📊 | Citation graph and recommendations via Semantic Scholar | G / R |
| 🔥 | HuggingFace trending — upvotes, keywords, GitHub links | Ctrl+h |
| 🧭 | Smart Reading Queue — priority sort from relevance, watch matches, recency, HF, and S2 signals | s |
| 🧪 | Local triage model — sklearn buckets for likely stars, unsure papers, and likely skips | Ctrl+p |
| 📨 | Markdown digests — cron-friendly daily/weekly briefs | arxiv-viewer digest |
| 🏷️ | Tags, notes, stars — organize your reading | t / n / x |
| 📁 | Collections — curate reading lists | Ctrl+k |
| 📥 | Export — BibTeX, Markdown, RIS, CSV, PDF download/preview | E / d / F |
| 🖼️ | HTML figure preview — render the first arXiv HTML figure in-terminal | I |
| 🔊 | Audio abstract reading — read the current abstract aloud with system TTS | y |
| 🎯 | Relevance scoring — LLM scores papers against your interests | L |
| 📅 | History mode — navigate daily email digests with [ / ] |
|
| ⌨️ | Command palette — quick access to all commands | Ctrl+p |
| 🎨 | 4 themes — Monokai, Catppuccin, Solarized, High Contrast | Ctrl+t |
⌨️ Key Bindings
| Key | Action | Key | Action | |
|---|---|---|---|---|
/ |
Search | o |
Open in browser | |
A |
Search arXiv API | P |
Open PDF | |
j / k |
Navigate | d |
Download PDF | |
Space |
Select | F |
Preview PDF | |
s |
Cycle sort | I |
Preview first figure | |
r |
Toggle read | E |
Export menu | |
x |
Toggle star | c |
Copy to clipboard | |
T |
Quick triage | Ctrl+s |
AI summary | |
n |
Notes | Ctrl+k |
Collections | |
Ctrl+v |
Compare papers | C |
Chat with paper | |
p |
Abstract preview | y |
Read abstract aloud | |
L |
Relevance score | t |
Tags | |
Ctrl+p |
Command palette | V |
Check versions | |
Ctrl+g |
Auto-tag (LLM) | Ctrl+b |
Save bookmark | |
G |
Citation graph | m / ' |
Set / jump to mark | |
R |
Recommendations | Ctrl+l |
Edit interests | |
1-9 |
Jump to bookmark | Ctrl+d |
Detail pane sections | |
w / W |
Watch list | v |
Detail mode | |
Ctrl+e |
Toggle S2 / Exit API mode | Ctrl+r |
Mark visible as read | |
Ctrl+h |
HuggingFace trending | Ctrl+Shift+b |
Remove bookmark | |
? |
Help / shortcuts |
Marks
Press m followed by a letter (a–z) to set a named mark at the current paper.
Press ' followed by that letter to jump back to it. Marks persist within a session,
making it easy to navigate between papers you're comparing or revisiting.
⚙️ Configuration
Config lives at ~/.config/arxiv-browser/config.json (Linux), ~/Library/Application Support/arxiv-browser/config.json (macOS), or %APPDATA%/arxiv-browser/config.json (Windows).
If you want the best documentation entry point for your context:
- 🌐 Published guide hub: nicolasschuler.github.io/arxiv-subscription-viewer
- 📚 Repository docs index: docs/README.md
- ⚙️ Direct config reference: docs/config-reference.md
See the full documentation for:
- 🧭 Docs start page
- 🌐 Published docs landing page
- ⚙️ Configuration reference
- 🤖 AI summary & LLM setup
- 📊 Semantic Scholar integration
- 🔥 HuggingFace trending
- 📅 History mode & email ingestion
- 🔍 Search filters & advanced queries
- 📥 Export & PDF configuration
- 🛠️ Troubleshooting
🐚 Shell Completions
Enable tab completion for subcommands and flags:
# Bash (add to ~/.bashrc)
eval "$(arxiv-viewer completions bash)"
# Zsh (add to ~/.zshrc)
eval "$(arxiv-viewer completions zsh)"
# Fish (add to ~/.config/fish/config.fish)
arxiv-viewer completions fish | source
🔄 Upgrade / Uninstall
uv tool upgrade arxiv-subscription-viewer
uv tool uninstall arxiv-subscription-viewer
# pip-installed users
python3.13 -m pip install --user --upgrade arxiv-subscription-viewer
python3.13 -m pip uninstall arxiv-subscription-viewer
🛠️ Development
git clone https://github.com/NicolasSchuler/arxiv-subscription-viewer.git
cd arxiv-subscription-viewer
uv python install 3.13
uv sync --locked
pre-commit install
just check # docs drift + lint + typechecks + tests
just quality # full local quality suite
For contributor-oriented architecture and import-boundary guidance, start with docs/architecture.md.
📄 License
Project details
Release history Release notifications | RSS feed
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 arxiv_subscription_viewer-0.1.9.tar.gz.
File metadata
- Download URL: arxiv_subscription_viewer-0.1.9.tar.gz
- Upload date:
- Size: 2.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a95f93ace98d1da3c2afd6144f71f12b9a946d47da6f7f9987bb15827889b09a
|
|
| MD5 |
5d48f04a3dec469f7a48db9aeaf1b4ed
|
|
| BLAKE2b-256 |
1e7edab11761ce9df3d180b316f8a3e46be032dedeee31d450f6dda786b41e6e
|
Provenance
The following attestation bundles were made for arxiv_subscription_viewer-0.1.9.tar.gz:
Publisher:
ci-cd.yml on NicolasSchuler/arxiv-subscription-viewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arxiv_subscription_viewer-0.1.9.tar.gz -
Subject digest:
a95f93ace98d1da3c2afd6144f71f12b9a946d47da6f7f9987bb15827889b09a - Sigstore transparency entry: 1547770348
- Sigstore integration time:
-
Permalink:
NicolasSchuler/arxiv-subscription-viewer@6ec8bd81050c5865cdbb41a0d917a29092d7fb0a -
Branch / Tag:
refs/tags/v0.1.9 - Owner: https://github.com/NicolasSchuler
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@6ec8bd81050c5865cdbb41a0d917a29092d7fb0a -
Trigger Event:
push
-
Statement type:
File details
Details for the file arxiv_subscription_viewer-0.1.9-py3-none-any.whl.
File metadata
- Download URL: arxiv_subscription_viewer-0.1.9-py3-none-any.whl
- Upload date:
- Size: 335.6 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 |
6e39d2e615ec6e3795e0e9a0ae13ff897c65c961939e7bdf2bcd2502f67ca9e8
|
|
| MD5 |
efb504740c6f7bc4da50fdc40457b652
|
|
| BLAKE2b-256 |
077330db20d58e287bd8f80da7ce35721bbeb24e055c43c2cbb0d16b2bd65e9e
|
Provenance
The following attestation bundles were made for arxiv_subscription_viewer-0.1.9-py3-none-any.whl:
Publisher:
ci-cd.yml on NicolasSchuler/arxiv-subscription-viewer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arxiv_subscription_viewer-0.1.9-py3-none-any.whl -
Subject digest:
6e39d2e615ec6e3795e0e9a0ae13ff897c65c961939e7bdf2bcd2502f67ca9e8 - Sigstore transparency entry: 1547770416
- Sigstore integration time:
-
Permalink:
NicolasSchuler/arxiv-subscription-viewer@6ec8bd81050c5865cdbb41a0d917a29092d7fb0a -
Branch / Tag:
refs/tags/v0.1.9 - Owner: https://github.com/NicolasSchuler
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@6ec8bd81050c5865cdbb41a0d917a29092d7fb0a -
Trigger Event:
push
-
Statement type: