learner
A Rust-powered academic research management system
Features
-
Academic Paper Management
- Extract metadata from multiple sources (arXiv, IACR, DOI)
- Support for both URLs and direct identifiers
- Automatic source detection
- Full paper metadata including authors, abstracts, and publication dates
-
Local Database Management
- SQLite-based storage for offline access
- Full-text search capabilities
- Case-insensitive title search
- Duplicate detection and handling
- Platform-specific default locations
- PDF management with configurable storage location
-
Command Line Interface (
learnerd)- Interactive database management
- Paper addition and retrieval
- Search functionality
- PDF downloading and management
- Beautiful, colored output
- Detailed logging options
Installation
Library
Add this to your Cargo.toml:
[]
= "0.2" # Core library
CLI Tool
which will install a binary you can reference with the command learner.
Usage
Library Usage
use ;
async
CLI Usage
# Initialize a new database (interactive)
# Add a paper (auto-detects source)
# Skip PDF download
# Download PDF for existing paper
# Retrieve paper details
# Search papers
# Verbose output for debugging
# Clean up database (with confirmation)
Daemon Management
learnerd can run as a background service for paper monitoring and updates.
System Service Installation
Linux (sytemd):
# Install and start
# Manage
# Remove
MacOS (launchd):
# Install and start
# Manage
|
# Remove
Logs
- Linux: /var/log/learnerd/
- macOS: /Library/Logs/learnerd/
Files: learnerd.log (main, rotated daily), stdout.log, stderr.log
Troubleshooting
- Permission Errors: Check ownership of log directories
- Won't Start: Check system logs and remove stale PID file if present
- Installation: Run commands as root/sudo
Project Structure
The project consists of two main components:
-
learner- Core library providing:- Paper metadata extraction
- Database management
- PDF download capabilities
- Source-specific clients (arXiv, IACR, DOI)
- Error handling
-
learnerd- CLI application offering:- User-friendly interface
- PDF management
- Interactive confirmations
- Colored output
- Logging and debugging capabilities
Roadmap
Phase 1: Core Improvements
- PDF management
- PDF content extraction
- DB/Paper removal functionality
- Batch paper operations
- Export capabilities
- Enhanced search features
- Custom metadata fields
Phase 2: Advanced Features
- LLM-powered paper analysis
- PDF daemon for paper versioning and annotations
- Automated paper discovery
- Citation graph analysis
- Web interface
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. Before making major changes, please open an issue first to discuss what you would like to change.
Continuous Integration
The project maintains code quality through automated CI workflows:
-
Code Formatting
- rustfmt: Enforces consistent Rust code formatting
- taplo: Ensures TOML files (like Cargo.toml) follow consistent style
-
Code Quality
- clippy: Rust's official linter for catching common mistakes and enforcing best practices
- cargo-udeps: Identifies unused dependencies to keep the project lean
-
Testing
- Runs the full test suite across all workspace members
- TODO: Check cross-platform
-
Release Safety
- cargo-semver-checks: Verifies that version bumps follow semantic versioning rules
- Prevents accidental breaking changes in minor/patch releases
All CI checks must pass before merging pull requests, maintaining consistent quality across contributions.
Development
This project uses just as a command runner.
# First time setup
Common Commands
Platform Builds
All commands support standard Cargo flags:
[!TIP] Running
just cilocally ensures your code will pass CI checks!
System Requirements
The setup command will attempt to install required system dependencies, but if you need to install them manually:
Linux (Debian/Ubuntu)
macOS
# Add to your shell profile
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- arXiv API for paper metadata
- IACR for cryptography papers
- CrossRef for DOI resolution
- SQLite for local database support