Thank you for your interest in contributing.
This project focuses on performance, clarity, and deterministic behavior. Contributions should follow these principles.
Before contributing, understand the core goals:
- deterministic behavior
- minimal design
- no hidden state
- performance-first mindset
If your change adds complexity, it must bring clear value.
git clone https://github.com/vixcpp/template.git
cd templategit checkout -b feature/my-featurecmake --preset dev-ninja
cmake --build --preset build-ninjactest --preset test-ninja- Use modern C++ (C++20)
- Prefer RAII
- Avoid raw pointers unless necessary
- Use
std::unique_ptrfor ownership - Avoid unnecessary allocations
- Clear and explicit code
- Small, focused functions
- No hidden behavior
- Avoid magic
- Use English names
- Be descriptive and consistent
Do not break core guarantees:
- AST must remain deterministic
- Renderer must remain stateless
- No I/O inside rendering
- No global mutable state
All changes must include tests when relevant.
- Add tests in
tests/ - Keep tests deterministic
- Avoid external dependencies
If your change impacts performance:
- update benchmarks in
benchmarks/ - explain performance impact in PR
Use clear messages:
feat(parser): add filter node support
fix(renderer): avoid unnecessary allocations
refactor(cache): use shared template handlesBefore opening a PR:
- ensure project builds
- ensure tests pass
- keep PR focused (one change = one PR)
- describe clearly what you changed and why
- do not introduce heavy dependencies
- do not add magic behavior
- do not break deterministic design
- do not add features without discussion (for large changes)
For large features:
- open an issue first
- discuss design before implementation
Good contributions are:
- simple
- explicit
- fast
- aligned with architecture
Thanks for contributing to Vix Template Engine 🚀