Skip to main content

E-Mail Subscription Viewer for ArXiv

Project description

arXiv Subscription Viewer

arXiv Subscription Viewer

A terminal user interface (TUI) for browsing arXiv papers from email subscription archives.

arXiv Subscription Viewer Screenshot

Features

Core Browsing

  • Interactive split-pane interface with paper list and detail view
  • Fuzzy search by title and author (powered by RapidFuzz)
  • Filter by category (cat:cs.AI), tag (tag:important), unread, or starred
  • Search all arXiv via API (field + optional category) with paginated results
  • Multi-select papers for batch operations
  • Sort cycling between title, date, arXiv ID, citations, trending, and relevance
  • Vim-style navigation (j/k) plus standard arrow keys

Paper Management

  • Mark papers as read/unread with persistent tracking
  • Star important papers for quick access
  • Add custom notes to any paper
  • Tag papers with custom labels (e.g., to-read, important, llm)
  • Watch list for highlighting papers by author/keyword/title

Export Features

  • Open papers in browser (single or batch)
  • Copy paper metadata to clipboard
  • Export as BibTeX (clipboard or file for Zotero import)
  • Export as Markdown
  • Download PDFs to local folder (async batch downloads)

Productivity

  • Session restore (scroll position, filters, selections persist across runs)
  • Search bookmarks (save up to 9 frequent searches, access via 1-9 keys)
  • Vim-style marks (set marks with m + letter, jump with ' + letter)
  • Similar paper recommendations based on category, author, and content
  • Semantic Scholar integration: citation counts, TLDR summaries, S2-powered recommendations, and citation graph exploration
  • HuggingFace trending: community upvotes, AI summaries, keywords, and GitHub info from HF Daily Papers
  • Paper version tracking: check starred papers for arXiv revisions with diff links
  • LLM-powered relevance scoring: score papers 1-10 based on your research interests
  • Abstract preview toggle in list view

History Mode

  • Auto-discover and load arXiv emails from history/ directory
  • Navigate between dates with [ and ] keys
  • Date-aware session restore

Visual

  • Three color themes: Monokai (default), Catppuccin, Solarized Dark — cycle with Ctrl+t
  • Category-specific highlighting and watch list highlighting
  • LaTeX cleaning for readable display
  • Collapsible detail pane sections (Ctrl+d)

Installation

Requires Python 3.13+

From PyPI (recommended)

# Install globally with uv
uv tool install arxiv-subscription-viewer

# Or with pip
pip install arxiv-subscription-viewer

From source (development)

# Clone the repository
git clone https://github.com/NicolasSchuler/arxiv-subscription-viewer.git
cd arxiv-subscription-viewer

# Install with uv
uv sync

Quick Start

# 1. Install
pip install arxiv-subscription-viewer

# 2. Place an arXiv email file in history/ (or use -i)
mkdir -p history
# Save your arXiv email as history/2026-02-12.txt

# 3. Run
arxiv-viewer

Usage

# History mode: auto-loads newest file from history/
arxiv-viewer

# Show help
arxiv-viewer --help

# List available dates in history
arxiv-viewer --list-dates

# Open specific date
arxiv-viewer --date 2026-01-23

# Custom input file (disables history mode)
arxiv-viewer -i papers.txt

# Start fresh session (ignore saved state)
arxiv-viewer --no-restore

# Alternative: run as module (useful during development)
uv run python -m arxiv_browser

Keyboard Shortcuts

Navigation & Search

Key Action
/ Toggle search input
Escape Cancel search / exit API mode
A Search all arXiv (API mode)
Ctrl+e Exit API mode
j/k Navigate down/up (vim-style)
1-9 Jump to search bookmark
Ctrl+b Add current search as bookmark
[ Previous date (history) / previous API page (API mode)
] Next date (history) / next API page (API mode)

Selection & Actions

Key Action
Space Toggle paper selection
a Select all visible papers
u Clear all selections
o Open selected paper(s) in browser
P Open selected paper(s) as PDF
c Copy selected paper(s) to clipboard
s Cycle sort order (title/date/arxiv_id/citations/trending/relevance)

Paper Status

Key Action
r Toggle read status
x Toggle star
n Edit notes
t Edit tags
w Toggle watch list filter
W Manage watch list
p Toggle abstract preview

Export & Download

Key Action
E Export menu (BibTeX, Markdown, RIS, CSV + clipboard/file)
d Download PDF(s) to local folder

Marks & Enrichment

Key Action
m Set mark (then press a-z)
' Jump to mark (then press a-z)
R Show similar papers (local or S2-powered)
G Explore citation graph (S2-powered, drill-down)
V Check starred papers for version updates
e Fetch Semantic Scholar data for current paper
Ctrl+e Toggle Semantic Scholar enrichment on/off
Ctrl+s Generate AI summary (mode selector)
Ctrl+h Toggle HuggingFace trending on/off
L Score papers by relevance (LLM-powered)
Ctrl+l Edit research interests

General

Key Action
Ctrl+t Cycle color theme (Monokai / Catppuccin / Solarized)
Ctrl+d Toggle detail pane sections
? Show help overlay
q Quit

Search Filters

Use these prefixes in the search box:

Filter Example Description
cat: cat:cs.AI Filter by category
tag: tag:to-read Filter by custom tag
author: author:hinton Filter by author name
title: title:transformer Filter by title substring
abstract: abstract:attention Filter by abstract substring
unread unread Show only unread papers
starred starred Show only starred papers
(text) transformer Fuzzy search title/authors
"..." "large language" Match exact phrase

Combine terms with boolean operators: cat:cs.AI AND author:hinton, unread OR starred, NOT cat:math.

History Mode

Store arXiv emails in the history/ directory with YYYY-MM-DD.txt filenames:

history/
├── 2026-01-20.txt
├── 2026-01-21.txt
└── 2026-01-23.txt
  • App auto-discovers and loads the newest file on startup
  • Use [ and ] keys to navigate between dates
  • Session state (including current date) persists across runs
  • Falls back to arxiv.txt if no history directory exists

PDF Downloads

Press d to download PDFs for selected papers (or current paper) to your local machine:

  • Default location: ~/arxiv-pdfs/
  • Configure custom directory in config.json with pdf_download_dir
  • Already-downloaded files are skipped
  • Progress shown in status bar
  • Supports batch downloads with multi-select

Input File Format

The application parses arXiv email subscription text files. Expected format:

  • Papers separated by ------------------------------------------------------------------------------
  • Each paper contains: arXiv ID, date, title, authors, categories, abstract, URL

Example paper entry:

------------------------------------------------------------------------------
\\
arXiv:2501.12345
Date: Mon, 20 Jan 2025 00:00:00 GMT   (15kb)

Title: Example Paper Title
Authors: Jane Doe, John Smith
Categories: cs.AI cs.LG
Comments: 10 pages, 5 figures
\\
  This is the abstract text describing the paper's contributions...
\\
( https://arxiv.org/abs/2501.12345 , 15kb)
------------------------------------------------------------------------------

Configuration

User configuration is stored in a platform-specific location:

  • Linux: ~/.config/arxiv-browser/config.json
  • macOS: ~/Library/Application Support/arxiv-browser/config.json
  • Windows: %APPDATA%/arxiv-browser/config.json

Configuration includes:

  • Paper metadata (read status, stars, notes, tags)
  • Watch list entries
  • Search bookmarks
  • Vim-style marks
  • Session state (scroll position, filters, sort order)
  • UI preferences (abstract preview toggle)
  • arXiv API search preferences (arxiv_api_max_results)
  • LLM summary settings (command, prompt template, preset)

arXiv API Search Settings

Optional config key:

{
  "arxiv_api_max_results": 50
}

Values are clamped to a safe range (1..200).

AI Summary Setup

Generate paper summaries using any LLM CLI tool. Press Ctrl+s on a paper to generate an accessible, explanatory summary aimed at CS students. The full paper content is automatically fetched from the arXiv HTML version and passed to the LLM.

Add one of these to your config.json:

{ "llm_preset": "copilot" }

Available presets: claude (claude -p), codex (codex exec), llm (llm), copilot (copilot -p).

Or configure a custom command with {prompt} placeholder:

{
  "llm_command": "claude -p {prompt}",
  "llm_prompt_template": "Summarize: {title}\n\n{paper_content}"
}

Prompt placeholders: {title}, {authors}, {categories}, {abstract}, {arxiv_id}, {paper_content}.

Summaries are cached in a local SQLite database and persist across sessions.

HuggingFace Trending Setup

Surface trending signals from HuggingFace Daily Papers — community upvotes, comments, GitHub info, AI summaries, and keywords. Press Ctrl+h to toggle on/off. Data is auto-fetched when enabled and cross-matched against loaded papers.

{
  "hf_enabled": true,
  "hf_cache_ttl_hours": 6
}
  • hf_enabled: Enable HF trending on startup (default: false)
  • hf_cache_ttl_hours: Hours to cache HF data (default: 6, trending data changes frequently)

Trending papers show upvote badges in the list view and a HuggingFace section in the detail pane with upvotes, comments, GitHub repository, AI summary, and keywords.

Semantic Scholar Setup

Enrich papers with citation counts, fields of study, TLDRs, S2-powered recommendations, and citation graph exploration. Press Ctrl+e to toggle on/off.

{
  "s2_enabled": true,
  "s2_api_key": "",
  "s2_cache_ttl_days": 7
}
  • s2_enabled: Enable S2 enrichment on startup (default: false)
  • s2_api_key: Optional API key for higher rate limits
  • s2_cache_ttl_days: Days to cache S2 data (default: 7)

Press e to fetch data for the current paper, R for S2-powered recommendations, and G to explore the citation graph with drill-down navigation.

Relevance Scoring Setup

Score papers 1-10 based on your research interests using the configured LLM. Requires an LLM preset or command (same as AI summaries).

{
  "research_interests": "efficient LLM inference, quantization, speculative decoding"
}

Press L to score all loaded papers, Ctrl+l to edit interests. Sort by relevance with s. Papers show colored score badges: green (8-10), yellow (5-7), dim (1-4).

Development

# Install dev dependencies
uv sync

# Run tests
uv run pytest

# Run tests with verbose output
uv run pytest -v

# Run specific test class
uv run pytest -v test_arxiv_browser.py::TestCleanLatex

# Lint + type check
uv run ruff check . && uv run ruff format --check . && uv run pyright

Dependencies

  • textual (>=7.3.0): TUI framework
  • rapidfuzz (>=3.0.0): Fuzzy string matching
  • httpx (>=0.27.0): Async HTTP client for API calls and PDF downloads
  • platformdirs: Cross-platform config directory (transitive via textual)
  • pytest (>=9.0.2): Testing (dev dependency)

Author

Nicolas Sebastian Schuler (nicolas.schuler@kit.edu)

License

MIT License - see LICENSE for details.

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

arxiv_subscription_viewer-0.1.1.tar.gz (2.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

arxiv_subscription_viewer-0.1.1-py3-none-any.whl (121.4 kB view details)

Uploaded Python 3

File details

Details for the file arxiv_subscription_viewer-0.1.1.tar.gz.

File metadata

File hashes

Hashes for arxiv_subscription_viewer-0.1.1.tar.gz
Algorithm Hash digest
SHA256 9978a7d3c2f227cf6cc576dc93e08460792589eebe090406f68ee17aa0981b16
MD5 206c8b6d552a8c877b1181e3a0c3fa87
BLAKE2b-256 fb01fb3675a34b3d7eab6cf29b89c9ddef2220fbd51e65f89f09b626f56a06ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for arxiv_subscription_viewer-0.1.1.tar.gz:

Publisher: ci-cd.yml on NicolasSchuler/arxiv-subscription-viewer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arxiv_subscription_viewer-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for arxiv_subscription_viewer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5c15071a2523562f4b5af7ec2934c050fee48bff731493084ba107a1d807ebb6
MD5 2e8b178a7a3410e4c3f88e6ac388b59f
BLAKE2b-256 6a86954adc90b6102c169e8a61ca00ef41629b2386e6113d54f1e96ce3ffe60a

See more details on using hashes here.

Provenance

The following attestation bundles were made for arxiv_subscription_viewer-0.1.1-py3-none-any.whl:

Publisher: ci-cd.yml on NicolasSchuler/arxiv-subscription-viewer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page