---
title: "Bevy 0.4"
url: https://daily.dev/posts/bevy-0-4-1ydvodqsx
source_url: https://bevy.org/news/bevy-0-4
type: article
source: "Bevy Engine"
published: 2026-08-23T12:24:07.633Z
updated: 2026-08-23T12:59:43.708Z
tags: ["aws", "game-development", "rust", "webassembly"]
reading_time: 24
upvotes: 0
comments: 0
language: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Bevy 0.4

**[Bevy Engine](https://daily.dev/sources/bevy)** · 24 min read · 0 upvotes · 0 comments

## Summary

Bevy 0.4, a Rust game engine release, ships a WebGL2 rendering backend for the web, a cross-platform #[bevy_main] macro, live shader reloading, and a rewritten ECS with flexible system parameter ordering (25% faster compile times) and simplified query filters separated from components. It introduces a new Schedule V2 with custom stages, run criteria, and fixed timestep support, deprecates for-each systems in favor of query-based iteration, adds app States for lifecycle-based system control, a new bevy_reflect crate replacing bevy_property, GLTF camera import, scene spawning as children, dynamic linking for faster iterative compiles, improved text layout, several rendering optimizations, tracing-based logging/profiling, HIDPI display support, timer API improvements, and Apple Silicon support.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://bevy.org/news/bevy-0-4>

## Questions this post answers

### What changed in Bevy 0.4's ECS system parameter ordering?

Bevy 0.4 removed the requirement that system parameters follow a specific order like Commands, Resources, then Queries. Previously, functions like fn system(query, commands, time) would fail to compile unless parameters were ordered correctly. The engine now uses a SystemParam trait instead of the old IntoSystem macro, which also cut clean compile times by about 25% and let commands be written as commands: &mut Commands instead of mut commands: Commands.

_Rust game developers tracking Bevy's breaking API changes can follow release details on daily.dev._

### Why did Bevy remove for-each systems in version 0.4?

For-each systems were deprecated because they were fundamentally limited compared to query-based systems: they couldn't iterate removed components, filter, control iteration order, or use multiple queries simultaneously. They also caused newcomer confusion around mutable references and criteria-based execution, added roughly 5 seconds to clean compile times, and required a complicated internal macro to maintain.

_Developers migrating Bevy ECS code can check upgrade notes like these on daily.dev._

### How do you separate query filters from components in Bevy 0.4?

In Bevy 0.4, query filters like With, Without, and Changed moved out of the component type parameter into a second, separate type parameter on Query, for example Query<(&Transform, &Velocity), (With<A>, Without<B>, Changed<Velocity>)>. Previously filters were nested inside components, such as Query<With<A, Without<B, (&Transform, Changed<Velocity>)>>>, which made it unclear whether a filter also returned a value.

_Rust developers adapting queries to a new ECS API can reference specifics like this on daily.dev._

---

Tags: [#aws](https://daily.dev/tags/aws), [#game-development](https://daily.dev/tags/game-development), [#rust](https://daily.dev/tags/rust), [#webassembly](https://daily.dev/tags/webassembly)

[View this post on daily.dev](https://daily.dev/posts/bevy-0-4-1ydvodqsx)
