Thank you for your interest in contributing to RAGFS! This document provides guidelines for contributing to the project.
By participating in this project, you agree to maintain a respectful and inclusive environment for everyone. Please read our full Code of Conduct.
- Check existing issues to avoid duplicates
- Use a clear, descriptive title
- Include:
- Steps to reproduce
- Expected vs actual behavior
- System information (OS, Rust version)
- Relevant logs with
--verboseflag
- Open an issue describing the feature
- Explain the use case and benefits
- Discuss implementation approach
- Wait for feedback before implementing
- Fork the repository
- Create a feature branch from
main - Make your changes
- Ensure tests pass
- Submit a pull request
- Rust 1.88 or later
- FUSE development libraries
- Git
# Clone your fork
git clone https://github.com/YOUR_USERNAME/ragfs.git
cd ragfs
# Build all crates
cargo build
# Run tests
cargo test
# Build in release mode
cargo build --release# Run the CLI
cargo run --release -- index /path/to/test
# Run with verbose logging
cargo run --release -- -v index /path/to/testAll code must be formatted with rustfmt:
cargo fmt --allAll code must pass clippy without warnings:
cargo clippy --all-targets --all-features -- -D warnings- All public items should have documentation comments
- Use
///for item documentation - Use
//!for module documentation - Include examples where helpful
- Write tests for new functionality
- Run the full test suite before submitting:
cargo test --allFollow conventional commit style:
type(scope): short description
Longer description if needed.
Types:
feat: New featurefix: Bug fixdocs: Documentation onlyrefactor: Code change that doesn't fix a bug or add a featuretest: Adding or updating testschore: Build, CI, or tooling changes
Examples:
feat(index): add support for PDF extraction
fix(query): handle empty result sets correctly
docs(readme): update installation instructions
ragfs/
├── crates/
│ ├── ragfs/ # Main CLI binary
│ ├── ragfs-core/ # Core traits and types
│ ├── ragfs-fuse/ # FUSE filesystem
│ ├── ragfs-index/ # Indexing engine
│ ├── ragfs-chunker/ # Document chunking
│ ├── ragfs-embed/ # Embedding generation
│ ├── ragfs-extract/ # Content extraction
│ ├── ragfs-store/ # Vector storage
│ ├── ragfs-query/ # Query execution
│ ├── ragfs-python/ # Python bindings (PyO3)
│ └── ragfs-mcp/ # MCP server for Claude Desktop
└── docs/ # Documentation
- Create extractor in
ragfs-extract - Implement the
ContentExtractortrait - Register in
ExtractorRegistry - Add tests
- Update documentation
- Create chunker in
ragfs-chunker - Implement the
Chunkertrait - Register in
ChunkerRegistry - Add tests
- Update documentation
- Update documentation if needed
- Add tests for new functionality
- Ensure CI passes
- Request review from maintainers
- Address review feedback
- Squash commits if requested
Open an issue with the "question" label or reach out to maintainers.
By contributing, you agree that your contributions will be licensed under the same license as the project (MIT OR Apache-2.0).