../
Bevy Jam #3 data exploration
Published: , updated:
Intro
The third Bevy Jam offers an opportunity to look at how different people use Bevy (at least in the context of a game jam) in April 2023 - 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 April 2023 state to August 2022 (Bevy Jam 2 analysis, second Bevy Jam) and February 2022 (Bevy Jam 1 analysis, first Bevy Jam).
Some summary highlights
Of the 78 entries (down from 84 entries last jam), 57 (vs. 67 last jam) had code repository links discoverable from their page. Of the top 25 entries, 20 (down from 22 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 66 unique dependencies built to work directly with Bevy (up from 43 last jam). 38 of these were new relative to the first jam (vs. 17 new last jam).
The highest-ranked new dependency is seldom_fn_plugin, which allows the use of Rust functions in place of Bevy Plugin structs.
Biggest upward movers are bevy_ecs_tilemap (up 11 spots to 8th), iyes_progress (up 22 spots to 8th), and bevy_pkv (up 19 spots to 11th).
Rank | Dependency | All entries | Top 25 entries | Category | Description |
---|---|---|---|---|---|
1 (π1) | bevy_kira_audio | 25 | 9 | Audio | Plugin to use Kira, providing sound mixing and other features not available in the base audio plugin. |
2 (π1) | bevy-inspector-egui | 22 | 9 | Debugging | Provide ECS inspection via egui. |
3 (=) | bevy_asset_loader | 20 | 8 | Assets | Plugin to reduce boilerplate around asset loading, especially around game states transitions. |
4 (π1) | bevy_rapier2d | 14 | 4 | Physics | Plugin to use Rapierβs 2D physics engine |
5 (π1) | leafwing-input-manager | 12 | 4 | Input | An input manager providing an ergonomic interface over the lower-level input system in Bevy |
6 (π2) | bevy_egui | 11 | 2 | Debugging / UI | Plugin to set up and manage egui usage |
7 (=) | bevy_rapier3d | 10 | 4 | Physics | Plugin to use Rapierβs 3D physics engine |
8 (π11) | bevy_ecs_tilemap | 7 | 3 | 2D Games / Tilemaps | Plugin for tilemap rendering |
8 (π22) | iyes_progress | 7 | 3 | Assets | Bevy plugin to help implement loading states (fka bevy_loading) |
10 (π1) | bevy_editor_pls | 7 | 2 | Debugging / Creation | WIP editor-use-case tooling |
11 (π19) | bevy_pkv | 6 | 3 | Storage | Persistent key value store for apps/games |
12 (π5) | bevy_mod_picking | 6 | 0 | 3D Games | Plugin for 3D mouse picking |
13 (π4) | bevy_tweening | 5 | 2 | Animation | Tweening animation plugin. |
14 (π3) | bevy_prototype_debug_lines | 5 | 1 | Debugging | Plugin providing a simple line drawing API |
15 (π1) | bevy_ecs_ldtk | 4 | 3 | 2D Games / Tilemaps | Plugin to integrate with the LDtk 2D level editor |
16 (π) | seldom_fn_plugin | 4 | 1 | Ergonomics | Allows using Rust functions in place of Bevy plugins |
17 (π5) | bevy_common_assets | 3 | 2 | Assets | Bevy plugin adding support for common asset formats such as json and yaml |
17 (=) | bevy_easings | 3 | 2 | Animations | Easings on components using interpolation. |
17 (π) | bevy_mod_debugdump | 3 | 2 | Debugging | Visualization tools for bevy |
20 (π) | bevy_dolly | 3 | 1 | Camera | Prototype Bevy plugin using the dolly crate |
20 (π6) | bevy_turborand | 3 | 1 | Randomness | A plugin to enable random number generation for the Bevy game engine, built upon turborand |
22 (π8) | bevy_atmosphere | 3 | 0 | Rendering | Procedural sky rendering plugin |
23 (π) | belly | 2 | 1 | UI | Declarative UI library |
23 (π) | bevy-tnua | 2 | 1 | Controller | A floating character controller for bevy_rapier |
23 (π) | noisy_bevy | 2 | 1 | Randomness / Noise | Procedural noise primitives for Bevy |
26 (π) | bevy_hanabi | 2 | 0 | Rendering | Hanabi GPU particle system for the Bevy game engine |
26 (π4) | bevy_mod_outline | 2 | 0 | Rendering | drawing outlines around meshes using the vertex extrusion method |
26 (π) | oxidized_navigation | 2 | 0 | Pathfinding | A Nav-Mesh generation plugin for Bevy Engine. |
29 (π) | bevy_audio_plus | 1 | 1 | Audio | Component based 2D audio using bevy_kira_audio |
29 (π) | bevy_fps_controller | 1 | 1 | Controller | Bevy plugin that adds a Source engine inspired FPS movement controller |
29 (π) | bevy_framepace | 1 | 1 | Rendering | Framepacing and framelimiting for Bevy |
29 (π) | bevy_mod_aseprite | 1 | 1 | Assets | A plugin for using Aseprite animations in Bevy. |
29 (π) | bevy_pixel_camera | 1 | 1 | Camera / Rendering | A simple pixel-perfect camera plugin for Bevy, suitable for pixel-art. |
29 (π) | bevy_polyline | 1 | 1 | Rendering | Polyline Rendering for Bevy |
29 (π1) | bevy-debug-text-overlay | 1 | 1 | Debugging | Convenient debug text overlay plugin. |
29 (π) | bevy-parallax | 1 | 1 | Rendering | A Bevy plugin for creating a parallax effect |
29 (π6) | bevy-ui-navigation | 1 | 1 | UI | A generic UI navigation algorithm for the Bevy engine default UI library. |
29 (π) | bevycheck | 1 | 1 | Internals | Helpful bevy error messages by proc-macro |
29 (π) | smooth-bevy-cameras | 1 | 1 | Camera | Bevy camera controllers with buttery, exponential smoothing |
40 (π) | bevy_console | 1 | 0 | Debugging / UI | Developer console for bevy |
40 (π) | bevy_dice | 1 | 0 | ? | Physics-based dice rolls for bevy |
40 (π14) | bevy_embedded_assets | 1 | 0 | Assets | Embeds assets into the binary for easier releases. |
40 (π10) | bevy_mod_raycast | 1 | 0 | 3D Games | Allows easy 3D ray casting against meshes |
40 (π) | bevy_mod_reqwest | 1 | 0 | ? | Use reqwest with the bevy runtime in the same way on both web and native |
40 (π) | bevy_mod_sysfail | 1 | 0 | Ergonomics | Procedural macro to handle system failure |
40 (π24) | bevy_ninepatch | 1 | 0 | UI | Support 9-patch images - let you have a UI that scales only the right parts of your images |
40 (π) | bevy_pancam | 1 | 0 | Camera | A 2d-camera plugin for bevy that works with orthographic cameras. |
40 (π) | bevy_picking_core | 1 | 0 | UI | A modular picking plugin for Bevy |
40 (π) | bevy_picking_highlight | 1 | 0 | UI | Highlights picked objects from bevy_mod_picking |
40 (π) | bevy_picking_input | 1 | 0 | UI | Default inputs for bevy_mod_picking |
40 (π) | bevy_picking_sprite | 1 | 0 | UI | Enable picking bevy Sprites using bevy_mod_picking |
40 (π) | bevy_pixels | 1 | 0 | Rendering | Bevy plugin that uses Pixels (a tiny pixel buffer) for rendering |
40 (π26) | bevy_prototype_lyon | 1 | 0 | 2D graphics | Plugin to use Lyon, a 2D graphics library in Rust using path tessellation. |
40 (π) | bevy_replicon | 1 | 0 | Networking | High level networking for the Bevy game engine |
40 (π) | bevy_sprite3d | 1 | 0 | Rendering | Use 2d sprites in a 3d bevy scene. |
40 (π) | bevy_titan | 1 | 0 | Assets | load textures atlas from spritesheet manifest files written in ron |
40 (π) | bevy_trickfilm | 1 | 0 | Assets | load spritesheet animations from manifest files written in ron |
40 (π) | bevy_wasm_window_resize | 1 | 0 | Platform | makes application canvas match window size |
40 (π) | bevy_wave_collapse | 1 | 0 | Algorithms | implementation of the waveform collapse algorithm for bevy |
40 (π17) | bevy-egui-kbgp | 1 | 0 | Debugging / UI | improved keyboard and gamepad usage for egui in Bevy |
40 (π) | bevy-vfx-bag | 1 | 0 | Graphics | An assortment of visual effects for use with Bevy applications |
40 (π10) | bevy-yoleck | 1 | 0 | Creation | Your Own Level Editor Creation Kit |
40 (π) | pixelate_mesh | 1 | 0 | Rendering | Apply a pixelation effect to any Bevy mesh or scene without post-processing. |
40 (π) | seldom_state | 1 | 0 | AI / Algorithms | Component-based state machine plugin for Bevy |
40 (π) | spew | 1 | 0 | Ergonomics | Helper for spawning objects in Bevy |
40 (π) | warbler_grass | 1 | 0 | Graphics | A bevy plugin for creating 3d grass in your game |
Game development related dependencies
Non-Bevy-specific gamedev dependencies are still growing by total number used (30 this jam, 25 in the second jam, 15 in the first jam), but are overall infrequently used - only 6 of these dependencies are used by more than one entry.
Rank | Dependency | All entries | Top 25 entries | Category | Description |
---|---|---|---|---|---|
1 (=) | rand | 41 | 14 | Randomness | Random number generation with multiple generators across multiple generation types |
2 (π1) | image | 14 | 5 | Graphics | Basic image processing, converting to and from various image formats |
3 (π1) | winit | 13 | 4 | Platform | Cross-platform window creation library |
4 (=) | noise | 3 | 1 | Noise | Procedural noise generation library covering gradient, fBm, and Worley noise |
5 (π3) | getrandom | 2 | 1 | Randomness | Use operating system-sourced random data |
5 (π3) | rand_chacha | 2 | 1 | Randomness | Cryptographically secure random number generation using ChaCha |
7 (π) | bracket-algorithm-traits | 1 | 1 | Algorithms | Traits required for the bracket-* crates. |
7 (π) | bracket-geometry | 1 | 1 | Algorithms | Geometry utilities. Rect, lines, circles, distance calculations. |
7 (π) | bracket-pathfinding | 1 | 1 | Algorithms | Pathfinding and field-of view utilities. |
7 (π) | egui_dock | 1 | 1 | UI | Docking support for `egui` |
7 (π) | egui-gizmo | 1 | 1 | UI | 3d transformation gizmo built on top of the egui library. |
7 (π9) | euclid | 1 | 1 | Graphics | small library for geometric types with a focus on 2d graphics and layout |
7 (π2) | interpolation | 1 | 1 | Animation+ | Interpolating between two numbers (finding points between on some non-uniform scale, often curves) |
7 (π9) | lerp | 1 | 1 | Graphics / Maths | Generic linear interpolation and extrapolation |
7 (π9) | pathfinding | 1 | 1 | Pathfinding | Implementations of several pathfinding, flow, and graph algorithms |
7 (π) | rand_pcg | 1 | 1 | Randomness | Implements a selection of PCG random number generators. |
7 (π) | rodio | 1 | 1 | Audio | Audio playback library |
7 (π) | spring_motion | 1 | 1 | Animation | Small&simple spring spring motion library |
19 (π) | yarn-spinner-rs | 1 | 0 | Dialogue | Interpreter for the Yarn language |
19 (π11) | benimator | 1 | 0 | Animation | Plugin for sprite sheet animation |
19 (π) | big-brain | 1 | 0 | AI | Utility AI library for games |
19 (π) | colorgrad | 1 | 0 | Graphics | color scales library for data visualization, charts, games, maps, generative art and others. |
19 (π11) | egui | 1 | 0 | UI | Easy-to-use immediate mode GUI that runs on both web and native |
19 (π) | egui_commonmark | 1 | 0 | UI | A commonmark viewer for egui |
19 (π) | graphalgs | 1 | 0 | Algorithms | Graph algorithms based on the Rust ‘petgraph’ library. |
19 (π) | indextree | 1 | 0 | Algorithms | Arena based tree structure by using indices instead of reference counted pointers |
19 (π) | inline_tweak | 1 | 0 | Ergonomics | Tweak values directly from the source code |
19 (π11) | rand_distr | 1 | 0 | Randomness | Sampling from random number distributions |
19 (π) | renet_visualizer | 1 | 0 | Debugging / Networking | Egui metrics visualizer for the renet crate |
19 (π) | vek | 1 | 0 | Maths | Generic 2D-3D math swiss army knife for game engines |
Assets
Asset Categories
Audio continues to become more prevalent in the jam, despite 6 fewer entries, 5 more entries had audio assets in this jam over the last.
Asset Category | All entries | Top 25 entries |
---|---|---|
Image | 51 (π1) | 19 (π3) |
Font | 46 (π7) | 20 (π1) |
Audio | 40 (π5) | 15 (π3) |
Model | 17 (π1) | 5 (π1) |
Shader | 11 (=) | 5 (=) |
Data | 8 (π2) | 5 (π1) |
Level | 5 (=) | 3 (π1) |
Font asset formats
Fira remains the only family that is used by more than a single entry.
Asset Format | All entries | Top 25 entries |
---|---|---|
TrueType (ttf) | 42 (π12) | 18 (π2) |
OpenType | 5 (π1) | 3 (π1) |
Image asset formats
Asset Format | All entries | Top 25 entries |
---|---|---|
PNG | 49 (π10) | 18 (π4) |
Aseprite | 6 (π1) | 2 (=) |
JPEG | 5 (π1) | 3 (=) |
Gimp (xcf) | 2 (=) | 1 (=) |
Ktx2 | 2 (new) | 1 (new) |
SVG | 1 (π2) | 1 π1 |
Krita | 1 (π1) | 0 (π2) |
Audio asset formats
Ogg remains in the lead while Wav and Mp3 usage grew. FLAC was used for the first time in two entries.
Asset Format | All entries | Top 25 entries |
---|---|---|
Ogg | 27 (=) | 11 (π4) |
Wav | 11 (π4) | 4 (=) |
Mp3 | 8 (π3) | 4 (π2) |
FLAC | 2 (new) | 1 (new) |
Model asset formats
3D model usage remained steady overall (17 entries total vs. 18 last jam, 5 in top 25 vs. 4).
Asset Format | All entries | Top 25 entries |
---|---|---|
GLTF Binary (glb) | 11 (π3) | 3 (=) |
GLTF JSON (gltf) | 6 (π1) | 3 (π2) |
Blender | 6 (π4) | 2 (π1) |
OBJ | 1 (π1) | 0 (π2) |
Level asset formats
LDtk remains the preferred (and only) general format for level assets.
Asset Format | All entries | Top 25 entries |
---|---|---|
LDtk | 5 (=) | 3 (π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 (=) | 5 (=) |
GLSL | 1 (new) | 1 (new) |
Data formats
(Since this relies on extensions, this can be fairly inaccurate.)
Asset Format | All entries | Top 25 entries |
---|---|---|
Ron | 5 (π3) | 4 (π3) |
Json | 3 (π2) | 2 (π1) |
Cbor | 1 (new) | 0 (new) |
Toml | 1 (π1) | 0 (=) |
Game dependency and asset data
Methodology
The same methodology as the first jam’s analysis was followed, with some minor updates:
- new file formats - Ktx2, GLSL, CBOR
- Detect more repository URLs - codeberg.org
- Generally migrate from hard-coding to config file, to support future analysis.