Contributing to Scholare
Thank you for your interest in contributing! Scholare is an open-source project and we welcome contributions of all kinds.
First off, thank you for considering contributing to Scholare! Dedicated open-source contributors like you make this tool better for researchers everywhere.
Please review the ARCHITECTURE.md document first. It comprehensively outlines the data flow, module responsibilities, and how to add new API sources to the search pipeline.
Getting Started
1. Fork & Clone
2. Set Up Development Environment
python -m venv venv
# Windows
.\venv\Scripts\Activate.ps1
# macOS / Linux
source venv/bin/activate
pip install -e ".[dev]"
3. Set Up API Keys
Development Workflow
Running Tests
Code Style
- Use type hints on all function signatures.
- Write docstrings for all public functions (NumPy style).
- Keep functions focused — one function, one job.
- Use
pathlib.Pathinstead ofos.pathwhere possible.
Commit Messages
Use clear, descriptive commit messages:
feat: add Unpaywall API integration for better OA discovery
fix: handle missing DOI in Semantic Scholar response
docs: add arXiv search example to README
test: add unit tests for deduplication logic
How to Contribute
🐛 Bug Reports
Open an issue with: - What you expected to happen - What actually happened - Steps to reproduce - Your Python version and OS
💡 Feature Requests
Check the ROADMAP.md first — your idea might already be listed. If not, open an issue describing the feature and why it would be useful.
🔧 Pull Requests
- Create a branch from
main:git checkout -b feat/my-feature - Make your changes
- Add tests if applicable
- Run
pytestto make sure everything passes - Open a PR with a clear description of what you changed and why
📡 Adding New API Integrations
We're especially interested in contributions that add new data sources. See ROADMAP.md for the list. When adding an API:
- Add the client function(s) to
scholare/api.py(or a new module if it's large) - Make it optional — the tool should work without the new API key
- Add the API key to
.env.examplewith a comment explaining where to get it - Update
config.pyto load the new key - Add tests that don't require a live API key (mock the responses)
- Update README with setup instructions
Code of Conduct
Please read and follow our Code of Conduct.
License
By contributing, you agree that your contributions will be licensed under the MIT License.