../
Bevy Jam #4 data exploration
Published: , updated:
Intro
The fourth Bevy Jam (themed “That’s a LOT of Entities!”) offers an opportunity to look at how different people use Bevy (at least in the context of a game jam) in December 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 December 2023 state to:
- April 2023: Bevy Jam 3 analysis, third Bevy Jam
- August 2022: Bevy Jam 2 analysis, second Bevy Jam
- February 2022 Bevy Jam 1 analysis, first Bevy Jam
Some summary highlights
Of the 88 entries (up from 78 entries last jam), 65 (vs. 57 last jam) had code repository links discoverable from their page. Of the top 25 entries, 20 (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 72 unique dependencies built to work directly with Bevy. 37 of these were new relative to the first jam (vs. 38 new last jam). Only 33:q of these dependencies were used by more than a single project.
The highest-ranked new dependency is bevy_xpbd_3d, which is a physics engine based on Extended Position Based Dynamics, landing at 10th position, while it’s 2D variant bevy_xpbd_2d landed at 16th position.
Besides the newcomers above, the biggest upward movers are bevy_embedded_assets up 28 positions from 40th to 12th, while both bevy_mod_picking and bevy_tweening rose 6 positions.
Rank | Dependency | All entries | Top 25 entries | Category | Description |
---|---|---|---|---|---|
1 (π1) | bevy-inspector-egui | 21 | 8 | Debugging | Provide ECS inspection via egui. |
2 (π1) | bevy_asset_loader | 19 | 6 | Assets | Plugin to reduce boilerplate around asset loading, especially around game states transitions. |
3 (π1) | bevy_rapier2d | 15 | 6 | Physics | Plugin to use Rapierβs 2D physics engine |
4 (π2) | bevy_egui | 14 | 4 | Debugging / UI | Plugin to set up and manage egui usage |
5 (π4) | bevy_kira_audio | 10 | 3 | Audio | Plugin to use Kira, providing sound mixing and other features not available in the base audio plugin. |
5 (π7) | bevy_mod_picking | 10 | 3 | 3D Games | Plugin for 3D mouse picking |
7 (π6) | bevy_tweening | 9 | 4 | Animation | Tweening animation plugin. |
8 (π3) | leafwing-input-manager | 7 | 2 | Input | An input manager providing an ergonomic interface over the lower-level input system in Bevy |
9 (π1) | bevy_editor_pls | 5 | 3 | Debugging / Creation | WIP editor-use-case tooling |
10 (π) | bevy_xpbd_3d | 5 | 0 | Physics | A physics engine based on Extended Position Based Dynamics for the Bevy game engine |
11 (π4) | bevy_ecs_ldtk | 4 | 3 | 2D Games / Tilemaps | Plugin to integrate with the LDtk 2D level editor |
12 (π28) | bevy_embedded_assets | 4 | 2 | Assets | Embeds assets into the binary for easier releases. |
13 (π4) | bevy_common_assets | 4 | 1 | Assets | Bevy plugin adding support for common asset formats such as json and yaml |
13 (π4) | bevy_easings | 4 | 1 | Animations | Easings on components using interpolation. |
13 (π6) | bevy_rapier3d | 4 | 1 | Physics | Plugin to use Rapierβs 3D physics engine |
16 (π) | bevy_xpbd_2d | 4 | 0 | Physics | A physics engine based on Extended Position Based Dynamics for the Bevy game engine |
17 (π9) | iyes_progress | 3 | 3 | Assets | Bevy plugin to help implement loading states (fka bevy_loading) |
18 (π1) | bevy_mod_debugdump | 3 | 2 | Debugging | Visualization tools for bevy |
18 (π22) | bevy_wasm_window_resize | 3 | 2 | Platform | makes application canvas match window size |
20 (π) | bevy-persistent | 3 | 1 | Storage / Persistence | Easily manage resources that need to persist across game sessions |
20 (π12) | bevy_ecs_tilemap | 3 | 1 | 2D Games / Tilemaps | Plugin for tilemap rendering |
20 (π) | bevy_rand | 3 | 1 | Randomness | A plugin to integrate rand for ECS optimised RNG for the Bevy game engine |
23 (π6) | bevy_framepace | 3 | 0 | Rendering | Framepacing and framelimiting for Bevy |
23 (π12) | bevy_pkv | 3 | 0 | Storage | Persistent key value store for apps/games |
23 (π17) | bevy_prototype_lyon | 3 | 0 | 2D graphics | Plugin to use Lyon, a 2D graphics library in Rust using path tessellation. |
23 (π3) | bevy_turborand | 3 | 0 | Randomness | A plugin to enable random number generation for the Bevy game engine, built upon turborand |
27 (π) | bevy_nine_slice_ui | 2 | 1 | UI | A nine slice/patch texture plugin for bevy ui nodes, works in wasm |
27 (π) | bevy_spatial | 2 | 1 | ECS | A bevy plugin to track your entities in spatial indices and query them |
27 (π2) | smooth-bevy-cameras | 2 | 1 | Camera | Bevy camera controllers with buttery, exponential smoothing |
30 (π10) | bevy-egui-kbgp | 2 | 0 | Debugging / UI | improved keyboard and gamepad usage for egui in Bevy |
30 (π8) | bevy_atmosphere | 2 | 0 | Rendering | Procedural sky rendering plugin |
30 (π) | bevy_gltf_components | 2 | 0 | Assets | Define components inside gltf files to instantiate within Bevy |
30 (π) | bevy_screen_diagnostics | 2 | 0 | Debugging | Bevy plugin for displaying diagnostics on screen |
34 (π) | bevy-scene-hook | 1 | 1 | ? | Scene manager proof-of-concept |
34 (π) | bevy_basic_camera | 1 | 1 | Camera | Basic FPS/Orbit Camera Controller for Bevy |
34 (π8) | bevy_hanabi | 1 | 1 | Rendering | Hanabi GPU particle system for the Bevy game engine |
34 (π) | bevy_mod_mesh_tools | 1 | 1 | ? | Tools for working with meshes in bevy |
34 (π) | bevy_mod_taa | 1 | 1 | Rendering | Temporal Anti Aliasing for Bevy |
34 (π) | bevy_picoui | 1 | 1 | UI | A little immediate mode ui for bevy with no other dependencies. |
34 (π) | bevy_pipelines_ready | 1 | 1 | Rendering | Bevy plugin for tracking render pipeline status |
34 (π) | bevy_prng | 1 | 1 | Randomness | Provides newtyped RNGs for integration into Bevy |
34 (π) | bevy_ridiculous_ssgi | 1 | 1 | Rendering | Experimental Screen Space Global Illumination |
34 (π) | bevy_smud | 1 | 1 | 2D Graphics | 2d sdf shape renderer plugin for Bevy |
34 (π) | bevy_trauma_shake | 1 | 1 | Camera | Plugin for shaking 2d cameras |
34 (π) | shared_exponent_formats | 1 | 1 | Rendering | Support for texture formats that share exponents between colors |
46 (π23) | belly | 1 | 0 | UI | Declarative UI library |
46 (π17) | bevy-debug-text-overlay | 1 | 0 | Debugging | Convenient debug text overlay plugin. |
46 (π) | bevy-progressbar | 1 | 0 | UI | Create multi-sectioned progressbars and use them in the bevy ui |
46 (π23) | bevy-tnua | 1 | 0 | Controller | A floating character controller for Bevy |
46 (π) | bevy-tnua-rapier2d | 1 | 0 | Rapier 2D integration for bevy-tnua | |
46 (π) | bevy-trait-query | 1 | 0 | ECS | Facilitate ECS queries for traits of components. |
46 (π) | bevy-ui-dsl | 1 | 0 | UI | A DSL library that simplifies the creation of widgets for bevy_ui |
46 (π17) | bevy-ui-navigation | 1 | 0 | UI | A generic UI navigation algorithm for the Bevy engine default UI library. |
46 (π6) | bevy-yoleck | 1 | 0 | Creation | Your Own Level Editor Creation Kit |
46 (π) | bevy_aseprite | 1 | 0 | Assets | Bevy aseprite loader |
46 (π) | bevy_asepritesheet | 1 | 0 | Assets | Aseprite loader that handles animated asesprite sprite sheets |
46 (π) | bevy_geppetto | 1 | 0 | Testing | A proof-of-concept snapshot testing crate for Bevy |
46 (π) | bevy_gltf_blueprints | 1 | 0 | Assets | Define Blueprints/Prefabs inside gltf files and spawn them in Bevy |
46 (π) | bevy_level_edit | 1 | 0 | Level editing | Bevy Poly Level is a level editor and importer that can be integrated directly into your game |
46 (π) | bevy_meshem | 1 | 0 | Rendering | Efficiently generate meshes from a grid of voxels |
46 (π) | bevy_mod_billboard | 1 | 0 | Rendering | Billboard text and texture support for bevy |
46 (π20) | bevy_mod_outline | 1 | 0 | Rendering | drawing outlines around meshes using the vertex extrusion method |
46 (π6) | bevy_mod_raycast | 1 | 0 | 3D Games | Allows easy 3D ray casting against meshes |
46 (π) | bevy_panorbit_camera | 1 | 0 | Camera | A basic pan and orbit camera in Bevy |
46 (π17) | bevy_polyline | 1 | 0 | Rendering | Polyline Rendering for Bevy |
46 (π) | bevy_round_ui | 1 | 0 | UI | A simple rounded-rect material shader for bevy_ui |
46 (π) | bevy_scroller | 1 | 0 | Rendering | Parallax scroller plugin for Bevy |
46 (π) | bevy_toon_shader | 1 | 0 | Rendering | Toon shader for Bevy |
46 (π) | bevy_vector_shapes | 1 | 0 | Rendering / 2D | A library for rendering vector shapes using the Bevy game engine |
46 (π) | bevy_voxel_world | 1 | 0 | ? | A voxel world plugin for Bevy |
46 (π23) | noisy_bevy | 1 | 0 | Randomness / Noise | Procedural noise primitives for Bevy |
46 (π) | orbit_tessellation | 1 | 0 | ? | Draw orbits and optionally tessellate them |
Game development related dependencies
The top 3 non-Bevy-specific gamedev dependencies stayed the same, while cpal arrived with 4 jam entries using it.
The number of dependencies used by more than a single entry more than doubled from 6 last jam to 13 this time.
Rank | Dependency | All entries | Top 25 entries | Category | Description |
---|---|---|---|---|---|
1 (=) | rand | 54 | 15 | Randomness | Random number generation with multiple generators across multiple generation types |
2 (=) | image | 13 | 3 | Graphics | Basic image processing, converting to and from various image formats |
3 (=) | winit | 9 | 2 | Platform | Cross-platform window creation library |
4 (π) | cpal | 4 | 1 | Audio | Low-level cross-platform audio I/O library in pure Rust |
5 (π1) | noise | 3 | 1 | Noise | Procedural noise generation library covering gradient, fBm, and Worley noise |
5 (π14) | rand_distr | 3 | 1 | Randomness | Sampling from random number distributions |
7 (π) | wgpu | 2 | 2 | Platform / Graphics | Rusty WebGPU API wrapper |
8 (π) | delaunator | 2 | 1 | Maths / Geometry | A very fast 2D Delaunay triangulation library |
8 (π1) | pathfinding | 2 | 1 | Pathfinding | Implementations of several pathfinding, flow, and graph algorithms |
8 (π) | rand_core | 2 | 1 | ||
11 (π) | dolly | 2 | 0 | Camera | Composable camera rigs |
11 (π6) | rand_chacha | 2 | 0 | Randomness | Cryptographically secure random number generation using ChaCha |
11 (π) | rfd | 2 | 0 | Platform | Cross platform library for using native file open/save dialogs |
14 (π) | hexx | 1 | 1 | Utility | Tools for working with hexagons - coordinate schemes, rendering, and so forth |
14 (π7) | rodio | 1 | 1 | Audio | Audio playback library |
14 (π) | sdfu | 1 | 1 | Graphics / Rendering | Signed Distance Field/Function Utilities for analytic SDFs for computer graphics |
17 (π2) | egui | 1 | 0 | UI | Easy-to-use immediate mode GUI that runs on both web and native |
17 (π) | egui_extras | 1 | 0 | UI | Extra functionality and widgets for the egui GUI library |
17 (π) | graph | 1 | 0 | Algorithms | A library of high-performant graph algorithms |
17 (π10) | interpolation | 1 | 0 | Animation+ | Interpolating between two numbers (finding points between on some non-uniform scale, often curves) |
17 (π) | rapier2d | 1 | 0 | Physics | 2-dimensional physics engine in Rust. |
17 (π) | texture_packer | 1 | 0 | Textures | A texture packing library using the skyline heuristic |
Assets
Asset Categories
The largest trend at this macro level is the drop-off of font usage (down 11 entries despite 10 additional total entries) and 3D models (down 2). The trend of increasing shader usage continues.
Asset Category | All entries | Top 25 entries |
---|---|---|
Image | 56 (π5) | 20 (π1) |
Audio | 41 (π1) | 17 (π2) |
Font | 35 (π11) | 14 (π6) |
Shader | 16 (π5) | 6 (π1) |
Model | 15 (π2) | 3 (π2) |
Data | 10 (π2) | 2 (π3) |
Level | 4 (π1) | 3 (=) |
Font asset formats
More entries got away without any fonts this time around. Fira, Roboto, and Poppins were the only three faces used multiple times.
Asset Format | All entries | Top 25 entries |
---|---|---|
TrueType (ttf) | 32 (π10) | 13 (π5) |
OpenType (otf) | 3 (π2) | 1 (π2) |
Image asset formats
PNG continues its rule, pulling even further ahead, while Aseprite continues its increasing trend starting last jam.
Asset Format | All entries | Top 25 entries |
---|---|---|
PNG | 55 (π6) | 19 (π1) |
Aseprite | 9 (π3) | 2 (=) |
JPEG | 4 (π1) | 1 (π2) |
SVG | 3 (π2) | 1 (=) |
Gif | 2 (π) | 1 (π) |
Ktx2 | 1 (π1) | 1 (=) |
Krita | 1 (=) | 0 (=) |
Gimp (xcf) | 1 (π1) | 0 (π1) |
Audio asset formats
Ogg increased its lead while Wav and Mp3 usage barely grew with the increased entries.
Asset Format | All entries | Top 25 entries |
---|---|---|
Ogg | 31 (π4) | 11 (=) |
Wav | 12 (π1) | 6 (π2) |
Mp3 | 9 (π1) | 4 (=) |
Model asset formats
3D model usage dropped slightly overall (14 vs. 17 last jam), with glb
gaining while other formats lost.
Asset Format | All entries | Top 25 entries |
---|---|---|
GLTF Binary (glb) | 13 (π2) | 2 (π1) |
GTLF | 3 (π3) | 1 (π2) |
Blender | 2 (π4) | 0 (π2) |
Level asset formats
LDtk remains the preferred (and only) general format for level assets.
Asset Format | All entries | Top 25 entries |
---|---|---|
LDtk | 4 (π1) | 3 (=) |
Shader asset formats
Use of shaders continues increasing (15 vs. 11 and 4 in the last two jams), with WGSL reigning alone.
Asset Format | All entries | Top 25 entries |
---|---|---|
WGSL | 16 (π5) | 6 (π1) |
Data formats
(Since this relies on extensions, this can be fairly inaccurate.)
Asset Format | All entries | Top 25 entries |
---|---|---|
JSON | 6 (π3) | 0 (π2) |
Ron | 4 (π1) | 2 (π2) |
Game dependency and asset data
Methodology
The same methodology as the previous jams’ analyses was followed, with some minor updates:
- Generally migrate from hard-coding to per-jam config file, as well as removing manual steps (like rank movement from previous jam)