
# Objective - Fixes #15460 (will open new issues for further `no_std` efforts) - Supersedes #17715 ## Solution - Threaded in new features as required - Made certain crates optional but default enabled - Removed `compile-check-no-std` from internal `ci` tool since GitHub CI can now simply check `bevy` itself now - Added CI task to check `bevy` on `thumbv6m-none-eabi` to ensure `portable-atomic` support is still valid [^1] [^1]: This may be controversial, since it could be interpreted as implying Bevy will maintain support for `thumbv6m-none-eabi` going forward. In reality, just like `x86_64-unknown-none`, this is a [canary](https://en.wiktionary.org/wiki/canary_in_a_coal_mine) target to make it clear when `portable-atomic` no longer works as intended (fixing atomic support on atomically challenged platforms). If a PR comes through and makes supporting this class of platforms impossible, then this CI task can be removed. I however wager this won't be a problem. ## Testing - CI --- ## Release Notes Bevy now has support for `no_std` directly from the `bevy` crate. Users can disable default features and enable a new `default_no_std` feature instead, allowing `bevy` to be used in `no_std` applications and libraries. ```toml # Bevy for `no_std` platforms bevy = { version = "0.16", default-features = false, features = ["default_no_std"] } ``` `default_no_std` enables certain required features, such as `libm` and `critical-section`, and as many optional crates as possible (currently just `bevy_state`). For atomically-challenged platforms such as the Raspberry Pi Pico, `portable-atomic` will be used automatically. For library authors, we recommend depending on `bevy` with `default-features = false` to allow `std` and `no_std` users to both depend on your crate. Here are some recommended features a library crate may want to expose: ```toml [features] # Most users will be on a platform which has `std` and can use the more-powerful `async_executor`. default = ["std", "async_executor"] # Features for typical platforms. std = ["bevy/std"] async_executor = ["bevy/async_executor"] # Features for `no_std` platforms. libm = ["bevy/libm"] critical-section = ["bevy/critical-section"] [dependencies] # We disable default features to ensure we don't accidentally enable `std` on `no_std` targets, for example. bevy = { version = "0.16", default-features = false } ``` While this is verbose, it gives the maximum control to end-users to decide how they wish to use Bevy on their platform. We encourage library authors to experiment with `no_std` support. For libraries relying exclusively on `bevy` and no other dependencies, it may be as simple as adding `#![no_std]` to your `lib.rs` and exposing features as above! Bevy can also provide many `std` types, such as `HashMap`, `Mutex`, and `Instant` on all platforms. See `bevy::platform_support` for details on what's available out of the box! ## Migration Guide - If you were previously relying on `bevy` with default features disabled, you may need to enable the `std` and `async_executor` features. - `bevy_reflect` has had its `bevy` feature removed. If you were relying on this feature, simply enable `smallvec` and `smol_str` instead. --------- Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
8.1 KiB
8.1 KiB
Cargo Features
Bevy exposes many features to customize the engine. Enabling them add functionalities but often come at the cost of longer compilation times and extra dependencies.
Default Features
The default feature set enables most of the expected features of a game engine, like rendering in both 2D and 3D, asset loading, audio and UI. To help reduce compilation time, consider disabling default features and enabling only those you need.
feature name | description |
---|---|
android-game-activity | Android GameActivity support. Default, choose between this and android-native-activity . |
android_shared_stdcxx | Enable using a shared stdlib for cxx on Android |
animation | Enable animation support, and glTF animation loading |
async_executor | Uses async-executor as a task execution backend. |
bevy_animation | Provides animation functionality |
bevy_asset | Provides asset functionality |
bevy_audio | Provides audio functionality |
bevy_color | Provides shared color types and operations |
bevy_core_pipeline | Provides cameras and other basic render pipeline features |
bevy_gilrs | Adds gamepad support |
bevy_gizmos | Adds support for rendering gizmos |
bevy_gltf | glTF support |
bevy_input_focus | Enable input focus subsystem |
bevy_log | Enable integration with tracing and log |
bevy_mesh_picking_backend | Provides an implementation for picking meshes |
bevy_pbr | Adds PBR rendering |
bevy_picking | Provides picking functionality |
bevy_render | Provides rendering functionality |
bevy_scene | Provides scene functionality |
bevy_sprite | Provides sprite functionality |
bevy_sprite_picking_backend | Provides an implementation for picking sprites |
bevy_state | Enable built in global state machines |
bevy_text | Provides text functionality |
bevy_ui | A custom ECS-driven UI framework |
bevy_ui_picking_backend | Provides an implementation for picking UI |
bevy_window | Windowing layer |
bevy_winit | winit window and input backend |
custom_cursor | Enable winit custom cursor support |
default_font | Include a default font, containing only ASCII characters, at the cost of a 20kB binary size increase |
hdr | HDR image format support |
ktx2 | KTX2 compressed texture support |
multi_threaded | Enables multithreaded parallelism in the engine. Disabling it forces all engine tasks to run on a single thread. |
png | PNG image format support |
smaa_luts | Include SMAA Look Up Tables KTX2 Files |
std | Allows access to the std crate. |
sysinfo_plugin | Enables system information diagnostic plugin |
tonemapping_luts | Include tonemapping Look Up Tables KTX2 files. If everything is pink, you need to enable this feature or change the Tonemapping method for your Camera2d or Camera3d . |
vorbis | OGG/VORBIS audio format support |
webgl2 | Enable some limitations to be able to use WebGL2. Please refer to the WebGL2 and WebGPU section of the examples README for more information on how to run Wasm builds with WebGPU. |
x11 | X11 display server support |
zstd | For KTX2 supercompression |
Optional Features
feature name | description |
---|---|
accesskit_unix | Enable AccessKit on Unix backends (currently only works with experimental screen readers and forks.) |
android-native-activity | Android NativeActivity support. Legacy, should be avoided for most new Android games. |
asset_processor | Enables the built-in asset processor for processed assets. |
async-io | Use async-io's implementation of block_on instead of futures-lite's implementation. This is preferred if your application uses async-io. |
basis-universal | Basis Universal compressed texture support |
bevy_ci_testing | Enable systems that allow for automated testing on CI |
bevy_debug_stepping | Enable stepping-based debugging of Bevy systems |
bevy_dev_tools | Provides a collection of developer tools |
bevy_image | Load and access image data. Usually added by an image format |
bevy_remote | Enable the Bevy Remote Protocol |
bevy_ui_debug | Provides a debug overlay for bevy UI |
bmp | BMP image format support |
critical-section | critical-section provides the building blocks for synchronization primitives on all platforms, including no_std . |
dds | DDS compressed texture support |
debug_glam_assert | Enable assertions in debug builds to check the validity of parameters passed to glam |
default_no_std | Recommended defaults for no_std applications |
detailed_trace | Enable detailed trace event logging. These trace events are expensive even when off, thus they require compile time opt-in |
dynamic_linking | Force dynamic linking, which improves iterative compile times |
embedded_watcher | Enables watching in memory asset providers for Bevy Asset hot-reloading |
experimental_pbr_pcss | Enable support for PCSS, at the risk of blowing past the global, per-shader sampler limit on older/lower-end GPUs |
exr | EXR image format support |
ff | Farbfeld image format support |
file_watcher | Enables watching the filesystem for Bevy Asset hot-reloading |
flac | FLAC audio format support |
ghost_nodes | Experimental support for nodes that are ignored for UI layouting |
gif | GIF image format support |
glam_assert | Enable assertions to check the validity of parameters passed to glam |
ico | ICO image format support |
jpeg | JPEG image format support |
libm | Uses the libm maths library instead of the one provided in std and core . |
meshlet | Enables the meshlet renderer for dense high-poly scenes (experimental) |
meshlet_processor | Enables processing meshes into meshlet meshes for bevy_pbr |
minimp3 | MP3 audio format support (through minimp3) |
mp3 | MP3 audio format support |
pbr_anisotropy_texture | Enable support for anisotropy texture in the StandardMaterial , at the risk of blowing past the global, per-shader texture limit on older/lower-end GPUs |
pbr_multi_layer_material_textures | Enable support for multi-layer material textures in the StandardMaterial , at the risk of blowing past the global, per-shader texture limit on older/lower-end GPUs |
pbr_specular_textures | Enable support for specular textures in the StandardMaterial , at the risk of blowing past the global, per-shader texture limit on older/lower-end GPUs |
pbr_transmission_textures | Enable support for transmission-related textures in the StandardMaterial , at the risk of blowing past the global, per-shader texture limit on older/lower-end GPUs |
pnm | PNM image format support, includes pam, pbm, pgm and ppm |
qoi | QOI image format support |
reflect_documentation | Enable documentation reflection |
reflect_functions | Enable function reflection |
serialize | Enable serialization support through serde |
shader_format_glsl | Enable support for shaders in GLSL |
shader_format_spirv | Enable support for shaders in SPIR-V |
spirv_shader_passthrough | Enable passthrough loading for SPIR-V shaders (Only supported on Vulkan, shader capabilities and extensions must agree with the platform implementation) |
statically-linked-dxc | Statically linked DXC shader compiler for DirectX 12 |
symphonia-aac | AAC audio format support (through symphonia) |
symphonia-all | AAC, FLAC, MP3, MP4, OGG/VORBIS, and WAV audio formats support (through symphonia) |
symphonia-flac | FLAC audio format support (through symphonia) |
symphonia-isomp4 | MP4 audio format support (through symphonia) |
symphonia-vorbis | OGG/VORBIS audio format support (through symphonia) |
symphonia-wav | WAV audio format support (through symphonia) |
tga | TGA image format support |
tiff | TIFF image format support |
trace | Tracing support |
trace_chrome | Tracing support, saving a file in Chrome Tracing format |
trace_tracy | Tracing support, exposing a port for Tracy |
trace_tracy_memory | Tracing support, with memory profiling, exposing a port for Tracy |
track_location | Enables source location tracking for change detection and spawning/despawning, which can assist with debugging |
wav | WAV audio format support |
wayland | Wayland display server support |
webgpu | Enable support for WebGPU in Wasm. When enabled, this feature will override the webgl2 feature and you won't be able to run Wasm builds with WebGL2, only with WebGPU. |
webp | WebP image format support |
zlib | For KTX2 supercompression |