# How to Contribute

1. Get familiar with the [Introduction](../introduction/index.md)
2. Follow the [development environment](development-environment.md) setup
3. Make changes on a new branch
4. Test your changes thoroughly
5. Submit a pull request

If you have questions, reach out in our Matrix chat or open an issue on GitHub.

## Making Changes

- Focus on a single issue
- Follow code style (validate with `make lint`, fix with `make lint-fix`)
- Perform static type checking with (`make pkg-ty-${package_name}`)
- Add tests and update documentation
- Verify all tests pass (`make pkg-test-${package_name}` or `make test`)

## Commit Messages

- Use clear, descriptive messages
- Reference issue numbers when applicable
- Follow conventional commit format when possible

## Pull Requests

- Provide a clear description
- Link to relevant issues
- Ensure all tests pass

## Types of Contributions

### Code

We welcome bug fixes, features, and improvements to the core codebase.

### Drivers

To create a new driver scaffold:

```console
$ ./__templates__/create_driver.sh driver_package DriverClass "Your Name" "your.email@example.com"
```

For private drivers, consider forking our
[jumpstarter-driver-template](https://github.com/jumpstarter-dev/jumpstarter-driver-template).

Test your driver: `make pkg-test-${package_name}`

### Documentation

Jumpstarter uses Sphinx with Markdown. Build and preview locally:

```console
$ make docs-serve
```

### Jumpstarter Enhancement Proposals

For significant changes that affect multiple components, change public APIs, or
require community consensus, follow the
[{term}`JEP` process](jeps/index.md).
