# Contributing to libcbor

libcbor is maintained by [@PJK](https://github.com/PJK) in his spare time on a best-effort basis.

Community contributions are welcome as long as they align with the [project priorities](https://github.com/PJK/libcbor#main-features) and [goals](https://libcbor.readthedocs.io/en/latest/development.html#goals) and follow the guidelines described below. 

## Principles

**Bug reports and questions:** Bug reports and specific technical questions are always welcome. Feel free to open an [issue](https://github.com/PJK/libcbor/issues).   

**Incremental improvements:** Bug fixes (including build scripts, examples, test, typos, CI/CD config, etc.) and documentation improvements (fixes of typos, inaccuracies, out of date content, etc.) are always welcome. Feel free to open a [PR](https://github.com/PJK/libcbor/pulls).

**New features:** I am looking to keep the scope of libcbor small. If you would like to add a feature, please open an issue with your proposal (or reach out to me privately) to discuss if the feature fits into libcbor before opening a PR.

**Major changes:** Please open an issue with your proposal (or reach out to me privately) to discuss if the improvement fits into cbor before opening a PR.

## Pull Request Process

1. Ensure that all CI checks pass
2. Check that the PR is complete and of good quality
    - Include a descriptive summary of the change. If the PR addresses an open issue, please link it.
    - Code changes: Add tests
    - If necessary: Update documentation, including any links 
3. Code changes: Update [the changelog](https://github.com/PJK/libcbor/blob/master/CHANGELOG.md). Do *not* change the version number.

## Interactions

I work on libcbor on a best effort basis. The typical response time is a few days. 

If you do not receive a response in a few weeks, feel free to ping the PR or issue.

## Coding style

C++ code: `./clang-format.sh`.

Function Doxygen strings:
```c
/** An example short description 
 *
 * @param item The item to fooify. Describe any expectations on it (e.g."must
 * be a valid array") and reference counting manipulation.
 * Multi-line descriptions are OK where necessary. 
 * @param target_item Short description, always with a full stop.
 * @return Has fooification succeeded? List any special cases.
 */
 bool foo(cbor_item_t *item, cbor_item_t *target_item);
```

## Resources

- [Development documentation](https://libcbor.readthedocs.io/en/latest/development.html)

