# Contributing to Codetics OCPP
Contributions are welcome: bug reports, interoperability findings with real charging stations, fixes and features.
## Before you start
- For anything larger than a small fix, open an issue first to discuss the approach.
- Base behaviour on the specification: cite the requirement (e.g. `K01.FR.06`, `OCPP-J 1.6 ยง4.1.1`, an errata entry)
in code comments and pull requests when a rule comes from it.
- Keep the OCPP versions separate: a change for one version goes into that version's crate and handler module.
## Development
Requirements: Rust 1.88 or later, PostgreSQL (with `pg_trgm` and `unaccent`), OpenSSL.
```sh
cargo fmt --all
cargo clippy --workspace --all-targets # must be warning-free
cargo test --workspace # unit tests and README examples
TEST_DATABASE_URL=postgres://localhost/postgres cargo test --workspace # + end-to-end tests
```
The end-to-end tests create and drop their own temporary databases on the server of `TEST_DATABASE_URL`.
New behaviour needs tests: unit tests next to the code, end-to-end tests in `tests/` with a scripted station when a
station interaction is involved.
## Licensing of contributions
This project is licensed under the [Apache License, Version 2.0](LICENSE). As stated in section 5 of that license,
any contribution you submit is licensed under the same terms. New source files start with:
```rust
// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 Kevin Vavelin, Codetics (https://codetics.fr)
```
You may add your own copyright line below it for substantial contributions. The [NOTICE](NOTICE) file crediting
Kevin Vavelin / Codetics as the origin of the work must remain in the project and in any fork.