# Contributing to TW Power Tools
If you're here, thanks for your interest in contributing! There are many ways
you can contribute, and you don't need any technical background for most of
them, so don't feel shy! Any help, even if small, is very much appreciated.

## Make feature requests and report issues
If you have some fresh ideas or insight into how to make the extension better,
or you've found a bug (sorry!), you can create a new issue at the Monorail Issue
Tracker:

- https://bugs.avm99963.com/p/twpowertools/issues

Old issues are still hosted in GitHub, while new ones are hosted in Monorail.
You can view the old ones here:

- https://www.github.com/avm99963/infinitegforums/issues

If you're reporting a bug, please consider specifying your browser and version,
and maybe the Javascript console logs (open the Javascript console by pressing
`[ Ctrl ][ Shift ][ J ]`) for the page where the issue occurred.

## Contribute translations
If you speak a language other than English, you can help translate the UI to
your language!

If you're interested in helping with this, please email me at
`me [at] avm99963.com`.

## Beta test the extension
Releasing an update to the stable channel isn't always an easy task, because
bugs might make its way. As new release candidates are tested in the beta
channel before being promoted to the stable channel, this gives us a last chance
to catch any bugs before the release. This is why it's essential that some
people volunteer to beta test the extension.

While using the beta version comes with the risk of coming across bugs, those
are usually minor, and you have the opportunity of using newer features before
everyone else!

*** note
**Note:** It isn't recommended to install the stable and beta version of the
extension at the same time, as you might end up with duplicate injected
components or weird results.
***

You can install the beta channel here:

- https://chrome.google.com/webstore/detail/infinite-scroll-in-tw-bet/memmklnkkhifmflmidnflfcdepamljef

## Contribute code changes
If you're a developer and you'd like to contribute code changes, please feel
free to do so!

You can get started by reading the following docs:

- [Set up the development environment](developers/set_up.md)
- [Build the extension](developers/build.md)
- [Add a new feature](developers/add_feature.md)
- [How to test translations](https://developer.chrome.com/docs/extensions/reference/i18n/#how-to-set-your-browsers-locale)

*** promo
TODO(avm99963): add a link to webext's `manifest.gjson` documentation when it is
created.
***

If you need any help, mentoring or anything else, send me an email at
`me [at] avm99963.com` or create a thread in the
[GitHub discussions tab](https://github.com/avm99963/infinitegforums/discussions).
I will be more than happy to help you :)

You can get a list of open issues which are recommended for first-time
contributors here:

- https://github.com/avm99963/infinitegforums/contribute

These issues will let you get familiar with the codebase and are not too
difficult to implement.

You can also assign yourself any of the open issues which haven't been assigned:

- https://github.com/avm99963/infinitegforums/issues?q=is%3Aissue+is%3Aopen+no%3Aassignee

For your information, the following doc contains a description of the release
cycle for this extension, and how it is performed by its maintainers:

- [Release cycle](developers/release_cycle.md)
