diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..b18ae3a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,119 @@ +# Contributing to QuantumTerminal + +Thank you for your interest in contributing to QuantumTerminal! This is a free, open-source project and we welcome contributions from developers of all experience levels. + +--- + +## Table of Contents + +- [Code of Conduct](#code-of-conduct) +- [How Can I Contribute?](#how-can-i-contribute) +- [Getting Started](#getting-started) +- [Development Workflow](#development-workflow) +- [Commit Message Guidelines](#commit-message-guidelines) +- [Pull Request Process](#pull-request-process) + +--- + +## Code of Conduct + +Be respectful, constructive, and collaborative. We are here to build something useful together. + +--- + +## How Can I Contribute? + +There are many ways to contribute, regardless of your skill level: + +### High Priority Areas + +| Area | Description | Skills Needed | +|------|-------------|---------------| +| **MT5 Thread Safety** | Fix concurrency issues in `backend/data_server.py` | Python, Threading | +| **New Broker Providers** | Add Interactive Brokers, Alpaca, or other providers | Python, REST/WebSocket APIs | +| **Open-Source React UI** | Rebuild the frontend as open-source JSX/React source | React, TypeScript | +| **Backend Architecture** | Refactor and improve the FastAPI backend structure | Python, FastAPI | +| **Documentation** | Improve setup guides, add inline comments, write wiki pages | Markdown, Python | +| **Testing** | Add unit and integration tests for backend modules | Python, pytest | + +### Other Ways to Help + +- Report bugs by opening an Issue +- Suggest new features or overlays +- Review open Pull Requests +- Improve the README or this CONTRIBUTING guide +- Share the project with others who might be interested + +--- + +## Getting Started + +### Prerequisites + +- Python 3.10+ +- Node.js (optional, for Electron packaging) +- Git +- A broker account for live data (MT5, Rithmic, or Tradovate) — optional for backend-only work + +### Local Setup + +```bash +# 1. Fork the repository on GitHub +# 2. Clone your fork +git clone https://github.com/YOUR_USERNAME/QuantumTerminal.git +cd QuantumTerminal + +# 3. Install Python dependencies +cd backend +pip install fastapi uvicorn websockets watchfiles yfinance MetaTrader5 + +# 4. Run the backend server +python launcher.py + +# 5. Open the UI +# Navigate to http://127.0.0.1:8502 in your browser +``` + +--- + +## Development Workflow + +1. **Fork** the repository and create your branch from `main` +2. **Name your branch** descriptively: `feature/add-ibkr-provider` or `fix/mt5-thread-safety` +3. **Make your changes** with clear, focused commits +4. **Test your changes** before submitting +5. **Open a Pull Request** with a clear description of what you changed and why + +--- + +## Commit Message Guidelines + +Use clear, descriptive commit messages: + +``` +feat: add Interactive Brokers provider +fix: resolve MT5 thread-safety issue in data_server.py +docs: update installation instructions +refactor: reorganize backend provider structure +test: add unit tests for websocket broadcaster +``` + +Prefixes: `feat`, `fix`, `docs`, `refactor`, `test`, `chore` + +--- + +## Pull Request Process + +1. Ensure your PR description clearly explains **what** changed and **why** +2. Reference any related Issues using `Closes #issue_number` +3. Keep PRs focused — one feature or fix per PR is preferred +4. Be responsive to review feedback +5. PRs are merged by the maintainer after review + +--- + +## Questions? + +Feel free to open an Issue with the `question` label if you need help getting started or have any questions about the codebase. + +We appreciate every contribution, no matter how small.