skillZs
★ LIVE SKILL TAGS ★
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
※ REAL INSTALL DATA ※
← back to all skills
chrisgliddon/bevy-skills113 installs

bevy-cargo-features

Use when picking Bevy 0.20 Cargo features — top-level `2d`/`3d`/`ui`/`audio`, mid-level `3d_api`/`3d_bevy_render`/`ui_api`/`common_api`, headless `default_app`, input opt-ins `mouse`/`keyboard`/`gamepad`, `bevy_curve` (was `bevy_math/curve`), `compressed_image_saver_universal`, `render_dev_tools`, or debugging missing UI/audio/window after `default-features = false`.

How do I install this agent skill?

npx skills add https://github.com/chrisgliddon/bevy-skills --skill bevy-cargo-features
view source ↗

Is this agent skill safe to install?

  • Gen Agent Trust Hubpass

    This skill provides technical documentation and configuration guidance for Bevy 0.20 Cargo features. It is purely informational and contains no security risks.

  • Socketpass

    No alerts

  • Snykpass

    Risk: LOW · No issues

What does this agent skill do?

Bevy 0.20 — Cargo features

When to use this skill

  • Authoring or auditing a Bevy project's Cargo.toml.
  • Trimming the WASM bundle (the single biggest lever).
  • Building a headless server (no rendering, no windowing, no audio).
  • Writing a custom renderer that needs Bevy's data types but not its render pipeline.
  • Migrating a 0.18 or 0.19 manifest: ui, audio, bevy_window and custom_cursor moved collections.

Canonical patterns

Top-level collections (what default is made of)

# default = ["2d", "3d", "ui", "audio"]
[dependencies]
bevy = { version = "0.20", default-features = false, features = ["3d", "ui", "audio"] }
# 3D, no bevy_ui (bring your own UI):
bevy = { version = "0.20", default-features = false, features = ["3d", "audio"] }
# 2D, no bevy_audio (e.g. bevy_seedling):
bevy = { version = "0.20", default-features = false, features = ["2d", "ui"] }

2d, 3d and ui each imply default_app + default_platform + their *_bevy_render stack + scene + picking. Since 0.19 they imply neither ui nor audio; list those explicitly.

Mid-level: API without the default renderer

bevy = { version = "0.20", default-features = false, features = ["3d_api", "bevy_winit", "x11"] }
CollectionAddsUse for
common_apianimation, camera, color, bevy_curve, gizmos, image, mesh, shader, material, text, bevy_window, hdr, pngbase of every *_api
2d_api / 3d_apicommon_api + sprite, or + light, mikktspace, ktx2, morph, luts, zstdcustom renderer
ui_apidefault_app + common_api + bevy_ui + bevy_input_focuscustom UI renderer
2d_bevy_render / 3d_bevy_render / ui_bevy_render*_api + bevy_render + core pipeline + the stock renderers (3d also glTF, PBR, anti-alias, gltf_animation)stock renderer, no default_platform
default_appasync_executor, bevy_asset, bevy_log, bevy_state, reflect_auto_registerheadless
default_platformstd, bevy_winit, bevy_gilrs, bevy_clipboard, default_font, multi_threaded, webgl2, x11, wayland, custom_cursor, sysinfo_plugindesktop windowing
scenebevy_scene (BSN) + bevy_world_serialization (glTF spawning, WorldAssetRoot)any glTF scene
pickingbevy_picking + mesh_picking + sprite_picking + ui_pickingpointer events

Table derived from bevy-0.20.1/Cargo.toml.

Headless server

bevy = { version = "0.20", default-features = false, features = [
    "default_app",   # ECS + assets + state + log, no window
    "multi_threaded",
    "serialize",
    "scene",         # only if you spawn glTF / serialize worlds
] }
use bevy::prelude::*;

fn main() {
    // Headless: pair `default-features = false` + "default_app" with
    // `MinimalPlugins`, not `DefaultPlugins` (which needs the render features).
    App::new()
        .add_plugins(MinimalPlugins)
        .add_systems(Update, tick)
        .run();
}

fn tick(time: Res<Time>) {
    let _ = time.delta_secs();
}

Minimal client, opt-in input

bevy = { version = "0.20", default-features = false, features = [
    "3d_bevy_render", "bevy_winit", "x11",   # or "wayland"; "webgl2"/"webgpu" on web
    "mouse", "keyboard", "gamepad",          # input is opt-in without default_platform
    # "touch", "gestures", "bevy_gilrs" (= gamepad + gilrs backend)
] }

Dev-only extras

[features]
dev = ["bevy/dev"]   # = debug + bevy_dev_tools + render_dev_tools + file_watcher

render_dev_tools compiles RenderDebugOverlayPlugin into DefaultPlugins (disabled until you insert RenderDebugOverlayKeybindings { enable_keybindings: true, .. }). Without the feature the overlay is absent; stock DefaultPlugins do not include it.

Feature moves since 0.18

0.180.190.20
3d/2d/ui imply audioaudio separate, in defaultsame
3d/2d imply uiui separate, in defaultsame
bevy_window in default_appin common_apisame
bevy_input_focus in default_appin ui_apisame
custom_cursor in default_appin default_platformsame; also forwards to bevy_picking/custom_cursor (cursor module moved from feathers to picking)
bevy_picking implied bevy_input_focusno; ui_picking doessame
experimental_bevy_feathers / experimental_bevy_ui_widgetsbevy_feathers / bevy_ui_widgets (ui includes widgets)same
android-game-activity in defaultneither Android activity feature is default; add onesame
bevy_math/curve (default)samegone: enable bevy/bevy_curve (in common_api)
shader_format_wesl, shader_format_glslpresentremoved: WESL always on, GLSL gone; shader_format_spirv stays
compressed_image_saver = Basis Universalsame= BCn/ASTC via ctt; old behaviour is compressed_image_saver_universal
——bevy_shape is a non-optional dep (no feature); its serialize rides on bevy/serialize
bevy_transform/bevy_logremoved; tracing under tracesame
audio: vorbis default; wav, mp3, mp4, flac, aac, audio-all-formatssince 0.19 (rodio 0.22)same

Gotchas

  • default-features = false + 3d drops UI and audio. Stale 0.18 manifests then hit "no Node/AudioPlayer". Add ui and/or audio.
  • default_app has no window types. Window, WindowPlugin need bevy_window (common_api or explicit).
  • bevy_picking without ui_picking gives no UI focus-on-click. Add ui or ui_picking.
  • bevy_math/curve no longer exists. cargo fails with "feature curve not found"; use bevy/bevy_curve.
  • shader_format_wesl/shader_format_glsl fail to resolve in 0.20. Delete them; port GLSL to WESL.
  • Web texture compression: use compressed_image_saver_universal; the new compressed_image_saver output is BCn (desktop) or ASTC (BEVY_COMPRESSED_IMAGE_SAVER_ASTC=4x4), not one-file-everywhere.
  • multi_threaded implies std. no_std targets use default_no_std.
  • trace_tracy / trace_chrome are separate log sinks; enable one.
  • Asset sources: file_watcher (hot reload), embedded_watcher, http/https (ureq), web_asset_cache, asset_processor are all opt-in.

See also

  • bevy-wasm-webgpu — the trimmed WASM manifest and webgl2/webgpu.
  • bevy-assets — file_watcher, scene, compressed_image_saver* at runtime.
  • bevy-migration-0-18-to-0-19 and bevy-migration-0-19-to-0-20 — the upstream feature-move notes.

Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.

<a href="https://skillzs.dev/skills/chrisgliddon/bevy-skills/bevy-cargo-features">View bevy-cargo-features on skillZs</a>