../
Bevy Jam #2 data exploration
Published: , updated:
Intro
The second Bevy Jam offers an opportunity to look at how different people use Bevy (at least in the context of a game jam) in August 2022 - which features they use, which crates they use to augment Bevy, and also which asset types they use. This can help highlight commonly used features or dependencies that might encourage further development, or infrequently used or avoided features that may need better documentation, examples, or improvements.
It also offers an opportunity to compare this August 2022 state to the previous analysis from the first Bevy Jam held in February 2022.
Some summary highlights
Of the 84 entries (up from 74 entries last jam), 67 (vs. 56 last jam) had code repository links discoverable from their page. Of the top 25 entries, 22 (same as last jam) had such links.
Dependencies
These are the direct expressed dependencies of the game project, representing what the game developer directly interacted with. I somewhat-arbitrarily decided what were “game development-related” vs. general Rust or infrastructural crates.
Bevy-specific dependencies
There were 43 unique dependencies built to work directly with Bevy. 17 of these were new relative to the first jam.
The highest-ranked new dependency is iyes_loopless, which was an implementation similar to the stageless RFC that will be landing in Bevy 0.10.
Biggest upward movers are leafwing-input-manager (up 10 spots to 6th), bevy_rapier3d (up 14 spots to 7th), and bevy_editor_pls (up 24 spots to 9th).
Biggest downward mover was heron (down 9 spots to 12th, now in maintenance mode).
Rank | Dependency | All entries | Top 25 entries | Category | Description |
---|---|---|---|---|---|
1 (=) | bevy-inspector-egui | 30 | 9 | Debugging | Provide ECS inspection via egui. |
2 (=) | bevy_kira_audio | 23 | 11 | Audio | Plugin to use Kira, providing sound mixing and other features not available in the base audio plugin. |
3 (π1) | bevy_asset_loader | 18 | 8 | Assets | Plugin to reduce boilerplate around asset loading, especially around game states transitions. |
4 (π) | iyes_loopless | 14 | 6 | Internals | Composable alternatives to Bevy’s States/FixedTimestep/RunCriteria |
5 (π3) | bevy_rapier2d | 12 | 4 | Physics | Plugin to use Rapierβs 2D physics engine |
6 (π10) | leafwing-input-manager | 12 | 3 | Input | An input manager providing an ergonomic interface over the lower-level input system in Bevy |
7 (π14) | bevy_rapier3d | 12 | 2 | Physics | Plugin to use Rapierβs 3D physics engine |
8 (π3) | bevy_egui | 10 | 3 | Debugging / UI | Plugin to set up and manage egui usage |
9 (π24) | bevy_editor_pls | 7 | 2 | Debugging / Creation | WIP editor-use-case tooling |
9 (π3) | bevy_tweening | 7 | 2 | Animation | Tweening animation plugin. |
11 (=) | bevy_prototype_debug_lines | 6 | 3 | Debugging | Plugin providing a simple line drawing API |
12 (π9) | heron | 6 | 2 | Physics | Ergonomic 2d/3d physics API using Rapier. |
12 (π) | bevy_common_assets | 5 | 1 | Assets | Bevy plugin adding support for common asset formats such as json and yaml |
14 (π1) | bevy_ecs_ldtk | 4 | 1 | 2D Games / Tilemaps | Plugin to integrate with the LDtk 2D level editor |
14 (π8) | bevy_prototype_lyon | 4 | 1 | 2D graphics | Plugin to use Lyon, a 2D graphics library in Rust using path tessellation. |
16 (=) | bevy_ninepatch | 3 | 2 | UI | Support 9-patch images - let you have a UI that scales only the right parts of your images |
17 (π6) | bevy_easings | 3 | 1 | Animations | Easings on components using interpolation. |
17 (π6) | bevy_mod_picking | 3 | 1 | 3D Games | Plugin for 3D mouse picking |
19 (π9) | bevy_ecs_tilemap | 3 | 0 | 2D Games / Tilemaps | Plugin for tilemap rendering |
19 (π) | bevy-inspector-egui-rapier | 3 | 0 | Debugging | bevy-inspector-egui integration for rapier |
21 (π) | bevy_editor_pls_default_windows | 2 | 1 | Debugging / Creation | In-App editor tools for bevy apps |
21 (π8) | bevy-web-resizer | 2 | 1 | Rendering | Automatically resizes app on the web to the size of the window |
23 (π) | bevy_jornet | 2 | 0 | Multiplayer | Bevy plugin for Jornet - a social game server |
23 (=) | bevy-egui-kbgp | 2 | 0 | Debugging / UI | Improved keyboard and gamepad navigation and usage for egui |
23 (=) | bevy-ui-navigation | 2 | 0 | UI | UI navigation algorithm for the default UI library |
26 (π14) | bevy_embedded_assets | 1 | 1 | Assets | Embeds assets into the binary for easier releases. |
26 (π) | bevy_fundsp | 1 | 1 | Audio | integrates FunDSP into Bevy. |
26 (π) | bevy_simple_stat_bars | 1 | 1 | ? | draw stat bars that follow sprites |
26 (π) | bevy_turborand | 1 | 1 | Randomness | A plugin to enable random number generation for the Bevy game engine, built upon turborand |
30 (π3) | bevy_atmosphere | 1 | 0 | Rendering | Procedural sky rendering plugin |
30 (π) | bevy_ecs_ldtk_macros | 1 | 0 | 2D Games / Tilemaps | Derive macros for bevy_ecs_ldtk. |
30 (π) | bevy_mod_outline | 1 | 0 | Rendering | drawing outlines around meshes using the vertex extrusion method |
30 (π14) | bevy_mod_raycast | 1 | 0 | 3D Games | Allows easy 3D ray casting against meshes |
30 (π) | bevy_mod_wanderlust | 1 | 0 | Controller | A character controller library for Bevy Engine using Rapier physics |
30 (π) | bevy_pkv | 1 | 0 | Storage | Persistent key value store for apps/games |
30 (π) | bevy_transform_gizmo | 1 | 0 | Creation | A 3D transform gizmo for Bevy |
30 (π7) | bevy-debug-text-overlay | 1 | 0 | Debugging | Convenient debug text overlay plugin. |
30 (π7) | bevy-scene-hook | 1 | 0 | ? | Scene manager proof-of-concept |
30 (π7) | bevy-ui-build-macros | 1 | 0 | UI | Macros to speed up the process of defining UIs |
30 (π) | bevy-yoleck | 1 | 0 | Creation | Your Own Level Editor Creation Kit |
30 (π) | iyes_progress | 1 | 0 | Assets | Bevy plugin to help implement loading states (fka bevy_loading ) |
30 (π) | iyes_scene_tools | 1 | 0 | Creation | Extra helpers for working with Bevy Scenes |
Game development related dependencies
Continuing from last jam, a common reason for dependencies is randomness, and many entries have no non-Bevy dependencies beyond the rand crate (and some don’t even have that one).
Rank | Dependency | All entries | Top 25 entries | Category | Description |
---|---|---|---|---|---|
1 (=) | rand | 51 | 18 | Randomness | Random number generation with multiple generators across multiple generation types |
2 (π) | winit | 8 | 2 | Platform | Cross-platform window creation library |
3 (π) | image | 7 | 1 | Graphics | Basic image processing, converting to and from various image formats |
4 (π2) | noise | 6 | 1 | Noise | Procedural noise generation library covering gradient, fBm, and Worley noise |
5 (π3) | interpolation | 3 | 1 | Animation+ | Interpolating between two numbers (finding points between on some non-uniform scale, often curves) |
6 (π4) | fastrand | 3 | 0 | Randomness | PRNG using Wyrand |
7 (π) | rapier2d | 2 | 2 | Physics | 2-dimensional physics engine in Rust. |
8 (=) | benimator | 1 | 1 | Animation | Plugin for sprite sheet animation |
8 (π) | egui | 1 | 1 | UI | Easy-to-use immediate mode GUI that runs on both web and native |
8 (=) | getrandom | 1 | 1 | Randomness | Use operating system-sourced random data |
8 (π) | imagesize | 1 | 1 | Graphics | Quick probing of image dimensions without loading the entire file |
8 (π) | ldtk2 | 1 | 1 | Level editing | A thin crate for people who just want to use ldtk files freely. |
8 (π) | lyon | 1 | 1 | Graphics | 2D Graphics rendering on the GPU using tessellation. |
8 (π6) | rand_chacha | 1 | 1 | Randomness | Cryptographically secure random number generation using ChaCha |
8 (π) | rand_distr | 1 | 1 | Randomness | Sampling from random number distributions |
16 (π) | euclid | 1 | 0 | Graphics | small library for geometric types with a focus on 2d graphics and layout |
16 (π) | ezing | 1 | 0 | Graphics / Maths | Easing functions |
16 (π) | glam | 1 | 0 | Maths | A simple and fast 3D math library for games and graphics |
16 (π) | inkling | 1 | 0 | Dialogue | Implementation of the Ink markup language |
16 (π) | lerp | 1 | 0 | Graphics / Maths | Generic linear interpolation and extrapolation |
16 (π14) | pathfinding | 1 | 0 | Pathfinding | Implementations of several pathfinding, flow, and graph algorithms |
16 (π) | turborand | 1 | 0 | Randomness | Fast random number generators |
16 (π) | union-find | 1 | 0 | Algorithm | Union-find operation |
16 (π) | wavy | 1 | 0 | Audio | Asynchronous cross-platform real-time audio recording & playback |
16 (π) | wgpu | 1 | 0 | Platform / Graphics | Rusty WebGPU API wrapper |
Bevy feature usage
Plugins and features
One big change is that MaterialMesh2dBundle
usage has grown significantly - just 3 entries used it in the previous jam, while 13 did in this jam. Of the top 25, just 1 entry used it last jam, but 7 did in this jam.
Plugin | All entries | Top 25 entries | Description |
---|---|---|---|
DefaultPlugins | 67 | 22 | The default set of commonly used built-in plugins |
NodeBundle | 42 | 16 | Bevy UIβs node-based UI element |
FrameTimeDiagnosticsPlugin | 16 | 7 | A plugin that populates diagnostics about frame time and fps |
LogDiagnosticsPlugin | 12 | 6 | A plugin that outputs diagnostics to logs |
FixedTimestep | 7 | 3 | Used for attaching actions at a fixed time step, rather than time taken for frames. |
MaterialMesh2dBundle | 13 (from 3) | 7 (from 1) | Custom 2D material (custom shaders) |
MaterialPlugin | 4 | 2 | Custom material (3D) |
Assets
Asset Categories
Image, font, and audio assets are much more common this time across all and top 25 entries. All top 25 entries used images, all but one used fonts, and all but 4 had audio (vs. only half last jam). Shader use is up as well - 11 (vs. 4) across all entries, and 5 (vs. 2) in top 25 entries.
Asset Category | All entries | Top 25 entries |
---|---|---|
Image | 60 (π16) | 22 (π4) |
Font | 57 (π10) | 21 (π3) |
Audio | 35 (π10) | 18 (π7) |
Model | 18 (π9) | 4 (π1) |
Shader | 11 (π7) | 5 (π3) |
Data | 10 (π7) | 4 (π3) |
Level | 5 (π1) | 2 (=) |
Font asset formats
TrueType extended its already vast lead against OpenType compared to last jam. Fira Sans and Fira Mono remained the most common font faces, and Roboto, Fredoka One, VT323, and PressStart2P each had two entries using them.
Asset Format | All entries | Top 25 entries |
---|---|---|
TrueType (ttf) | 54 (π10) | 20 (π3) |
OpenType | 4 (π7) | 2 (π2) |
Image asset formats
PNG continues its domination for plain images/textures, while vector graphics (with SVG) and Krita make an appearance for the first time.
Asset Format | All entries | Top 25 entries |
---|---|---|
PNG | 59 (π17) | 22 (π5) |
JPEG | 6 (π4) | 3 (π1) |
Aseprite | 5 (=) | 2 (π1) |
SVG | 3 (new) | 2 (new) |
Krita | 2 (new) | 2 (new) |
Gimp (xcf) | 2 (π1) | 1 (π1) |
Audio asset formats
Ogg extended its lead vs. Wav, while Mp3 usage grew from just 1 entry last jam to 5.
Asset Format | All entries | Top 25 entries |
---|---|---|
Ogg | 27 (π9) | 15 (π6) |
Wav | 7 (π4) | 4 (π1) |
Mp3 | 5 (π4) | 2 (π2) |
Model asset formats
The binary GLTF version extended its lead, and overall more total entries used 3D models (18 vs. 9 last jam), but usage in Top 25 dropped by a single entry from 5 last jam to 4.
Asset Format | All entries | Top 25 entries |
---|---|---|
GLTF Binary (glb) | 14 (π5) | 3 (π2) |
GLTF JSON (gltf) | 5 (π2) | 1 (π1) |
Blender | 3 (π2) | 1 (=) |
Obj | 2 (new) | 2 (new) |
Level asset formats
LDtk usage grew somewhat, while Tiled didn’t make an appearance this jam (vs. 1 entry last jam).
Asset Format | All entries | Top 25 entries |
---|---|---|
LDtk | 5 (π2) | 2 (π1) |
Shader asset formats
Use of shaders increased significantly (11 entries vs. 4 last jam), with WGSL sitting alone (vs. two entries using SPIR-V last jam).
(Since this relies on extensions, this can be fairly inaccurate.)
Asset Format | All entries | Top 25 entries |
---|---|---|
WGSL | 11 (π9) | 5 (π3) |
Data formats
(Since this relies on extensions, this can be fairly inaccurate.)
Asset Format | All entries | Top 25 entries |
---|---|---|
Json | 5 | 2 |
Ron | 2 | 1 |
Toml | 2 | 0 |
Obj | 2 | 2 |
Csv | 1 | 0 |
Xml | 1 | 0 |
Yaml | 1 | 1 |
Game dependency and asset data
Methodology
The same methodology as the first jam’s analysis was followed, with some minor updates:
- new file formats - SVG, Krita, Flac, Ron, Toml, Yaml, Xml, and Csv.
- Detect more repository URLs - gitlab.com and git.txmn.tk
- Generally migrate from hard-coding to config file, to support future analysis.