This document provides a high-level introduction to PaperEater, explaining its purpose, architecture, and core components. It describes what PaperEater is, how it is structured as a Tauri desktop application, and the main workflows it implements. For detailed information about specific subsystems, see the following pages:
PaperEater is a desktop application for browsing AI/ML research papers from arXiv. It fetches the 2000 most recent computer science papers from arXiv's listing page, applies keyword-based filtering to identify AI/ML-related publications, and provides PDF download capabilities with progress tracking. An optional DeepL integration translates paper titles to Japanese.
The application addresses the problem of information overload in academic research by automatically filtering arXiv's daily paper flood to surface only publications relevant to current AI/ML trends (LLMs, diffusion models, specific companies like OpenAI/Anthropic, etc.).
Sources: README.md1-11
| Scenario | Description |
|---|---|
| Daily Research Monitoring | Researchers check for new AI/ML papers each day without manually scanning hundreds of publications |
| Trend Tracking | Users interested in specific topics (e.g., "Claude", "Sora", "RAG") get automatic filtering |
| Japanese Researchers | Optional translation enables non-English speakers to quickly understand paper topics |
| Offline Access | PDF downloads allow reading papers without continuous internet connectivity |
Sources: README.md15-45
PaperEater is built on the Tauri framework, which provides a three-layer architecture: a web-based frontend (HTML/JavaScript), a native Rust backend, and a bridge layer that enables communication between them.
Sources: package.json12-16 README.md87-96
| Layer | Technology | Primary Responsibilities |
|---|---|---|
| Frontend | HTML, JavaScript | Business logic: arXiv parsing, keyword filtering, UI rendering, translation workflow |
| Bridge | Tauri Plugins | Capability-restricted APIs: HTTP requests, file system access, URL opening |
| Backend | Rust | Runtime management: window creation, plugin registration, native OS integration |
The frontend contains most of the application logic, while the backend primarily serves as a secure runtime environment that exposes controlled native capabilities through the plugin system.
Sources: package.json1-22
Sources: README.md15-45
fetchPapers() which uses @tauri-apps/plugin-http to GET https://arxiv.org/list/cs/recent?show=2000isInterestingPaper() evaluates each paper against KEYWORD_PATTERNS, checking for AI/ML-related terms#papers divDEEPL_API_KEY is configured, each title is translated via POST to DeepL API@tauri-apps/plugin-opener) or "Download PDF" (streaming download with progress)Sources: README.md17-45
| Component | Technology | Purpose |
|---|---|---|
| UI Layer | HTML, JavaScript | Single-page application in index.html |
| Build Tool | Vite 6.x | Development server and production bundling |
| Type Checking | TypeScript 5.6.x | Static type verification (compilation only, no runtime) |
| Module System | ES Modules | Modern JavaScript module format ("type": "module") |
| Tauri API | @tauri-apps/api v2 | Frontend-to-backend communication interface |
Sources: package.json1-22
| Component | Technology | Purpose |
|---|---|---|
| Runtime | Rust (stable) | Native application backend |
| Framework | Tauri v2 | Cross-platform desktop framework |
| HTTP Client | tauri-plugin-http v2 | Network requests with capability restrictions |
| File Opener | tauri-plugin-opener v2 | Launch external URLs and files |
| Build System | Cargo | Rust package manager and build orchestrator |
Sources: package.json12-22 README.md48-53
PaperEater runs natively on:
The Tauri framework abstracts platform differences, allowing a single codebase to compile to native executables for each platform.
Sources: README.md76-83
PaperEater/
├── index.html # Frontend application (HTML + embedded JS)
├── package.json # npm package manifest
├── README.md # Project documentation (Japanese)
├── LICENSE # MIT License
├── .gitignore # Git exclusion patterns
├── .vscode/ # VS Code workspace settings
│ └── extensions.json # Recommended extensions
├── .github/
│ └── workflows/
│ └── tauri-build.yml # CI/CD for Windows/macOS builds
└── src-tauri/ # Rust backend directory
├── Cargo.toml # Rust package manifest
├── tauri.conf.json # Tauri application configuration
├── build.rs # Rust build script
├── src/
│ └── lib.rs # Main Rust entry point
├── capabilities/
│ └── default.json # Security permissions configuration
├── icons/ # Application icon assets
└── target/ # Build output directory (gitignored)
Sources: README.md87-96
| File | Purpose | Related Documentation |
|---|---|---|
index.html | Frontend application containing all business logic | Frontend Architecture |
src-tauri/src/lib.rs | Rust backend entry point for Tauri runtime | Backend Architecture |
src-tauri/capabilities/default.json | Capability-based security configuration | Security and Capabilities |
package.json | Frontend dependency management and npm scripts | Frontend Dependencies |
src-tauri/Cargo.toml | Backend dependency management and package metadata | Backend Dependencies |
.github/workflows/tauri-build.yml | Automated build pipeline for releases | CI/CD Pipeline |
Sources: README.md87-96 package.json1-22
This diagram illustrates the complete data pipeline from application launch to user interaction. Each node represents a specific function or operation implemented in the codebase. For detailed documentation of each subsystem:
Sources: README.md15-45
The core value proposition of PaperEater is its filtering system, which reduces 2000 papers to a manageable subset (typically 10-50 papers) based on AI/ML relevance.
| Category | Example Keywords | Match Count (Typical) |
|---|---|---|
| General AI Terms | AI, AGI, ASI, LLM, VLM, multimodal | ~20-30 papers |
| Major Companies | OpenAI, Anthropic, DeepMind, Meta, x-ai | ~5-10 papers |
| Specific Models | GPT, ChatGPT, o1, Claude, Gemini, Mistral, LLaMA, Sora | ~15-25 papers |
| Technical Concepts | diffusion, text-to-video, RAG, alignment | ~10-15 papers |
The isInterestingPaper() function checks paper titles, author lists, and submission dates against regular expression patterns for each category. Papers matching any pattern are included in the filtered result set.
For complete details on pattern matching logic and filter implementation, see Paper Fetching and Filtering.
Sources: README.md20-31
# Install dependencies npm install # Run development mode (hot reload enabled) npm run tauri dev # Build production executable npm run tauri build
Development mode launches both the Vite dev server (for frontend hot module replacement) and the Tauri runtime (for backend execution), providing rapid iteration during development.
Production builds generate platform-specific executables in src-tauri/target/release/bundle/, including installers (.msi for Windows, .dmg for macOS).
Sources: README.md48-72 package.json6-10
GitHub Actions workflow (.github/workflows/tauri-build.yml) automatically builds Windows and macOS versions when:
v* is pushedThe CI pipeline produces two artifacts:
PaperEater-windows: Contains .exe and .msi installersPaperEater-macos: Contains .app bundle and .dmg disk imageFor complete CI/CD documentation, see CI/CD Pipeline.
Sources: README.md76-83
Translation is entirely optional and disabled by default. To enable:
index.html and set const DEEPL_API_KEY = "your-key-here";When enabled, the application translates each filtered paper's title from English to Japanese and displays both versions in the UI. If the API key is empty, the application functions normally but displays only English titles.
The translation system is documented in detail at Translation Integration.
Sources: README.md35-45
PaperEater is released under the MIT License, permitting free use, modification, and distribution with minimal restrictions.
Sources: LICENSE1-21 README.md100-101
Refresh this wiki
This wiki was recently refreshed. Please wait 7 days to refresh again.