Alice I Cecile's Avatar

Alice I Cecile

@alice-i-cecile.bsky.social

Full-time engine dev for Bevy: an open source Rust game engine. I design games, make all manner of things, and occasionally go outside ;) Once upon a time I was a plant ecologist!

1,533 Followers  |  643 Following  |  1,097 Posts  |  Joined: 01.05.2023  |  2.2046

Latest posts by alice-i-cecile.bsky.social on Bluesky

@stechlab-labels.bsky.social is really really good for blocking spam and bots

31.10.2025 02:29 — 👍 39    🔁 9    💬 6    📌 6

No #bevymergetrain today, sorry! Off sick: I got my annual flu and COVID vax, which is very good, but comes at a great and terrible cost (a day or two of enforced rest). Take care y'all; I'll see you next week.

28.10.2025 00:50 — 👍 17    🔁 0    💬 0    📌 0

This was the right thing to do. Supporting diversity, equity and inclusion is important for building a healthy open source community, and the open-ended clawback clause is deadly for any nonprofit.

Thanks PSF.

27.10.2025 18:52 — 👍 32    🔁 0    💬 0    📌 0
Video thumbnail

Rare Mevy (Macros for Bevy) Update! 🦜
🦆 added a shorter UI syntax
🪁 ..inspired by TailwindCSS
🐇 ..and LSP hovers still working

🐱 github.com/dekirisu/mev...

(for bevy v0.16 still, partially works for v0.17)
#rustlang #bevyengine #gamedev

27.10.2025 13:12 — 👍 35    🔁 8    💬 1    📌 0
Architecting Bevy - A Rust Game Engine (with Alice Cecile)
YouTube video by Developer Voices Architecting Bevy - A Rust Game Engine (with Alice Cecile)

Having listened to this show, #Bevy seems like a project done right. I would love to be part of a project like this, if it is what @alice-i-cecile.bsky.social so ably describes. Not just because I love ECS, but because of how it's been organized. Beautiful.
youtu.be/PND2Wpy6U-E #rustlang

26.10.2025 21:04 — 👍 32    🔁 2    💬 0    📌 0

Steve is leaving us at Oxide 😭😭😭😭😭😭😭😭

But also going to go work at ERSC to help #jj-vcs take over the world, and I couldn't possibly be more excited about that

22.10.2025 19:00 — 👍 140    🔁 5    💬 2    📌 0

That's all for this week <3 A rare 100% merge rate! Like always, thanks so much for following along: it's a real pleasure to get to work with so many lovely contributors and community members each day.

Now go make stuff! I promise you can do it.

20.10.2025 22:05 — 👍 9    🔁 0    💬 1    📌 0

I'm going to merge this PR, but this bug fix really demonstrates the subjective nature of development. What is the "right" behavior here? How should these features interact? Should we expose a toggle, or is that just overhead and complexity that no one really cares about?

There's no right answers!

20.10.2025 22:05 — 👍 4    🔁 0    💬 1    📌 0
Preview
Fix `DespawnOn` not upholding invariants on entities with default filters by janhohenheim · Pull Request #21616 · bevyengine/bevy Objective Fixes DespawnOnEnter/DespawnOnExit no longer working on Observers #21579 Fixes DespawnOnExitState ignores disabled entities. #20167 Solution Allow at least the engine-internal default ...

6. github.com/bevyengine/b...

A contentious bug fix: allowing our various "state-scoped entities" mechanisms to operate on ordinarily hidden entities.

I feel quite strongly that this is the right fix: users adding these components to disabled entities expect that they should get cleaned up!

20.10.2025 22:05 — 👍 6    🔁 0    💬 1    📌 0
Preview
Move `tick.rs` into `change_detection` module by JaySpruce · Pull Request #21613 · bevyengine/bevy Follow-up to #21604. Tick and friends should be in the change_detection module, not component.

5. github.com/bevyengine/b...

A simple relatively uncontroversial code organization PR, moving some of our change detection-related types into our change_detection module. Great, merging! This was preceded by a PR to split the 2k LOC module into multiple files, making it much easier to navigate 🎉

