How to Contribute

June 27, 2026 · View on GitHub

中文 | English

How to Contribute

? First of all, thank you very much for taking the time to read this guide and learn how you can contribute to Simple Robot! ?

This guide mainly introduces how you can contribute to the core library Simple Robot (referred to below as the simbot core library), as well as most repositories in the Simple Robot Organization and the Simple Robot Library.

Be Friendly

Whether you are filing feedback, submitting contributions, or joining community discussions, please always stay friendly. Avoid aggressive language; do not engage in personal attacks or verbal harassment; do not discriminate against any region/country/race/gender; and do not violate public order, good morals, or laws and regulations.

I Found a Bug

Issues

If you find a bug in the simbot core library or any officially maintained component repository, please first go to Core Library Issues, choose an appropriate category (for example, "Issue Report"), and submit detailed information about the bug (including the library version you are using, error logs, etc.).

When reporting issues, we recommend using Markdown syntax[^about write] to improve readability and presentation, which also helps contributors quickly scan and locate the problem.

[^about write]: About writing and formatting on GitHub

Pull Request

If you are interested and able to help fix the bug, you are welcome to submit your changes via a Pull Request. When you submit code changes, please note the following:

Code Contribution

You can read more details in the Code Contributions section.

Contributors

Both the core library and official component repositories have places in the project to configure contributors. Taking the simbot core library as an example, add your information in the following code in build-logic/shared/src/main/kotlin/P.kt:

override val developers: List<Developer> = developers {
    developer {
        ...
    }
    ...

    Add your info here
}

Contributing in Discussions

Leave your questions or answers in Discussions, and help others find their way~

Code Contributions

[!info] If you want to contribute code, please submit your PR to the v4-dev development branch.

Documentation Style

The simbot core library has some conventions for source-code documentation.

  • For all public and protected declarations (including classes/interfaces, functions, properties, etc.), write fairly detailed KDoc1 in Chinese or in clear, easy-to-understand English. Add documentation tags as appropriate (for example, @param, @throws), but you may omit them if they are already covered in the main text.

  • For non-public declarations (for example, private, internal), if the code is very simple you don't have to write fully detailed documentation comments, but you should add explanatory comments as needed to help other developers read and understand the code.

  • For overridden abstract functions whose meaning has not changed, you may omit documentation comments.

  • For new classes and interfaces, add author information (@author) and version information (@since) whenever possible. Do not add non-standard tags (for example, @Date, @HelloWorld).

Code Style

The simbot core library has a few conventions for overall code style.

Most rules are stored as configuration in .editorconfig. Some IDEs (for example, IntelliJ IDEA) should load it automatically, or you can load it manually. These conventions are similar to the descriptions in Kotlin Coding conventions, which you can also use as a reference.

Below are some common style conventions:

  • Put a space on both sides of infix expressions (such as infix functions or numeric operators like +, -, etc.). For example, use a += b instead of a+=b.

  • Between a variable name and its type, there should be a space after :. For example, use a: Int instead of a:Int.

  • When function parameters (both in definitions and in call arguments) are on the same line, put a space after the separating comma ,. For example, use foo(1, 2) instead of foo(1,2); use function name(a: Int, b: Int) instead of function name(a: Int,b: Int).

  • When a function has many parameters and needs to wrap across multiple lines, place each parameter on its own line and align them, and do not put ( and ) on the same line. If parameters need annotations, put each annotation on its own line. For example:

    function name(
        p1: Int,
        @Anno2
        @Anno1
        p2: String
    )
    

KMP

Most modules in the simbot core library support KMP.

Binary Compatibility

We aim to provide better compatibility guarantees across versions. Therefore, when an API is deprecated or needs to be changed, please ensure the new version remains binary-compatible with older versions, and add appropriate deprecation notes and warnings.

New experimental APIs should also be marked with appropriate opt-in annotations and warnings to inform developers.

Java-Friendly APIs

Public APIs exposed by the simbot core library should be Java-friendly, or have corresponding Java-friendly APIs—especially for suspending functions (suspend fun). Most Java-friendly APIs for suspending functions are implemented via the compiler plugin Kotlin Suspend Transform compiler plugin. See the documentation site chapters Java Friendly and Component Development - Compiler Plugin.

Documentation Contributions

API Documentation

API documentation is generated with Dokka from the documentation comments in the source code. See Documentation Style for more.

Documentation Site

The documentation site for the simbot4 core library lives in a separate repository: simple-robot-library/simbot4-website. Head over there to learn more and contribute!

Community Contributions

Applications

Build applications based on simbot and tag your project with simbot to energize the community ecosystem!

Component Libraries / Plugin Libraries / Others

Build component libraries / plugin libraries based on simbot and tag your project with simbot to energize the community ecosystem! You can:

Footnotes

  1. Document Kotlin code: KDoc