We love your input! We want to make contributing to OpenMemory as easy and transparent as possible, whether it's:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
- Becoming a maintainer
We use GitHub to host code, to track issues and feature requests, as well as accept pull requests.
We Use Github Flow
Pull requests are the best way to propose changes to the codebase. We actively welcome your pull requests:
- Fork the repo and create your branch from
main. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes.
- Make sure your code lints.
- Issue that pull request!
In short, when you submit code changes, your submissions are understood to be under the same MIT License that covers the project. Feel free to contact the maintainers if that's a concern.
Report bugs using Github's issues
We use GitHub issues to track public bugs. Report a bug by opening a new issue.
Great Bug Reports tend to have:
- A quick summary and/or background
- Steps to reproduce
- Be specific!
- Give sample code if you can
- What you expected would happen
- What actually happens
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
People love thorough bug reports. I'm not even kidding.
- Node.js 21+ and npm
- Python 3.8+ (for Python SDK development)
- Git
- Docker (optional, for containerized development)
# Clone the repository
git clone https://github.com/CaviraOSS/OpenMemory.git
cd openmemory
# Install dependencies
cd packages/openmemory-js
npm install
# Start development server
npm run dev
# Run Omnibus Test (Comprehensive Parity Check)
npx tsx tests/test_omnibus.ts# Navigate to Python SDK
cd packages/openmemory-py
# Install development dependencies
pip install -e .[dev]
# Run Omnibus Test
pytest tests/test_omnibus.py# Build and run with Docker Compose
docker-compose up --build
# Run in development mode
docker-compose -f docker-compose.dev.yml up- Use TypeScript for all new code
- Follow ESLint configuration
- Use Prettier for formatting
- 2-space indentation
- Semicolons required
- Follow PEP 8 style guide
- Use black for formatting
- 4-space indentation
- Type hints for all public functions
- Docstrings for all modules, classes, and functions
Use conventional commits format:
type(scope): description
[optional body]
[optional footer(s)]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat(embedding): add Google Gemini embedding provider
fix(database): resolve memory leak in connection pooling
docs(api): update HSG endpoint documentation
cd packages/openmemory-js
npx tsx tests/test_omnibus.ts # Run Omnibus Testcd packages/openmemory-py
python -m pytest tests/test_omnibus.py # Run Omnibus TestWhen working on HSG features:
- Sector Classification: Ensure new content types are properly classified
- Waypoint Management: Consider graph traversal implications
- Memory Decay: Account for temporal aspects in new features
- Cross-Sector Queries: Test functionality across all brain sectors
- Create migration scripts for schema changes
- Test with existing data
- Update both TypeScript types and documentation
- Consider impact on all embedding providers
- Maintain backwards compatibility when possible
- Version new endpoints appropriately
- Update OpenAPI documentation
- Test with all SDK implementations
- Create GitHub issue with detailed proposal
- Discuss architecture implications
- Consider HSG impact and sector routing
- Plan testing strategy
- Create feature branch from
main - Implement core functionality
- Add comprehensive tests
- Update documentation
- Submit pull request
- Address code review feedback
- Ensure all tests pass
- Update changelog
- Merge to main branch
- Deploy to staging environment
- Verify functionality
- Update release notes
When adding new embedding providers:
- Provider Interface: Implement the standard embedding interface
- Error Handling: Add appropriate fallback mechanisms
- Configuration: Add provider-specific configuration options
- Testing: Create comprehensive tests for the new provider
- Documentation: Update configuration documentation
- Examples: Add examples demonstrating the new provider
Example provider structure:
interface EmbeddingProvider {
name: string;
embed(text: string, options?: any): Promise<number[]>;
getDimensions(): number;
isAvailable(): Promise<boolean>;
}- Update OpenAPI specs for new endpoints
- Include request/response examples
- Document error conditions
- Update SDK documentation
- Use TSDoc for TypeScript code
- Use docstrings for Python code
- Include usage examples
- Document complex algorithms
- Update README files
- Create tutorial content
- Update example code
- Document configuration options
- Profile database queries
- Monitor memory usage
- Test with large datasets
- Consider async operations
- Minimize bundle size
- Optimize API calls
- Consider caching strategies
- Test network conditions
- Sanitize all user inputs
- Validate API parameters
- Check authentication tokens
- Rate limit requests
- Encrypt sensitive data
- Secure API endpoints
- Validate file uploads
- Monitor access patterns
We follow Semantic Versioning:
- MAJOR: Breaking changes
- MINOR: New features (backwards compatible)
- PATCH: Bug fixes (backwards compatible)
- Update version numbers
- Update CHANGELOG.md
- Run full test suite
- Build all packages
- Create GitHub release
- Deploy to production
- Update documentation
- GitHub Discussions for questions
- GitHub Issues for bug reports
- Discord server for real-time chat
- Stack Overflow with
openmemorytag
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Contributors will be recognized in:
- CONTRIBUTORS.md file
- GitHub contributors page
- Release notes
- Project documentation
Thank you for contributing to OpenMemory! 🧠✨