bevy/docs/plugins_guidelines.md
dinococo 3adcba9461
Grammar fixes (#1390)
* Minor grammar fixes

* Minor grammar fixes

Fixed punctuation and wording.

* Minor grammar fixes

FIxed spelling, wording and formatting.
2021-02-03 19:15:25 -08:00

7 KiB

Third Party Plugin Guidelines

Bevy has a plug and play architecture, where you can easily add plugins for new features, or replace built-in plugins with your own.

This document targets plugin authors.

Checklist

Naming

You are free to use a bevy_xxx name for your plugin, but please be reasonable. If you are about to claim a generic name like bevy_animation, bevy_color, or bevy_editor, please ask first. The rationale is explained here.

Promotion

You can promote your plugin in Bevy's communities:

Bevy Version Supported

Indicating which version of your plugin works with which version of Bevy can be helpful for your users. Some of your users may be using an older version of Bevy for any number of reasons. You can help them find which version of your plugin they should use. This can be shown as a simple table in your readme with each version of Bevy and the corresponding compatible version of your plugin.

bevy bevy_awesome_plugin
0.4 0.3
0.3 0.1

Bevy Features

You should disable Bevy features that you don't use. This is because with Cargo, features are additive. Features that are enabled for Bevy in your plugin can't be disabled by someone using your plugin. You can find the list of features here.

bevy = { version = "0.4", default-features = false, features = ["..."] }

Master Branch Tracking

If you intend to track Bevy's master branch, you can specify the latest commit you support in your Cargo.toml file:

bevy = { version = "0.4", git = "https://github.com/bevyengine/bevy", rev="509b138e8fa3ea250393de40c33cc857c72134d3", default-features = false }

You can specify the dependency both as a version and with git, the version will be used if using the dependency from crates.io, the git dependency will be used otherwise.

Bevy is evolving very fast. You can use one of these badges to communicate to your users how closely you intend to track Bevy's master branch.

badge
description
code
Bevy tracking I intend to track master as much as I can [![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-master-lightblue)](https://github.com/bevyengine/bevy/blob/master/docs/plugins_guidelines.md#master-branch-tracking)
Bevy tracking I will only follow released Bevy versions [![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-released%20version-lightblue)](https://github.com/bevyengine/bevy/blob/master/docs/plugins_guidelines.md#master-released%20version-tracking)

General Advices for a Rust Crate

This advice is valid for any Rust crate.

Licensing

Rust projects are often dual licensed with MIT and Apache 2.0. Bevy is licensed with MIT. Those are great options to license your plugin.

Small Crate Size

To avoid long build times in your crate and in projects using your plugin, you should aim for a small crate size:

  • Disable Bevy features that you don't use
  • Avoid large dependencies
  • Put optional functionality and dependencies behind a feature

Documentation and Examples

Documentation and examples are very useful for a crate.

In the case of a plugin for Bevy, a few screenshots or movies/animated GIFs from your examples can really help understanding what your plugin can do.

Additionally, it can be helpful to list:

  • Stages added by the plugin
  • Systems used
  • New components available

Tests and CI

Tests are always good! For CI, you can check this example for a quickstart using GitHub Actions. As Bevy has additional Linux dependencies, you should install them before building your project, here is how Bevy is doing it. Even if you don't have many (or any) tests, setting up CI will compile check your plugin and ensure a basic level of quality.

Publishing your Plugin

There are some extra fields that you can add to your Cargo.toml manifest, in the [package] section:

field description
description a description of the plugin
repository URL of the plugin source repository
license the plugin license
keywords keywords for the plugin - "bevy" at least is a good idea here
categories categories of the plugin - see the full list on crates.io
exclude files to exclude from the released package - excluding the assets folder that you may have is a good idea, as well as any large file that are not needed by the plugin

Once a crate is published to crates.io, there are two badges that you can add to your README.md for easy links:

badge code
crates.io [![crates.io](https://img.shields.io/crates/v/bevy_awesome_plugin)](https://crates.io/crates/bevy_awesome_plugin)
docs.rs [![docs.rs](https://docs.rs/bevy_awesome_plugin/badge.svg)](https://docs.rs/bevy_awesome_plugin)