Contributing Guide
Contributions to TeaLeaf are welcome. The full contributing guide lives in the repository root:
That document covers project architecture, build instructions, testing, the canonical test suite, version management, PR process, and areas of interest for contributors.
This page highlights the key points. See the Development Setup page for environment setup details.
Ways to Contribute
- Bug reports – file issues on GitHub with reproduction steps
- Feature requests – open an issue describing the use case
- Code contributions – submit pull requests
- Documentation – fix typos, improve explanations, add examples
- Language bindings – create bindings for Python, Java, Go, etc.
- Test cases – add canonical test fixtures or edge case tests
Repository
Source code: github.com/krishjag/tealeaf
Pull Request Checklist
- Fork the repository and create a feature branch from
main - Make your changes
- Run tests and lints:
cargo test --workspace cargo clippy --workspace cargo fmt --check - If you modified .NET bindings:
cd bindings/dotnet && dotnet test - Submit a pull request against
main
CI runs on Linux, macOS, and Windows automatically. Version consistency is validated on every PR.
Code Style
Rust
- Standard
rustfmtformatting (no custom config) - Standard
clippylints (no custom config) - Document public APIs with
///doc comments - Edition 2021
C# (.NET)
- Standard C# naming conventions
- XML doc comments for public APIs
- Target frameworks: net6.0, net8.0, net10.0, netstandard2.0
Areas of Interest
New Language Bindings
The FFI layer exposes a C-compatible API that can be used from any language. See the FFI Overview for getting started.
Desired bindings:
- Python (via
ctypesorcffi) - Java/Kotlin (via JNI or JNA)
- Go (via cgo)
- JavaScript/TypeScript (via WASM or N-API)
Format Improvements
- Union support in binary encoding
- Bytes literal syntax in text format
- Streaming/append-only mode
Tooling
- Editor plugins (VS Code syntax highlighting for
.tl) - Schema validation tooling
- Web-based playground
License
By contributing, you agree that your contributions will be licensed under the MIT License.