20.10.2025 22:05 — 👍 4    🔁 0    💬 1    📌 0

I'm personally really keen on the tech-debt focused work in this area because it makes schedule introspection easier, allowing folks (probably me 😅) to write tools to understand and visualize the order and timing of their systems.

This is a key debugging tool, and cleanup makes it easier to write.

20.10.2025 22:05 — 👍 4    🔁 0    💬 1    📌 0
Preview
Move toposorting onto `DiGraph` directly, and cleanup error handling by ItsDoot · Pull Request #21608 · bevyengine/bevy Objective Part of Extensible Schedule Graphs #20115 Since Better ScheduleBuildError introspection and handling #20256, ScheduleGraph::topsort_graph no longer uses self, so let&#39;s put it directl...

4. github.com/bevyengine/b...

Another round of incremental cleanup to our scheduling code. This work is all towards a goal of supporting sophisticated system scheduling strategies. It may be a mouthful, but it's a reasonable thing to want! Reasonable enough and well-scoped PR: happy to merge this.

20.10.2025 22:05 — 👍 5    🔁 0    💬 1    📌 0
Preview
API for traversing `Relationship`s and `RelationshipTarget`s in dynamic contexts by eugineerd · Pull Request #21601 · bevyengine/bevy Objective Currently there is no way to traverse relationships in type-erased contexts or to define dynamic relationship components, which is a hole in the current relationships api. Solution Introd...

3. github.com/bevyengine/b...

One of Bevy's great Rust crimes is that it allows you to store, represent and work with data that while "typed", does not correspond to a Rust type. We forgot to add support for working with dynamically typed relationships: this PR fixes that oversight! LGTM; merging.

20.10.2025 22:05 — 👍 4    🔁 0    💬 1    📌 0

If users are writing out a type once per project, you really don't need to skimp on characters: choose clear names.

Abbreviations are particularly brutal for folks with limited domain expertise or weak English language skills. They take longer to process, and cannot be looked up in a dictionary!

20.10.2025 22:05 — 👍 5    🔁 0    💬 1    📌 0
Preview
Update `PanCam` and `FreeCam` to use full term `Camera` by syszery · Pull Request #21592 · bevyengine/bevy Objective This PR fixes #21569, which proposes renaming the newly introduced camera controller modules FreeCam and PanCam to use the full term Camera. Solution Renamed the PanCam controller, PanCa...

2. github.com/bevyengine/b...

A bikeshedding-centric PR: renaming `PanCam` to `PanCameraController`. This is an example of a broader policy that we have in Bevy: prefer clear, explicit names unless the API is very high traffic. We have agreement and related code is cleaned up, so it's merge time.

20.10.2025 22:05 — 👍 5    🔁 0    💬 1    📌 0

This docs PR is the sort of PR that makes me really grateful for our triage-by-controversy system: uncontroversially good changes like this "bubble up", getting checked and refined by the community and smoothly merged in (like I am now!).

Bad docs waste so much time: merge fixes for them fast!

20.10.2025 22:05 — 👍 4    🔁 0    💬 1    📌 0
docs(camera): clarify ndc_to_world method documentation by WaterWhisperer · Pull Request #21571 · bevyengine/bevy Objective Fixes #16809 Solution Correct NDC coordinate ranges and depth interpretation Fix method reference from world_to_viewport to viewport_to_world Update parameter name in error condition fro...

1. github.com/bevyengine/b...

One of the many bits of game dev arcana is the truly spectacular number of coordinate systems and the conversions between them. In this case, we're converting from NDC (normalized device coordinates, of the camera's viewport) and world space, and the docs needed work.

20.10.2025 22:05 — 👍 4    🔁 0    💬 1    📌 0

Hi #bevy! It's time for another #bevymergetrain, as I go over the community-approved PRs stuck in our backlog <3 There's only 6 today, so grab a nice warm drink and follow along as I discuss #rust, #gamedev and the realities of #opensource project management.

