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 ci
locally 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