# Contributing to Screen 13
Thank you for taking the time to look over this document. You are encouraged to open issues, submit
PRs, suggest changes, or anything else you feel might move this project forward.
If you have any questions or would like private coorespondence with the main author, John Wells,
please use john@attackgoat.com.
## Ground Rules
This section lists the absolute minimum requirements you must understand and practice in order to be
involved with this project. If you fail to uphold the spirit of these rules you will not have any
access to make changes within this project and you may be banned entirely.
## Licesnsing Requirements
All contributions, ideas, issues, or other efforts you expend on this project must be provided
using the existing MIT or Apache 2.0 license agreements applied to this project. This means that
anything you do for this project will be provided to the public without any strings or conditions
attached. You must also have the right to provide any code or ideas under these licenses as you will
retain no ownership or control after contribution.
## Technical Requirements
All code must:
- Be modern Rust code (currently 2021 edition, latest stable compiler) _or_ GLSL.
- Pass `cargo fmt` and `cargo clippy` (debug and release) with no warnings
- Support required platforms: Linux, Mac, Windows
- Use only `crates.io`-published crates
### Recommentations
All code should:
- Follow the [guidelines](https://rust-lang.github.io/api-guidelines/)
- Provide useful documentation and comments, including private code
- Support other platforms: Android, iOS
## How do I get started
Download the source code and play around with the examples, see README.md for more.
Any and all contributions are acceptable, including major changes to design or capabilities. If your
change is big please ask or open an issue to make sure the rest of the community is on board with
your new ideas.
### What if my idea is too radical
If we cannot fit your change into the existing design without breaking API for other users or
creating other headaches then we will add your code into a `contrib` directory or separate branch as
needed.
## Release checklist
- Run `cargo update` to ensure you have the latest dependencies
- Double-check `cargo clippy --release` and `cargo fmt` _(use `contrib/rel-mgmt/check`)_
- Double-check all examples compile and run as intended _(use `contrib/rel-mgmt/run-all-examples`)_
- Double-check the above on all supported platforms
- Change log: Add a section for the new version
- Change log: Transfer unreleased details to the new version
- Change log: Add diff link (they are at the bottom)
- Run `cargo publish`
- Github: Add a tag for the version