20.10.2025 22:05 — 👍 31    🔁 5    💬 1    📌 0

changing rustfmt is politically difficult, because any changes you make is gonna piss someone off

it doesn't surprise me that maintenance has been slow and hard

20.10.2025 18:10 — 👍 24    🔁 2    💬 4    📌 0

OK, the way Clippy told me to replace cos(pi / 4) with the FRAC_1_SQRT_2 constant is wild. Clippy is becoming self-aware.

19.10.2025 04:45 — 👍 42    🔁 5    💬 2    📌 0

the thing is, rust can have really fast compile times, but the pervasive use of macros and build scripts obscures that fact. impure proc macros and build scripts are the free parking of the rust ecosystem: benefiting the few at the cost of many

18.10.2025 18:56 — 👍 56    🔁 8    💬 4    📌 1

Look, it’s really straightforward to get a publisher as a new name indie in 2025. Simply do 95% of the work making and marketing your game, and if your metrics are trending towards almost certain success, a publisher will swoop in to promise the remaining 5%, deliver 3%, and collect 75%

18.10.2025 20:27 — 👍 2285    🔁 489    💬 20    📌 31
Store migration guides in the repository by Jondolf · Pull Request #867 · avianphysics/avian Objective Closes #742. Until now, we have had the following process: Each PR that has a breaking change is marked with C-Breaking-Change, and gets a ## Migration Guide section At the end of the re...

Avian is getting pretty big nowadays! To mark the start of a new release cycle, I spent some time improving our processes moving forward.

Notably, Avian now stores migration guides in-repo, similar to Bevy:
github.com/avianphysics...

18.10.2025 18:16 — 👍 38    🔁 4    💬 2    📌 0

Cinnog is what I use for This Week in Bevy.

thisweekinbevy.com

18.10.2025 14:18 — 👍 17    🔁 1    💬 0    📌 0
How we organized the Rust Clippy feature freeze

How we organized the Rust Clippy feature freeze https://lobste.rs/s/emudbc #rust #historical

18.10.2025 01:36 — 👍 0    🔁 1    💬 0    📌 0

It is important for people who are expected to obey a law to be able to easily find, read and understand it, for free.

17.10.2025 23:41 — 👍 44    🔁 1    💬 1    📌 0

One of the best things you can do for yourself is be friends with people who know a hell of a lot more about certain stuff than you do

16.10.2025 19:24 — 👍 315    🔁 41    💬 9    📌 6
Thank you for the kind words and the thoughtful response.
I'm deeply sympathetic to your viewpoint, and some days I certainly feel like Rust is creaking under its own weight. Why does your typical backend web service need all this complexity with borrows and lifetimes and manual memory management?

But allow me to present the other side of the argument. My background is in systems-level developer tools, and Rust has a combination of things that no other programming environment has:

* & and &mut, which enforce a rigorous separation between mutable and immutable state. I think this is the single most important feature of Rust, and the closest analog to this in other environments is purely functional languages like Haskell

* enums with data + exhaustive pattern matching; the latter is something even Haskell lacks

* high-level idiomatic code that performs like low-level code (e.g. iterators): Rust achieves this through an extraordinary combination of monomorphizing and inlining

* working in memory-constrained environments: tracing GC tends to have significant memory overhead, and I've worked in server environments where a big limiting factor was the amount of DRAM being produced globally

* good polymorphism: I think OOP is a suboptimal paradigm that breaks under day-to-day development stress. I've written about it at https://news.ycombinator.com/item?id=42512629

* fast startup times: this is a requirement for command-line tools people use hundreds of times a day—I spent many years working on Mercurial where Python's slow startup time was a very common complaint

* first-class support for using native OS calls directly; many higher-level languages like Java abstract away the details, so things like signal handling are hard to hook into

* first-class Windows support: again, non-negotiable for many developer tools, since the plurality of developers are on Windows

(cont)

