There are two main ways to contribute to the project — submitting issues and submitting fixes/changes/improvements via pull requests.
Both bug reports and feature requests are welcome.
Submit issues here.
Questions about usage and general inquiries are better suited for StackOverflow
or the #coroutines channel in KotlinLang Slack.
There, questions get answered much quicker than they do in this issue tracker,
while also reducing the load on the maintainers.
Describing why you're interested in some specific issue helps us a lot with looking for the best solution. The more experiences, concerns, or suggestions get shared, the better! If you feel that something you know hasn't been said (or even if the issue discussion is too long to actually make sure of it), please do not hesitate to drop a line.
If you feel like your case was already described and you have nothing to add, please still let us know about your interest by leaving a smiley (👍)! We use these as indicators of demand.
Plese not that there is no need to leave a comment in this case, though. "+1"-style remarks or questions about the progress on an issue do not bring anything new and only create noise, complicating the job of finding insight in the discussion. Please avoid this. We reserve the right to delete such comments.
We love PRs. Submit PRs here. However, please keep in mind that maintainers will have to support the resulting code of the project, so do familiarize yourself with the following guidelines.
- All development (both new features and bug fixes) is performed in the
developbranch.- The
masterbranch contains the sources of the most recently released version. - Base your PRs against the
developbranch. - The
developbranch is pushed to themasterbranch during release. - Documentation in markdown files can be updated directly in the
masterbranch, unless the documentation is in the source code, and the patch changes line numbers.
- The
- If you fix documentation:
- After fixing/changing code examples in the
docsfolder or updating any references in the markdown files run the Knit tool and commit the resulting changes as well. The tests will not pass otherwise. - If you plan extensive rewrites/additions to the docs, then please contact the maintainers to coordinate the work in advance.
- After fixing/changing code examples in the
- If you make any code changes:
- Follow the Kotlin Coding Conventions. Use 4 spaces for indentation. Do not add extra newlines in function bodies: if you feel that blocks of code should be logically separated, then separate them with a comment instead.
- Build the project to make sure everything works and passes the tests.
- If you fix a bug:
- Note that what is a bug for some can be a feature for others. Are you truly fixing a problem? Is there an open issue about it?
- Write the test that reproduces the bug.
- Fixes without tests are accepted only in exceptional circumstances if it can be shown that writing the corresponding test is too hard or otherwise impractical.
- Follow the style of writing tests that is used in this project:
name test functions as
testXxx. Don't use backticks in test names.
- If you introduce any new public APIs:
- Before setting out to work on a problem, comment on the existing issue or create one, proposing a solution and gathering feedback first before implementing it. PRs that add new API without the corresponding issue with positive feedback about the proposed implementation are very unlikely to be approved or reviewed.
- All new APIs must come with documentation and tests.
- All new APIs are initially released with the
@ExperimentalCoroutinesApiannotation and graduate later. - Update the public API dumps and commit the resulting changes as well. It will not pass the tests otherwise.
This library is built with Gradle.
- Run
./gradlew buildto build, also running all of the tests. - Run
./gradlew <module>:checkto test the module you are working with to speed things up during development. - Run
./gradlew <module>:jvmTestto perform only the fast JVM tests of a multiplatform module. - Run
./gradlew <module>:jvmTest -Pstress=trueto run both fast and slow JVM tests.
JDK >= 11 referred to by the JAVA_HOME environment variable.
- Use Knit for updates to documentation:
- Run
./gradlew knitto update the example files, links, tables of content. - Commit the updated documents and examples together with other changes.
- Run
- Use the Kotlin Gradle Plugin's ABI validation for updates to public API:
- Run
./gradlew updateLegacyAbito update API index files. - Commit the updated API indexes together with other changes.
- Run
- The full release procedure checklist is here.
- If something cannot be done, not convenient, or does not work — submit an issue.
- "How to do something" questions — StackOverflow.
- Discussions and general inquiries — use
#coroutineschannel in KotlinLang Slack.