# Contributing to kardo-core
Thank you for your interest in contributing to kardo-core!
## Getting Started
1. Fork and clone the repository
2. Ensure you have Rust 1.74+ installed
3. Run `cargo test -p kardo-core` to verify your setup
## Development
### Building
All commands from the `kardo/` workspace root:
```sh
cargo check -p kardo-core
cargo check -p kardo-core --no-default-features
cargo check -p kardo-core --all-features
```
### Testing
```sh
cargo test -p kardo-core
```
### Benchmarks
```sh
cargo bench -p kardo-core --bench scoring
```
### Documentation
```sh
cargo doc -p kardo-core --no-deps --open
```
## Making Changes
### Code Style
- Follow standard Rust formatting (`cargo fmt`)
- All public items must have doc comments
- Use `thiserror` for error types
- Prefer `impl AsRef<Path>` over `&Path` for path parameters
### Feature Flags
kardo-core uses optional feature flags:
- `watcher` — file system monitoring (default)
- `llm` — LLM integration (default)
- `embeddings` — embedding generation (default)
- `tui` — Ratatui terminal rendering (opt-in)
When adding code that uses optional dependencies, wrap it with `#[cfg(feature = "...")]`.
### Testing
- Add tests for new functionality
- Run `cargo test -p kardo-core` before submitting
- Run `cargo clippy -p kardo-core --all-features` for lint checks
## Pull Requests
1. Create a feature branch from `main`
2. Make your changes with clear commit messages
3. Ensure all tests pass
4. Update CHANGELOG.md under [Unreleased]
5. Submit a PR with a description of changes
## Reporting Issues
Use GitHub Issues. Include:
- kardo-core version
- Rust version
- Steps to reproduce
- Expected vs actual behavior
## License
By contributing, you agree that your contributions will be licensed under the MIT License.