We’re thrilled to have you join us in contributing to MIRIX! As passionate champions of open-source collaboration, we’re committed to building not only a powerful tool but also a vibrant community where developers of all skill levels can make impactful contributions. Before you get started, we encourage you to review the MIRIX Code Standards. This will help ensure consistency and set the stage for success for everyone involved.
Our contribution pathways are designed to make it easy for you to get involved and start making an impact immediately:
Our developers frequently tag issues with "help wanted" and "good first issue," highlighting pre-vetted tasks with a clear scope. Plus, there's always someone available to assist you if you encounter any challenges along the way.
Noticed something that needs fixing? Got an idea for an improvement? You don’t need permission to identify problems—the people closest to the pain are often the best equipped to envision solutions.
For feature requests, share the story of what you’re trying to achieve. What are you working on? What’s standing in your way? What would make your life easier? Submit your ideas through our GitHub issue tracker using the "Feature Request" label.
For bug reports, it’s important to provide enough details for us to reproduce the issue. Use our GitHub issue tracker and include the following:
- A clear and concise title summarizing the problem
- What you were attempting to do when the issue occured
- What you expected to happen versus what actually happened
- A code sample, test case, or detailed steps to help us replicate the issue
Not all contributions are about writing code—sometimes the most impactful ones come from sharing how you're using our project. If you're leveraging MIRIX in an interesting way, consider adding it to the samples folder. This not only helps others explore new possibilities but also counts as a meaningful contribution. We often highlight compelling examples in our blog posts and videos, so your work could be showcased to the broader community!
Join our Discord community and contribute by lending a hand at the helpdesk. Answering questions and helping troubleshoot issues is an invaluable way to support the community. The knowledge you share today could save someone hours of frustration tomorrow.
Please keep changes as concise as possible. For major architectural changes (>500 LOC), please create a GitHub issue (RFC) to discuss the technical design and justification. Otherwise, we may tag it as "rfc-required" and potentially not review the PR.
Once you've identified an issue tagged with "good first issue" or "help wanted," or have an example you'd like to share, here's how to turn it into a contribution:
-
Share your proposed approach in the issue discussion or on Discord before diving into the code. This ensures your solution aligns with MIRIX's architecture from the outset and helps avoid potential rework.
-
Fork the repository, create a branch for your changes, and submit a pull request (PR). Detailed technical instructions are provided below — be open to feedback during the review process.
-
Fork the repository on GitHub.
-
Clone your fork locally:
git clone https://github.com/Mirix-AI/MIRIX cd MIRIX -
Set up your development environment:
Follow the "Development Installation" section in this Get Started document.
If you prefer to poetry instead of pip, follow these additional steps. (uv follows similar steps)
- Ensure you have Python 3.11+ installed.
- Install poetry: https://python-poetry.org/docs/
- [Recommended] Configure poetry to create virtual env under your current project
poetry config virtualenvs.in-project true - Install project dependencies:
make install
- Create a new branch for your changes:
git checkout -b your-branch-name - Make your changes in the codebase.
- Write or update tests as necessary.
- Run the tests to ensure they pass:
make test - Format your code:
make format - Run linting checks:
make lint
- Commit your changes:
git commit -m "Your commit message" - Push to your fork:
git push origin your-branch-name - Submit a pull request through the GitHub website to https://github.com/Mirix-AI/MIRIX.
- Provide a clear title and description of your changes.
- Include any relevant issue numbers in the PR description.
- Ensure all tests pass and there are no linting errors.
- Update documentation if you're changing functionality.
We use several tools to maintain code quality:
- Ruff for linting and formatting
- Pyright for static type checking
- Pytest for testing
Before submitting a pull request, please run:
make check
This command will format your code, run linting checks, and execute tests.
When contributing integrations for third-party services (LLM providers, embedding services, databases, etc.), please follow these patterns:
All third-party integrations must be optional dependencies to keep the core library lightweight. Follow this pattern:
-
Add to
pyproject.toml: Define your dependency as an optional extra AND include it in the dev extra:[project.optional-dependencies] your-service = ["your-package>=1.0.0"] dev = [ # ... existing dev dependencies "your-package>=1.0.0", # Include all optional extras here # ... other dependencies ]
-
Use TYPE_CHECKING pattern: In your integration module, import dependencies conditionally:
from typing import TYPE_CHECKING if TYPE_CHECKING: import your_package from your_package import SomeType else: try: import your_package from your_package import SomeType except ImportError: raise ImportError( 'your-package is required for YourServiceClient. ' 'Install it with: pip install MIRIX[your-service]' ) from None
-
Benefits of this pattern:
- Fast startup times (no import overhead during type checking)
- Clear error messages with installation instructions
- Proper type hints for development
- Consistent user experience
-
Do NOT:
- Add optional imports to
__init__.pyfiles - Use direct imports without error handling
- Include optional dependencies in the main
dependencieslist
- Add optional imports to
- Place LLM clients in
mirix/llm_client/ - Place embedding clients in
mirix/embedder/ - Place database drivers in
mirix/driver/ - Place database script python files in
database/ - Place samples in
samples/ - Follow existing naming conventions (e.g.,
your_service_client.py)
- Add comprehensive tests in the appropriate
tests/subdirectory - Mark integration tests with
_intsuffix if they require external services - Include both unit tests and integration tests where applicable
Stuck on a contribution or have a half-formed idea? Come say hello in our Discord server. Whether you're ready to contribute or just want to learn more, we're happy to have you! It's faster than GitHub issues and you'll find both maintainers and fellow contributors ready to help.
Thank you for your contribution to MIRIX!