Thank you for the kind words and the thoughtful response. I'm deeply sympathetic to your viewpoint, and some days I certainly feel like Rust is creaking under its own weight. Why does your typical backend web service need all this complexity with borrows and lifetimes and manual memory management? But allow me to present the other side of the argument. My background is in systems-level developer tools, and Rust has a combination of things that no other programming environment has: * & and &mut, which enforce a rigorous separation between mutable and immutable state. I think this is the single most important feature of Rust, and the closest analog to this in other environments is purely functional languages like Haskell * enums with data + exhaustive pattern matching; the latter is something even Haskell lacks * high-level idiomatic code that performs like low-level code (e.g. iterators): Rust achieves this through an extraordinary combination of monomorphizing and inlining * working in memory-constrained environments: tracing GC tends to have significant memory overhead, and I've worked in server environments where a big limiting factor was the amount of DRAM being produced globally * good polymorphism: I think OOP is a suboptimal paradigm that breaks under day-to-day development stress. I've written about it at https://news.ycombinator.com/item?id=42512629 * fast startup times: this is a requirement for command-line tools people use hundreds of times a day—I spent many years working on Mercurial where Python's slow startup time was a very common complaint * first-class support for using native OS calls directly; many higher-level languages like Java abstract away the details, so things like signal handling are hard to hook into * first-class Windows support: again, non-negotiable for many developer tools, since the plurality of developers are on Windows (cont)

* and last but not least, a great dependency ecosystem, which ties into all of the above points: & and &mut mean that some transitive dependency three levels down won't suddenly alter the list you pass in, idiomatic performance means that perf regressions are rare, first-class Windows support means most dependencies just work on Windows, and so on

Is it possible to have an application-level/GCd/managed language that meets most or all of these requirements? Certainly. Does such an application-level language exist today? No, and there's nothing on the horizon either (Haskell has its heart in the right place, but is missing many of the more practical features here).

Rust isn't a great application-level language, but it's the best application-level language. And given how high the barrier tends to be for a new language to reach adoption, I'll probably be retired long before something like that shows up.

And yeah, async really is quite confusing in so many ways, and it's really unfortunate that this situation has seen no improvements in so many years. And yet, through its characteristics combined with the other things listed here, it enables developers to solve real problems that are completely infeasible in any other language.

So I keep trying to make Rust better :)

* and last but not least, a great dependency ecosystem, which ties into all of the above points: & and &mut mean that some transitive dependency three levels down won't suddenly alter the list you pass in, idiomatic performance means that perf regressions are rare, first-class Windows support means most dependencies just work on Windows, and so on Is it possible to have an application-level/GCd/managed language that meets most or all of these requirements? Certainly. Does such an application-level language exist today? No, and there's nothing on the horizon either (Haskell has its heart in the right place, but is missing many of the more practical features here). Rust isn't a great application-level language, but it's the best application-level language. And given how high the barrier tends to be for a new language to reach adoption, I'll probably be retired long before something like that shows up. And yeah, async really is quite confusing in so many ways, and it's really unfortunate that this situation has seen no improvements in so many years. And yet, through its characteristics combined with the other things listed here, it enables developers to solve real problems that are completely infeasible in any other language. So I keep trying to make Rust better :)

Why I like and keep working on Rust

16.10.2025 23:52 — 👍 139    🔁 27    💬 6    📌 0
IF ANYONE BUILDSIT, EVERYONE DIES
WHY
SUPERHUMAN AI
WOULD
KILLUS ALL
ELIEZER
YUDKOWSKY &
NATE SOARES

IF ANYONE BUILDSIT, EVERYONE DIES WHY SUPERHUMAN AI WOULD KILLUS ALL ELIEZER YUDKOWSKY & NATE SOARES

Next up on my reading list.

…I am already regretting this choice.

14.10.2025 23:27 — 👍 541    🔁 35    💬 48    📌 23
Post image

I saw _the_ teapot in Dublin

16.10.2025 16:09 — 👍 37    🔁 3    💬 2    📌 0

@alice-i-cecile is following 20 prominent accounts