Thank you for your interest in contributing to PluresDB! This guide will help you get started.
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/pluresdb.git cd pluresdb - Install dependencies:
npm install
- Set up development environment:
-
Create a branch for your changes:
git checkout -b feature/your-feature-name
-
Make your changes following our coding standards:
- Write clean, readable code
- Add tests for new features
- Update documentation as needed
-
Follow commit conventions: We use Conventional Commits for automated releases:
# Bug fixes git commit -m "fix: resolve database connection timeout" # New features git commit -m "feat: add vector similarity search" # Breaking changes git commit -m "feat!: redesign API for better performance BREAKING CHANGE: The query API has changed. See docs for migration guide."
-
Test your changes:
npm test npm run lint npm run fmt:check -
Push to your fork:
git push origin feature/your-feature-name
-
Open a Pull Request on GitHub
We use conventional commits to automate versioning and changelog generation. Your commit messages should follow this format:
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
feat:- New feature (minor version bump)fix:- Bug fix (patch version bump)docs:- Documentation changesstyle:- Code style changes (formatting, etc.)refactor:- Code refactoringperf:- Performance improvementstest:- Adding or updating testschore:- Maintenance tasksci:- CI/CD changesbuild:- Build system changes
For breaking changes, add ! after the type or include BREAKING CHANGE: in the footer:
git commit -m "feat!: change database schema format"or
git commit -m "feat: redesign storage engine
BREAKING CHANGE: The storage format has changed. Databases created with
version 1.x need to be migrated using the migration tool."- TypeScript/JavaScript: Follow the ESLint configuration
- Rust: Follow standard Rust formatting (rustfmt)
- Formatting: Run
npm run fmtbefore committing
- Write tests for new features
- Ensure all tests pass:
npm test - Tests should be clear and maintainable
- Title your PR using Conventional Commits format - The CI enforces this.
PR titles must follow the same format as commit messages:
Do not use
docs: update CONTRIBUTING guide feat(storage): add blob compression fix(sync): handle disconnected peers gracefully chore(deps): bump @plures/design-dojo to 0.10.6[WIP]or other non-conventional prefixes — use a draft PR instead. - Update documentation if you're changing functionality
- Add tests for new features
- Ensure CI passes - All checks must pass
- Request review from maintainers
- Address feedback promptly
- Squash commits if requested to keep history clean
Releases are automated! When your PR is merged to main:
- CI automatically analyzes your commit messages
- Determines version bump (major, minor, or patch)
- Updates CHANGELOG.md
- Creates and pushes a git tag
- Publishes to npm, Docker Hub, and Deno
- Creates a GitHub release with binary packages
For details, see RELEASE_PROCESS.md.
pluresdb/
├── .github/
│ └── workflows/ # GitHub Actions workflows
├── crates/ # Rust workspace
│ ├── pluresdb-core/ # Core database engine
│ ├── pluresdb-storage/ # Storage layer
│ ├── pluresdb-sync/ # P2P synchronization
│ └── ...
├── web/ # Web UI (Svelte)
├── src/ # TypeScript/Deno source
├── scripts/ # Build and release scripts
├── docs/ # Documentation
└── tests/ # Test files
# Build the project
npm run build
# Build library only
npm run build:lib
# Build web UI
npm run build:web
# Run tests
npm test
# Lint code
npm run lint
# Format code
npm run fmt
# Check formatting
npm run fmt:check
# Run dev server
npm run dev
# Pre-release checks
npm run release-check- Be respectful and inclusive
- Welcome newcomers
- Focus on constructive feedback
- Help maintain a positive community
By contributing to PluresDB, you agree that your contributions will be licensed under the GNU Affero General Public License v3.0 (AGPL v3).
Thank you for contributing to PluresDB! 🎉