#Bevy 0.17 Release Crew
2816 messages Β· Page 3 of 3 (latest)
(hypehype's stuff looks even crazier, running on stuff way slower than GTX780. I think it's all DI though (but soft))
They don't use RT I thought?
But it is stochastic
if you can get away with super simple proxy geo you can make GI pretty darned fast tbh
Oh right I think it's buffer shadow atlas but for many lights.
Solari supports this!
Yeah they talk about having like 500 lights
(bring your own proxies though)
oh lol this is the release crew thread, sorry for the GI spam xD
Lol it's nice to see people interested in it. Very motivating compared to just developing it by myself.
We do have a solari thread if you want to talk there
soon RTGI will be everywhere you look
and then every thought in your head
lol that was 2023-2024 for me xD
we can make that 2025-forever 
#goals
Jasmine 2022-present (2023-2024 had a partial gap with virtual geometry taking up more brain space)
My first post in this server / first use of bevy technically had GI: #showcase message
awesome (:
Museum of Dead Card Games is finally up to 0.17-rc, almost all pain was in the events rework + figuring out where a bunch of imports had moved to.
man this is exciting, bevy is starting to look like a real engine, hehe
@edgy jetty I'll add an issue for this in a few minutes. Should it be a blocker? #1420792280880513134 message
It causes a render failure for users that
- use image nodes
- have those images nodes compressed
- the image size is not a multiple of 4
- and the app runs on webgpu
Which isβ¦ very specific π
Doing the exact same on native will crash on 0.17 with a human-readable error message
Itβs just the fact that I mainly tested webgpu that had me running in circles
I think that's a nice-to-have
should a fix for this still be opened against release-17?
The last fix against that branch I opened was closed by FranΓ§ois in favor of merging against main
Oh wait that wouldnβt make sense here as itβs a migration
My bad
main doesn't have migrations tuff anymore
fixes that are for main and for the 0.17 go to main, fixes that are just for the 0.17 go to the 0.17
to check with Alice, I don't know how far in the process of moving the migrations to the website we are. so either the 0.17 branch or the website repo
Aah got it, thanks π
we have https://docs.rs/bevy/latest/bevy/prelude/trait.StableInterpolate.html#method.smooth_nudge that works on translation and rotations, I use that for moving the camera in recorded demos
I've created a pr against .17 for now
We're in the process of moving it to bevy-website / finalizing. You can either wait for this to be merged, or you can create a PR to my branch to add it:
https://github.com/bevyengine/bevy-website/pull/2237
did not add it to the milestone
Just uuh
keep it in mind in case a user asks about weird errors on webgpu after migrating
I think you meant to add two different screenshots there?
oh whoops, thanks!
fixed π
CI is unbroken: merging https://github.com/bevyengine/bevy-website/pull/2237
Then we can remake this targeting main @naive turtle
I can do it for you: I think you're on European time π
And I have another of my own to add.
you did a typo that won't close the second issue π
Shouldn't you be asleep?? Also, thanks!
You should know my (lack of) sleeping schedule by now π
Goddamn grad students
Release highlights! This is an important choice, so I'd like wide feedback here, and will let @dry rune do the final edits and merge
And future work is up too π https://github.com/bevyengine/bevy-website/pull/2248
@spiral wren @subtle ridge @fathom finch @dusty dagger @dry rune @warm crystal @dull schooner I've highlighted plans that are loosely "yours" in here: please let me know if you have complaints about the framing or inclusion of them π
Oh also @final zinc @dusk linden @maiden heath I have an asset preprocessing work item in there that would benefit from your feedback
lol just a minute after I posted this #off-topic message
just the paragraph in the notes? or is there another place you want us to look
my brutally honest feedback is that asset preprocessing in Bevy outside of very very specific scenarios is nonexistant at all, at least judging by all my failed attempts at trying to get it work even in situation where it's documented to work in theory.
might be a skill issue though
Don't forget https://github.com/bevyengine/bevy/issues/19236 π
I mean, yes!
I also don't see it "taking shape", but I may be out of the loop?
I wouldn't include this in the notes without a documented issue tracking work or someone who has dedicated time to work on it. We don't even have a working group for it right?
yeah exactly
AFAIK (and again, I might be out of the loop), it's something we all agree needs to be better, but no one (singular or plural) is spearheading it
So I would also cut it from that section
left a comment to that effect: https://github.com/bevyengine/bevy-website/pull/2248#discussion_r2380640994
thx
I would add "make bevy_ui widgets a first-class UI toolkit" or something like that
outside of the text input stuff
It's neat that we have experimental UI widgets now, but what I'm really really excited for is what @opaque magnet can cook up with BSN π
@edgy jetty In terms of "what's next" I was also thinking of writing up a tracking issue for all of the various ideas that @fathom finch and I have been thinking about for improving text and fonts:
- ComputedTextStyle
- Font style inheritance
- Font aliases and registration
- Font atlas caching and retention
- System fonts
- Rem/Em units
And given how many users report UI in Bevy specifically to be a pain point right now, I believe this prospect is something nice to look forward to
I kind of want to revive the old lorem-ipsum working group, although perhaps under a new name - the specific issue that WG was intended for (text as entities) was successfully implemented, and it has proved to be a winner IMHO. But there are a lot of other text-related improvements that never got done.
Other than those two points (remove asset preprocessing and add bevy_ui widgets) this looks good to me π
@final zinc I think supporting rem units is probably the best way to solve your specific readability issues that you have brought up. For example, if the button height could be specified in rem units, then buttons would increase in size when the global font size was increased.
makes sense to me
I've also thought about a standard BEI action for adjusting the global font size, which gives you the +/- behavior that you are used to in VSCode.
@edgy jetty yeah I think this should be removed. I think we need to focus on getting bsn + editor off the ground before reopening this can of worms
I think we need this in 0.17: https://github.com/bevyengine/bevy/pull/21220
(given that we're landing hotpatching)
do we? they're semver compatible
so users will pick up the rc anyways
Though I suppose having that point to the newest version at release makes sense
approved
Kk!
I'll focus on UI and docs next cycle I expect
Approved as well, although I agree with Jan that it's not "upgrading" subsecond, more like it's preventing the older alpha releases
To my knowledge, suffix versioning does not respect semver and will not be picked up automatically
They behave like "major versions" afaik
Oh really? I know for a fact they're sorted alphanumerically according to semver proper, but we all know Cargo has a different opinion on that
So I woudln't be surprised if Cargo treated them like major versions
Yup they are sorted like that, but they are "special"
Oops accidentally deleted a message pinging you @static hearth. Sorry if thats confusing (I was just drawing your attention to the last couple of messages)
not sure if that's intentional, but it's missing the screenshots in https://github.com/bevyengine/bevy/pull/19633
but maybe that item itself got removed from the release notes 
nah its in there
The part I as a user would want to see is the one showing the "canonical" orientation in Blender
i.e. this guy
I didn't consider that it would need them. I think that screenshot does help illustrate though
I think including the others would probably be excessive though
yeah agreed
I think I wrote somewhere to only include the fox
but maybe I'm misremembering
I recommend adding a TODO in the release notes themselves, as I only click through PRs for screenshots when I think to look for them
(or a TODO tells me to)
yep, I forgot to write down to only add the fox. My bad π
Weird at some point this got removed
In a shocking twist, it was me all along
Hmm I'm not finding a good place to put that, as nothing discusses blender or -Y being forward
want me to write something?
If you open an issue and assign me to it, I can write it tomorrow
if you already add the pic now, I can just reference it π
Yeah feel free to PR it, although I'm not convinced we need to talk about blender or include that pic. I think the section is pretty good as-is
agreed it's not strictly needed
Bringing blender (and their coordinates) into the picture just adds another set of information for the reader to contend with
Yeah my main thought behind that was "what would a Jan that started Bevy last month have appreciated?"
And he would definitely have appreciated a clear pic of "look, this is how it's supposed to look"
but it's definitely a cherry-on-top kinda deal
Maybe we should direct that energy to adding a section to the book that covers the whole blender <-> bevy coordinate system story
yeah, like for example "here's the magic set of Blender params that make the Blender camera match the default Bevy camera" π
Yupyup
I bet @maiden heath also has a thing or two to say about Blender <-> Bevy
well, if you prefer that I can also leave the section as-is π
Blender -> BSN is the endgame I think
Not for me if I want to continue using TrenchBroom π
I'm looking forward to the asset format to play with this idea
Yeah I'm happy with the section as-is, and I think adding blender stuff to it is roughly a lateral move, due to the additional complexity the reader has to contend with
At the risk of being a bit off-topic, I need to import the models I create in Blender in other software too, like Substance Painter, TrenchBroom, Marmoset, etc.
And it's kinda neat that I can do that by just exporting glTF
exporting both glTF and BSN feels comparatively heavy. Do I put both in my VCS?
Yeah I don't think gltf should go anywhere / it should still have first class support. But it is inherently "lossy" when it comes to bevy context
If you need other tools between blender and bevy, I think gltf-only is the move
Unless you want to add BSN support to those tools π
Do you know someone at Adobe? π
Nope π
plz
Okay @dry rune, revisions pushed to https://github.com/bevyengine/bevy-website/pull/2248. I've cut the materials + asset processing stuff, and substantially revised the UI-related sections
No rendering-specific future work, but I think that's fine because we're mostly in a tech-debt/foundations phase for the next bit from what I've seen π
do we also want to mention upstreaming the CLI?
-# also bevy_seedling is amazing, thanks for including it
That will need a lot of maintainer bandwidth; I'm optimistic about it but don't want to promise it
approved in that case 
I also don't think it's very convincing to people who aren't currently Bevy users π€
Bumping https://github.com/bevyengine/bevy/issues/21167 to 0.17.1 (limited effect, hard to fix)
Bumping https://github.com/bevyengine/bevy/issues/21201 to 0.18: low impact and I don't want to ship another breaking change at this point in the release candidate
Oh btw, we managed to iron out all WebGPU and multithreaded audio issues on Foxtrot π Can confirm it all works lovely in 0.17!
(See https://janhohenheim.itch.io/foxtrot on a browser that has WebGPU support)
<@&1064695155975803020> the final two PRs for Bevy 0.17 are in the merge queue. We have open PRs for all of the remaining content for the release notes: summary, future work and images.
The only remaining release tasks are:
- refine and merge the final bevy-website PRs
- final numbers for contributors etc
- more polish on the release notes
- bump to 0.17.0 and do a
cargo publish
I'm done for the week now, and will be hiking quite a bit this weekend π
So uh, my availability will be limited!
My vote is I spend Friday getting our ducks in a row, then we release Monday
I'm on board with that
I think this is incredibly tricky in every game engine out there. There are hundreds of hours of YouTube content dedicated to exporting correctly from Blender to other things. Usually other engines seem to expect you to change export settings in Blender as a prerequisite to have it working correctly in engine. I personally think things like this should be extensively documented so that people don't have to do trial and error. Even if gltf coordinate conversions magically solves all the issues I think the underlying problems should still be documented. Maybe this has no bearing on the 0.17 release but I just wanted to mention I agree that this stuff is vitally important to extensively document somewhere.
Even if gltf coordinate conversions magically solves all the issues
Unfortunately it can't. At least not with gLTF. You can either have the coordinate systems match (current and prior bevy) or have the forwards match (the new feature (with some exceptions)) but not both, at least not while maintaining other things bevy cares about much more (at least based on various conversations this cycle).
Really need to sort myself out for this. My pr has been in a yucky state for a while now. Iβve been going down the spacetimedb rabbit hole with a bevy client π
π I am indeed on european time
Found another regression that is fairly important to me: https://github.com/bevyengine/bevy/issues/21228
is there a chance to include this if I can push a fix today?
That was broken by https://github.com/bevyengine/bevy/pull/20163 . I think the dynamic part is a red herring; the breakage is that Option<&Disabled> no longer counts as a use, even in static queries.
Oh i see; how could i make a dynamic query (FilteredEntityMut) be able to fetch disabled components?
I would expect builder.filter::<Allows<CustomDisabled>> to work, but I haven't actually tried it.
Maybe by changing my query to Query<(Option<&Disabled>, FilteredEntityMut)> thanks to your other change?
builder.data::<Has<CustomDisabled>> should also work
This stuff should be in the migration guide imo
No, Option<&Disabled> never counts as a use, because we can't distinguish Option having access to some things from EntityMut having optional access to everything.
Yeah, sorry, I should have written a migration guide for that. The first version didn't have the breaking change, and I forgot to add one when I reworked it.
Both your alternatives work, thanks!
I'm a bit confused as to why Has<T> is archetypal; doesn't Query<Has<T>> match all entities?
The meaning of "archetypal" here is a little muddled. I think it was originally added for Has<T> to mean "this query doesn't read T, but the results might change if a T gets inserted or removed". It then got repurposed for Allows<T> to mean "this query doesn't read T, but it mentioned T, so bypass default query filters for T". Which is sort of the opposite! But also it means Has<T> bypasses the default query filters for T, which it clearly needs to do.
Thanks, that's a very clear summary
Do you think you could add it before we ship on Monday?
No pressure, itβs also fine if we at least copy paste this discussion into the open issue π
Yup, just did! https://github.com/bevyengine/bevy-website/pull/2251
Oh wow that was quick! Thanks a bunch π
Found a soundness issue (I think) but I guess it is triggered in so very niche cases that this should not block:
https://github.com/bevyengine/bevy/issues/21230
@dry rune do you want some production feathers_ui showcase for the release notes?
The only non-upstream part of that screenshot is the text input, which is ick's bevy_ui_text_input, i.e. the one that we're upstreaming in 0.18 (in a modified form)
Where did we get the cover image from? The lighting looks a little off π€
Like an I crazy, or are some objects missing shadows?
No not yours, the cover image in cart's PR
With a robot factory thing that's orange
oooh I see, sorry π
Nw
this?
pretty sure that's a factory game I've seen in #showcase
and yeah the shadows don't look correct
Found it: #showcase message
yep, found it in their press kit
Not that I have anything against their art style, but I would personally prefer the Solari scene as a cover π
though there is no cute robot in the middle (yet?)
huh, weirdly enough this other screenshot of their press kit has correct shadows
Though maybe that was rendered in Blender and not Bevy
Yeah that one looks much better π€
The robot in solair moves π
maybe we could do a screenshot where they look into the camera? π
Unfortunately I don't have acess to my pc for a bit, but anyone else with a Nvidia GPU should be able to set it up
Also we should probably credit pica pica in the release notes
@celest hill, in case you have better shadows available π
We like showcasing real projects with Bevy for these!
Makes sense π
I kinda liked Jasmine's Bistro render over pica pica
but we already used Bistro for 0.6's cover image, and yeah it makes sense to showcase real projects
Yup the cover image is locked in for this one!
Yeah that would be cool! I'll slot it in
Ahh the fact that people think the shadows look correct isnβt a good sign. The shadows are soft as an aesthetic choice to make the world look warmer.
I am using the default bevy shadow system tuned such that the shadows are as soft as possible for said aesthetic reasons. When I took those screen shots I didnβt have a save system written yet so I canβt easily recreate them sadly.
Let me take some new shots real quick
With more accurate shadows settings
Man, that's so cool that this is Bevy
Wow bevyβs shadows have come a long way since 0.6, looks great!
Oh wow looks awesome!
Great! Is that specific screenshot good or do you need another?
The uncompressed version of this one is my fav.
just checking in, how has the new progress been for maintainers? it seems like the content migration went smoothly?
do we need to enforce better conventions for making where image/video content should be added manually?
Yup that one is good
This would be nice, but not vital IMO
In general it was definitely a big improvement. Some pain points:
- I still spent a lot of time capturing / recording media, either because it wasn't included, it didn't follow conventions (the big ones being including "debug text" and "OS window decorations"), or it didn't put the feature in its best light. I also spent a reasonable amount of time re-encoding / trimming (converting pngs to jpgs to cut down size, cutting down videos that were too long / weren't mp4s / were "too big", etc)
- I still spent a reasonable amount of time on a quality / editorial pass. Not much to be done about this as my whims are arbitrary.
- I had to do a pass to unify markdown styling (ex:
_emphasis_vs*emphasis*,- list itemvs* list item). Our rules look for internal consistency rather than global consistency. Global rules here would be nice.
I've been very very happy with the new release notes process overall
We should write out the exact preferences for media and then stick that somewhere prominent
https://github.com/bevyengine/bevy-website/issues/2252 could use some bikeshedding. My initial draft erred on the side of "underpromising", but maybe we could have a line that explicitly calls out that building an "editor" remains our driving goal, and the Future Work there all builds towards it?
I was checking and there's a hint missing about the future of Bevy Editor:https://github.com/bevyengine/bevy-website/blob/main/content/news/2025-09-24-bevy-0.17/index.md#whats-next
It's too hard for me to do. Idk how to take screenshots without the window title, add the text, etc
I was assuming maintainers would just take my screenshot, crop out the window title, and then resize it and add text
Someone needs to create an ascii cinema tool but for bevy demo content capture lol
Probably just need to have a template for setting the window size, setting it to borderless, displaying some text with a certain font, etc
bevy pretty_screenshot
it would be cool if there was some command-line config for examples that removed the window titles, etc. I've spent some time doing similar things and we might be able to plop an example plugin with the config behind a flag?
we could just do a plugin with Bevy builtin screenshot capability
otherwise instructions will have a part that will be OS dependent, it's going to be a bit painful
so instructions would be "add plugin ScreenshotPlugin, press key p, boom you have a screenshot"
next will be to write the ScreenrecordPlugin plugin that can record a movie... and its v2 that takes a list of positions and timings and smoothly move the camera
does the screenshot capability reliably capture every frame right now? for some reason I thought there was some cpu/gpu interfacing that caused delays or out of order weirdness
noβ¦ I mostly use it in CI on integrated GPU where itβs definitely too slow
maybe itβs fast enough on actual hardware
otherwise we would have to make the ecs being driven by frame captureβ¦ which I wouldnβt hate. it would make Bevy usable for movie creation
its something I'd be interested in. the alternatives are things like remotion for graphics, etc.
define target fps, make time advance when the frame is captured. we already have most of the tools
Honestly this would be useful to point folks at in the books for making Steam screenshots and other marketing material π€
I tried a few of the other tools and I always end up thinking that I want to use Bevy for that π
I know a few cartoon are made on Unity
work on the scene on your computer at 1080p / 60fps, once it's all good send it to the render farm to be rendered at 8k / 240fps
the biggest blocker is agreeing on the default key
PrintScreen π
doesn't exist on my laptop π
no you can do it but itβs not optimized to taking a capture every frame and writing out full frames to disk will chew up space really quickly. iβm working on vulkan video slowly which will eventually allow doing hardware encoding which is probably the right choice for most users who can
yeah I mean, "a ton of individual frames" is a legitimate video format, especially if you start talking about converting raw stuff, etc
would I like better? yes. Is disk space my primary concern? no.
oh yeah i mean itβs totally workable but i think ppl who have not recorded like that before might be surprised how much space it uses. just would wanna give a warning or something
https://en.wikipedia.org/wiki/CinemaDNG for reference on the "folder of files is a video format" comment
ffmpeg can take a folder full of images to make a movie
but then ffmpeg can probably take /dev/urandom and make that into a movie
folder of .exr files is basically the vfx industry's canonical video format
It would be funny to see what writes more to the drive per second: clean bevy build vs screenshots at 1080p60
it would also probably be easy enough to capture every frame and send them to a software encoder instead of writing them all to disk
not as good as hardware encoding, but workable
So it looks like Bevy 0.17.0-rc2 took 1:26 to build and the target folder is 10.7GB. A somewhat busy 1920x1080 PNG (bevy default screenshot format) seems to be about 1MB so compiling bevy is something like recording at 124FPS (as a lower limit, idk if rustc overwrites things on a clean build)
Unrelatedly, it seems like bevy is building faster than I remember
render crate splits and reflect codegen cleanups
reposting again for visibility: https://github.com/bevyengine/bevy/pull/20647
These are great shots, but I still prefer the original shot:
- I think it has better composition
- I like that theres no UI in the shot
I think what makes a good "gameplay shot" is sometimes at odds with what makes a good "blog post cover shot"
I'm still inclined to roll with that one / I'm happy with it. The shadows dont really bother me. If you want to do more workshopping, I'm definitely down though π
If we're going to try more options, my notes would be:
- Lets hide the reticle in the center and the ui widgets on the sides (although we can just crop the side widgets out ... only the reticle would require code changes)
- I think a shot closer to the ground, with the robot slightly off center works really well (with machinery and other stuff in the background)
the naive way to record to a gif... every frame, if there's not a frame being captured, capture one. roughly 30fps on my mac m4
ouch discord compression makes it look way worse
yeah, assuming that flickering doesn't exist in the original?
yup
re: 30fps, is that due to the slowdown of taking a screenshot or are you framepacing or something?
you can call screenshot every frame
or should be able to?
i know at least readback is fine to run every frame
just the time between adding the component and it being removed, nothing from me
I can but that makes the file explodes in size π
from 30fps to 120fps is not friendly
we need in tree framepacing fr
I believe IceSentry want to try upstreaming it in 0.18
i also recall him un-volunteering if anyone else wanted to handle it π
hehehe true
this was a good summary of a few kinda related projects we would like to land in this area
i think i now understand point (3) properly, after talking with the winit devs.
our event loop need reform, i hope to do that during 0.18 and have it ready to land early in 0.19
assuming 0.18 is super quick, like everyone is sugesting
very excited! am available for review / testing as needed π«‘
one of my big goals this cycle is to get bevy set up on my old android/iphone so that i can finally test all the platforms
famous last words
oh very interesting
@dry rune @edgy jetty I know this is kind of last minute, but a lot of my repos relied on the ability to impl DynamicBundle, and with the recent changes to bundles it appears that this may no longer be possible. That is, I used apply_effect to do various reactive things, and this now gives me compilation errors about being unsafe. I didn't detect this earlier because my experiments were working off of cart's branch which didn't have those changes.
Bundle's documentation now says:
/// Manual implementations of this trait are unsupported.
/// That is, there is no safe way to implement this trait, and you must not do so.
If it crashes that sounds like a bug. Can you file an issue?
When I played with BundleEffect these docs were already in place and honestly they seem more true when your type contains non-effect components.
this comment has existed for a while, but all of the bevy_ecs bundle types with effects like SpawnRelatedBundle are just simple wrappers around other bundles that forward this trait; it's still possible to implement this trait yourself, but you have to uphold some safety guarantees and I guess those aren't spelt out?
there you go, easy demos: https://github.com/bevyengine/bevy/pull/21243
it's close to the code I'm using when I record a demo, but builtin in Bevy π
Looks like this method wasn't backported to 0.17:
https://github.com/bevyengine/bevy/pull/21101
Can we get this for 0.17?
added it to the milestone
Thanks!
@proud bone, you might miss this one due to the chronological ordering
already cherry picked π
I really like the new entity layout - it compresses nicer into two varints.
However, the methods for reconstructing an entity feel a bit too raw. For example, here's how I create an entity with index = 1 and generation = 1 in my unit tests:
let expected_entity = Entity::from_bits((1 ^ u32::MAX) as u64 | (1 << 32));
We have Entity::from_raw_u32, but maybe we could rename it into Entity::from_raw_u32_index and add Entity::from_raw_u32 that accepts both generation and index as u32?
I would be fine with friendly constructors for Entity like this as long as methods to spawn specific entities remain locked down
Well, I tried adding unsafe to my impl but the compiler just gives me an error, even with empty methods:
unsafe impl<E: EntityEvent, B: Bundle, M, I: IntoObserverSystem<E, B, M>> Bundle
for AddObserver<E, B, M, I>
{
#[inline]
fn component_ids(
_components: &mut bevy_ecs::component::ComponentsRegistrator,
_ids: &mut impl FnMut(bevy_ecs::component::ComponentId),
) {
}
#[inline]
fn get_component_ids(
_components: &bevy_ecs::component::Components,
_ids: &mut impl FnMut(Option<bevy_ecs::component::ComponentId>),
) {
}
}
error: implementation of an `unsafe` trait
Does the project have something like #![forbid(unsafe_code)] applied?
I'm trying to write a Bevy example. I get the same error regardless of whether I put this code in a Bevy example, or in bevy_ui_widgets.
https://docs.rs/bevy/latest/bevy/ecs/bundle/trait.Bundle.html#safety is this somehow enforced?
The Bundle trait enables insertion and removal of Components from an entity.
you might have to have an #[expect(unsafe_code, reason = "")] before the unsafe impl?
OK that works
It can't really be enforced, but it means that your unsafe implementation can silently become unsound with any update, even minor/patch ones.
Does Single change meaning in 0.17? or is it planned for 0.18?
it does not
it's planned for whenever the error handler can differentiate between error severities
speaking of the error handler, if an error occurs, will that always stop the app in some way?
like a system returning a Err(BevyError)
No, you can configure it to just log
okay, thanks
Can we get this one into 0.17? It's trivial: new constructor and one method now pub.
I think this should be added to 0.17.0 , https://github.com/bevyengine/bevy/pull/21238
Oh hey neat!
@arctic siren mind taking a look?
Also, tracy being broken on macOS sounds like a definite blocker to me, moving the original issue back into 0.17 too
Which should be alright, given that the fix is right there π
i'm a bit curious, do somone have the time it tooks for each bevy version to get released ?
I feel like 0.17 took 5 month and half and 0.16 took 5 month and like 7 days ?
Someone even made a plot π
#engine-dev message
0.6 georg
0.17 will continue the growth trend, it will be at 161 days if we assume a tuesday release
i noticed each update become more and more ambitious with bigger/harder to code feature since 0.14
and bsn/the editor/many-to-many feature are comming, so it looks like it will continue to go this way for 0.18-0.21
Can i just check if the latest feathers changes are up to date on main @opaque magnet? Iβd like to get more feathers stuff in the inspector to showcase
You may want to patch to https://github.com/bevyengine/bevy/pull/21247
Does 0.17 have more time-consuming features than 0.16? I donβt think so, features like Solari and hotpatching were ready months ago
idk why 0.17 is the second longest to release version honestly
Imo we had some bad timing with things like the event rearchitecture happening last minute and the RC being blocked by annoying stuff like docs.rs failing
but it does continue the trend of each version taking longer than the previous
Yeah that I agree with
Bevy mostly has 1 release every 6 month right now
the community had a growth spike around 0.14 and stabilized (same time as release started to take longer)
it will probably have another growth spike when the editor get released in some shape
hmm, ok. seems like it might be worth not getting feathers changes in the inspector until bsn is ready? or are they not mutually exclusive now
sorry been OOTLP for a bit
A whole bunch of Avian tests are now failing with this on 0.17 π€
Encountered an error in system `Enable the debug feature to see the name`: Parameter `Enable the debug feature to see the name::messages` failed validation: Message not initialized
oh jondolf
do you think just wanting a kinekic character control with gravity physic + hitbox collision is enough of a reason to add avian to a project ?
(no non kinetic character)
kinematic *
This is such a cursed way to handle error messages without the debug feature lol
For a sec I thought name::messages was some actual thing
#1124043933886976171 please, but that depends on how complicated your colliders are going to be. If they're just rectangles or circles, you could implement it manually fairly easily, but for more complicated things you will likely want a physics engine (Avian or Rapier) or at least a collision detection library (such as Parry)
sounds like an add_message is missing? But yeah you should definitely enable the debug feature in tests / dev-deps
I personally wouldn't wait. Feathers is a bit verbose without BSN, but nothing blocking. See this UI I made with feathers: #1404237363550486751 message
Yeah apparently no message is initialized for AssetEvent<Mesh> in (your π) ColliderCachePlugin
oh mate, thatβs totally good enough for the first cut of the inspector
Maybe missing MeshPlugin? π€
Sounds like it
but uuh
that's not the job of the ColliderCachePlugin
sounds more like that plugin is not added in the test suite?
our* 

Yeah, but also Avian should probably not need the MeshPlugin for it to function with default PhysicsPlugins
I would expect the Avian features that have mesh in their name to depend on MeshPlugin tbh
I don't remember if the cache plugin is gated behind those though
Also, I have a new magic incantation for headless glTF tests in 0.17 that you probably will want to use
sec
fn headless_plugins(app: &mut App) {
app.add_plugins((
MinimalPlugins,
LogPlugin::default(),
AssetPlugin {
file_path: "your_test_asset_dir".to_string(),
..default()
},
ScenePlugin,
MeshPlugin,
TransformPlugin,
VisibilityPlugin,
GltfPlugin::default(),
))
.init_asset::<StandardMaterial>()
.register_type::<Visibility>()
.register_type::<InheritedVisibility>()
.register_type::<ViewVisibility>()
.register_type::<Aabb>()
.register_type::<MeshMaterial3d<StandardMaterial>>();
}
^ this might be of interest to other migrating to 0.17 as well
It is, but CI has almost all features enabled, and the tests often use MinimalPlugins (and the necessary extras). Would be neat if things would "just work" by default with minimal plugins, instead of having to figure out these magical incantations
oh also the tests do have MeshPlugin
so it seems like it's something else
Hmm I see where you're coming from, but I believe I disagree. Feels like this way, the physics plugins implicitly do stuff that MeshPlugin is supposed to do, acting as an invisible "MeshPlugin light edition".
Which goes into crappy "we have plugin dependencies at home" territory
imo better to be honest about which things beyond MinimalPlugins you need
But this is a weakly held opinion ^
Okay, I may know the issue then
but it's weird
add .init_asset::<Mesh>() to the incantation
If that works, I'll explain why
or at least try
Also, I know this should have some blessed way upstream. Vero was working on this a while, and it's part of the reasoning behind the render crate split
Yup it works
I do think this was due to the introduction of release candidates, not the size of the community
I had the same, let me show you the issue
In practice people were waiting for 0.13.1 to come out, which usually took a month or so
The solution was rm -r ~/.cargo/registry/src/* 
Interesting that we both hit the exact same cargo caching issue while migrating
Hold up
I take that back
Source of the Rust file src/mesh/mod.rs.
eek, MeshPlugin really doesn't init the mesh asset in 0.17!
oof
??
the first one initializes the mesh asset
the second doesn't
so uuuh
@fathom shoal is it possible that you're adding the wrong MeshPlugin?
I believe I am yeah, 0.16 only had the bevy_render one so it's still using that
oh wow this is subtle
the 0.16 MeshPlugin was moved to bevy_mesh, but there is now a new MeshPlugin that is at the exact same import path as the old one
ping @fair harness
okay, this is a definite blocker IMO
Looks to me like the rendering plugin is an implementation detail
Can we just not make it pub?
hmm, the rendering MeshPlugin has a doc comment saying it's supposed to add the asset
But that reads like it's more or less a duplicate of the regular MeshPlugin with some extra steps, which sounds wrong
would you look at that, the Bevy CI itself does the same mistake lol
@fathom shoal there ya go
wheew, good thing we caught this, otherwise with a headless server would have gotten a very very confusing error
Also funny that I already ran into this and gaslit myself into thinking it was a caching issue
@fathom shoal πππ
What even is the difference between the two MeshRenderPlugins?
Both seem to "make sure meshes can be rendered"
hmm loads a bunch of shaders, I see
I'll rename that one to MeshPbrPlugin
I hate all of this
It seems like MeshRenderPlugin does the actual rendering, and bevy_render::mesh::MeshPlugin mostly prepares mesh data, assets, and resources and whatnot?
idk
weird how that one is in pbr then
I'll instead name the one in bevy_render to MeshRenderAssetPlugin, given that it works with RenderAssets
Yeah, I like that
as not-a-rendering-person, that seems reasonable
I think it still needs to be public, since I believe that the glTF plugin actually needs both MeshPlugins 
Let's see what the CI says
One might find it mildly
that a MeshRenderAssetPlugin does not actually initialize Mesh as an asset
but it's probably fine since it's documented that it's done by MeshPlugin
@fathom shoal btw here's the pre-existing migration guide
re-exports have now been removed.
ironic
doesn't actually mention MeshPlugin, but I guess it's included in "Mesh types such as"
agreed, but taking a look at the actual MeshPlugin it does a liiiiitle bit more than just init_asset, so I believe just doing init_asset in the MeshRenderAssetPlugin could lead to very subtle user errors
yeah
Can't really add it in this PR since the release-content is already off main
Otherwise I would have added it, yeah
The real solution as always is plugin dependencies
Whew we were in luck
no need to add MeshRenderAssetPlugin to the GltfPlugin
The reason the CI complained (rightfully!) was that MeshPlugin forgot to initialize skinned mesh bind pose assets
PR should be good now π
Also added two trivial PRs by @primal arch to the milestone, since they are extremely low risk and they would like them for their migration
I missed this discussion but agree with the conclusion
Smuggled something ultra trivial into the milestone: https://github.com/bevyengine/bevy/pull/21268
Can't see it but I'm guessing this is that nice video talin put up?
Yeah, as someone who's been suffering UI for a long time, this gives me a spark of hope
Can you PR this please?
sure, will do in a few hours
IMO this is most interesting because it demonstrates the truly unusual level of flexibility that we're striving for in bevy_ui
9-patches and shaders are a common request for game UI
And extremely rare everywhere else
I'm trying to migrate the hexx crate to 0.17 and I'm having some issues with reflect. I've read the 0.17 migration guides relating to reflect, but can't work out what I'm meant to do. I've not contributed to hexx before so not totally familiar with its inner workings. I get an error with a struct member that's a reference to a type that itself derives reflect:
#[derive(Debug, Clone)]
#[cfg_attr(feature = "bevy_reflect", derive(bevy_reflect::Reflect))]
pub struct PlaneMeshBuilder<'l> {
/// The hexagonal layout, used to compute vertex positions
pub layout: &'l HexLayout,
the inner type HexLayout also derives reflect:
#[cfg_attr(feature = "bevy_reflect", derive(bevy_reflect::Reflect))]
pub struct HexLayout {
But in 0.17 I get this error
error[E0277]:
&'l HexLayoutdoes not implementGetTypeRegistrationso cannot be registered for reflection
help: consider removing the leading&-reference
I was thinking it could be auto-registration related? And/ or related to this being a library that doesn't pull in bevy default features (in fact, it just depends on bevy_reflect). The 0.16 code doesn't call register_type on either PlaneMeshBuilder or HexLayout, so my understanding of the autoregistration migration was, that I wouldn't need to enable reflect_auto_register in 0.17? Sorry, this could be off-topic. But was wondering if there was maybe an incomplete migration guide?
also: it looks pretty as heck
I've been out the last few days, are we still planning on releasing today?
I think it's been pushed back to tomorrow
there's a compile error in assets on web to do with the new http loader
i think this is a release blocker.
:((
it should be pretty easy to fix though
this is so cool
i really see your art deco influences now @opaque magnet (:
Art deco is one of the ones that really flies in the face of material design, it's a really good example.
Does adding #[reflect(no_auto_register)] help? If someone enables reflect_auto_register downstream, then all types will be automatically registered, even if they weren't before, so this might be the problem?
One of my pet peeves is that people confuse Art Deco and Art Nouveau. If you do a google search for "Art Nouveau borders", half of the search results you get will be deco, not nouveau, despite the fact that they look very different.
That doesn't help unfortunately. I'm just trying to get the library building in 0.17, there's no downstream consumer currently.
Probably not auto_register related then, although I didn't know that structs with & fields could be reflected in the first place. Also if there are no default features reflect_auto_register should be disabled either way. Maybe some other changes caused this?
@outer escarp are you sure that the versions of glam etc used match? Bevy updated glam versions, which will cause this flavor of error
I updated it to glam 0.30. Let me try 0.30.1 like it is in the bevy_reflect crate. edit: still getting the same error
I think it's related to the reflect macro cleanup. Probably this https://github.com/bevyengine/bevy/pull/19929 ?
Maybe we broke reflecting references?
Bisecting this would be helpful, yeah
And then we can revert or fix
@outer escarp can you please open an issue? Ideally with a minimal repro
And then we can fix and add a test
Removing the bound does break it
Aha, looks like we were missing tests
Issue with MRE created here: https://github.com/bevyengine/bevy/issues/21282
Minimal reproducible example: https://github.com/oliver-dew/ReflectMRE Bevy version and features bevy_reflect 0.17-rc.2 What you did Previously, you could reflect a reference (see bevy0.16 tag in a...
@marsh crest are you preparing a fix? I can do a reversion if you're not once I'm done with the #assets-dev fix
I'm looking into it, although not sure how easy it is to fix
Alright, thank you very much
Did this actually work in 0.16? As in, the struct is usable with Reflect?
I could use some help with https://github.com/bevyengine/bevy/pull/21283
I fixed the easy problems at least π
fetch_bytes has the wrong lifetime, it needs to be like this:
pub(crate) async fn fetch_bytes(
&self,
path: PathBuf,
) -> Result<impl Reader + use<>, AssetReaderError> {
Maybe it can be simplified further, but at least that makes it compile
edit: simplified it a bit
I think just TypePath works in that case, which is probably not very useful by itself.
I have found a way for #[derive(Reflect)] to not break on structs with lifetimes, but with the new 'static bound even TypePath wouldn't work, which makes it completely useless.
I suspect the right course of action in that case is to just not derive Reflect for those structs in the first place since they aren't usable for reflection anyway
This works! You rock
I misread the error mesage that rustc gave me
Because I didn't think + use<> was a thing
Yeah it's very subtle, this is the first case I have encountered where it makes a real difference
Mhmm. This must have broken during the 2024 edition upgrade
Right: non 'static types were never really usable for reflection currently anyways
It's a good question, I've not contributed to the hexx crate before. Looking at it more, reflection is an optional feature, and disabling it doesn't seem to break any of the functionality of the crate. In the examples, reflection is used for bevy egui inspection, but never for the structs with the reference. I agree with @marsh crest the fix is either to remove reflect from those structs, or not have that member be a reference.
is the release still tentatively happening tomorrow?
I think we're good there, but the final call is @dry rune's here. It's really just the Callback-yeet and associated release notes PR that need to be done now
FYI @tidal hollow π
I'm doing this review next!
I'm doing one more pass over the release notes to account for the most recent changes and do last minute tweaking / fill in stats + contributors
Mind merging in https://github.com/bevyengine/bevy-website/pull/2260 ?
@edgy jetty @opaque magnet currently the release notes state that feathers has
Decorative elements such as icons for visual enhancement.
To my knowledge theres nothing like this right now, other than the "decorative" nature of the checkbox and radio buttons (which is a stretch and already covered by another bullet point). What is this referring to?
If it isn't a part of 0.17 we should cut that line
This is planned, but does not exist in the main branch.
There are some standard icons in the bsn branch.
Like close (x), menu dropdown chevron, etc.
Also, it doesn't sound like my writing, I wouldn't use the words "visual enhancement" (I could be wrong, I'd need to look at the blame to be sure.)
At some point we should discuss how feathers should treat assets. Right now the fonts and shaders are embedded, because we don't want to burden people writing editors to have to copy the feathers assets into their assets folder. But since embedded assets cost ram even if unused, we don't want to embed a large selection of icons in feathers either.
Yeah this is an interesting question. Need to balance ease-of-use for things like "in-app dev tooling" (where asking users to drop the assets into their assets folder doesn't make sense) and not throwing a ton of assets into ram
For the editor itself, it probably makes sense to make them on-disk assets
I expect that the Bevy editor will have around 50 unique icons, but only about 6-8 of those icons will be common feathers icons.
But idk ... perhaps in memory is better for loading times
We can experiment with different paradigms. We might need it to be configurable
@dry rune What I (and I guess others) have proposed is that we have an accelerated schedule for 0.18 that primarily focuses on BSN (this is assuming we can get something releasable in a month or two). This doesn't mean no other changes, but it would mean putting off major work on other things (like the desperately neglected asset processing overhaul).
The things I'd like to see for 0.18:
- BSN with basic support for incrementalism (really basic, as in "replace this subtree")
- Finish the feathers roadmap, including text input
- There's a bunch of font-related issues/PRs teed up
- UI transitions and fallible interpolation
- Un-regress the multi-material mesh drawing in some way
It is hard to commit to an accelerated timetable at this point in the cycle, but I agree that nailing down the initial bsn + ui story should be the focus. And if we can get that out quickly I'm on board
I understand. You can't predict when an idea will come until it comes.
Given that asset system work is likely bottlenecked on me to a degree, I can definitely say that I'll commit to landing BSN + UI first
Yeah, that was my guess. I'm curious why the compiler allowed the old implementation of Reflect in the first place, but I'm pretty sure the bounds will never be satisfied so it was an implementation in name only. Even if 'a: 'static was added (which users can do with #[reflect(where)]) I don't think that &'static T implements Reflect anyway.
I've updated the release-0.17.0 branch the outstanding 0.17 items
^ a few more tweaks
After that all that remains is adding the release stats + contributors, and updating the release date
one last (doc) PR was pushed for the 0.17, I updated the branch, don't forget to pull it before releasing π
tyty
As a heads up, the generate-release tool we've used for previous releases to generate the contributors list no longer works, as our history has extended past the pagination limit:
Pagination with the page parameter is not supported for large datasets, please use cursor based pagination (after/before)
I believe this is fixable by just adding an after to our api call to filter out older stuff
working on that now
I'm guessing these migration guide entries are supposed to be links?
Yup hard-coding this worked
Is it considered a bug that ui will not render if bevy_ui_render feature is not enabled? No compliation error or runtime warning is printed either.
That is fully expected as bevy_ui_render is what does the rendering. Without it the ui is essentially "headless"
<@&1064695155975803020> I'll merge this tomorrow morning when the release is published
Or rather, this morning, as it is 1:27am here
Are you open to logging a warning for this?
The challenge here is that just because bevy_ui_render is disabled doesn't mean that some other render backend isn't trying to render it (this is the main reason we factored that out). We need to distinguish between "no renderer" and "3rd party renderer"
(if we want to print a warning)
For sure, it's the only thing I noticed as being unexpected and not able to be guided by the compiler in my upgrade from 0.16-> 0.17 so I thought I'd mention it here
Presumably you're disabling default features?
Yeah non-default cargo feature management will continually be breaking and unexpected for people as we add/remove features
We need "profiles" or something to help manage the complexity
Oh fwiw I think not having the equivalent for sprite caused the ColorMaterial type to not be available but there was no euqivalnt compile time issue for UI, probably just a matter of which types were moved?
If you're in the "manual feature management" lifestyle, across releases I recommend scanning / diffing https://github.com/bevyengine/bevy/blob/main/docs/cargo_features.md to see what you might be missing
quick, someone approves https://github.com/bevyengine/bevy-website/pull/2268 while Cart is sleeping to fix the release note CI
Hmm yeah I suspect ColorMaterial lives in the render crate or something
Thanks for the feature migration advice! I'll let you get back to release work now
i think we could have a compile warning if bevy_render and bevy_ui are enabled but not bevy_ui_render
Yeah that would probably work, although I'm not sure where we would write that logic
it would be a matter of putting a bevy_ui feature on bevy_render and having the bevy_ui feature in bevy_internal enable it with bevy_render?/bevy_ui, then print warning
thats not true
i personally dont think its worthwhile but if its needed it can be in bevy_render. all it needs is to have bevy_ui feature enable bevy_render?/bevy_ui
Feels gross no matter where we put it
yeah
The alternative is runtime state of some kind. Like a BevyUiBackendPresent resource or something
we could maybe have a dev tool plugin CheckThePluginsYouHaveMakeSensePlugin π
But thats also gross in that it requires backends to know to set it, and it only exists to print a warning
alternatively we could have a bevy_custom_renderer feature that disables the warnings globally
and just always warn when no ui render but yes ui
it kinda sucks
These all make me sad
im happy with just calling it pebkac
my preferred solution is to have the cli/editor handle that in a friendly way, and if you do it manually you're on your own
Yeah the true problem is that people are trying to manually manage every feature, which is advanced level / engine dev territory
Thats something even I have no interest in doing for my projects
disabling engine features mostly helps clean build time, i think its largely a non issue for most gamedev work. it only becomes relevant for library authors
if you're swapping the renderer thats your bag of worms to spill
This sounds like something that plugin dependencies could solve, when a plugin has no dependants but has some flag set indicating it needs a consumer of some sort
we could also just not add the ui plugin in default plugins maybe. just have ui render add it
idk if that solves anything tho
the components are still usable
Did you intentionally not add https://github.com/bevyengine/bevy-website/pull/2260 or was that a mistake?
Missed it! We should get that in.
Personally I disable default features for exactly this reason, it trims a lot of unneeded dependencies (and possibly also a bunch of default systems which are doing nothing (?)) which helps compile times and the already abyssmal target/ folder
can you resolve the conflicts with main, and remove the unrelated changes (formatting and date changed)?
The date was Alice hehe
Sure, will do later
otherwise it will conflict with Cart version. if you just scope it to the new video it will be easier for me to merge both
I don't have time to work on it right now, but the migration guide's headings are kinda quirky
There are some incorrect headings (like "Opt-Out variant" should be a sub-heading)
And the zstd section has this giant "Migration Guide" H1 sticking out of no where:
I don't think it's blocking, but it would be nice to get fixed before the majority of our release traffic hits the page
Not sure this is a change-worthy note, but the release notes don't mention that light textures aren't cross-platform (because the underlying decals feature isn't cross platform: https://docs.rs/bevy_pbr/0.17.0-rc.2/src/bevy_pbr/decal/clustered.rs.html#439-441 ). Notably, they don't work on macos.
Sounds important to include in both release notes and docs, agreed
Hmm do light textures not use forward decals, then?
Just checked, yep, itβs clustered
Bummer
J'ai fini
(nearly wrote "Je suis fini" and then remembered that that's an entirely different thing)
Added a review comment for this.
Working only on native Windows, Linux, and Android is quite the limitation
Yeah that's probably how Alice dog-eared my suggestion of making them links to the relevant sections of the release notes π
Also added it to the docs: https://github.com/bevyengine/bevy/pull/21296
Can we get these in last-second plz?
thanks!
(and merged into Cart PR)
I love the new events architecture, but I'm not a big fan of the new "Message" naming.
It collides with messages in networking π’
should have been called Letter π
Notification(?)
Maybe I just need to get used to it.
"Message" on its own feels natural for a buffered event, but after working on a networking crate my brain associates that name with networking.
I'm not running into any type naming collisions with bevy_replicon, just with variable names π€
What is message used for in networking? Isn't a message generally a "packet" in networking?
Packet is a more low-level thing. Packets have size limit and messages can be split across multiple packets.
Ah, right, so a message would be a combination of packets, got it
Part of the problem, I think, is that we live in an industry in which the need for terminology of finely-differentiated modes of communication and information transfer has outstripped the English vocabulary.
I like calling them netmessages / netmsg, or c2s/s2c for a specific direction
Just go full java NetworkingCombinedPecketMessage with an associated NetworkingCombinedPacketMessageFactory
my favorite: "bevy_replicon::Message" and "bevy_event::Message" being explicitly written every time π
I find it fits very nicely. It conceptually fits in the same way messages in RUDP messages are regularly buffered on both ends of the connection.
Luckily, we don't have any type collisions π
I also may just used to terminology for tools like zeromq or rabbitmq which all work a similar way
Here is a small snippet of the old naming.
Now I need to rename event(s) -> message(s). But I already have messages, so it becomes client_messages.
When I iterate over messages, the loop variable now message. But it's also occupied. So it becomes bytes.
And things like this across the whole codebase π’
So nothing critical. Just too many messages π
You could always go with something archaic like "missive" or "tidings" π
Epistles
I've started the release process, but I'm missing perms to publish some of the crates. I've reached out to the relevant person, but I've gotta wait until they come online to wrap up
The train is back on the rails!
What were we missing??
Oh wait was it solari, we never created that crate did we
Oh nice it does exist now though
Also all the new rendrering sub-crates
Just finished updating all of taintedcoders.com to 0.17, just waiting for the release. Gonna be the first release I'm right on time π
WOOOOOOOO
Congrats :)
nice work yall
Congrats on the release! I'm curious why the blog post is not linked in the announcement message?
to maximize engagement with posts on external sites
we did itttt, congrats everyone incredible work
almost actually haha
Ah I see
Well done everyone :)
Small nit: The environment maps are in-between the sections of feathers and headless UI which is a bit weird. Also in the highlights it's first headless UI and then feathers while it's the other way around in the post itself
also the heading levels are still very much wrong
someone mentioned it earlier already, don't remember where
oh here
fix for bevy's part of the problem: https://github.com/bevyengine/bevy/pull/21304
Objective
Fixes #21303 (but does not add any testing that similar issues will not recur).
Solution
Globally replace feature(doc_auto_cfg) with feature(doc_cfg).
Testing
Tested that RUSTDOCFLAGS=--c...
I'll publish a 0.17.1 as soon as it's fixed
π€¦ find-and-replace not broad enough (those are the ones that mention docsrs_dep)
I would appreciate an approval π
please be sure to include the other 0.17.1 PRs
yup the release script picks up everything merged in the milestone
so... no docs for us π
after fixing those doc_auto_cfg, we have an ICE:
error: internal compiler error: compiler/rustc_middle/src/ty/typeck_results.rs:593:9: node HirId(DefId(0:11 ~ type_data[1e94]::main::Damageable::damage).6) (type `Self::Health`) cannot be placed in TypeckResults with hir_owner DefId(0:8 ~ type_data[1e94]::main)
can we just remove that example until we know how to fix it?
or is there a way to tell the docs to exclude a specific example from crawling?
I can publish in the morning (~6 hours) if y'all agree in how to fix / disable it and get @edgy jetty to merge the PRs in main. I'll cherry pick and publish during breakfast π
if you eat some fruit for breakfast you can cherry pick while you cherry pick π
the 0.17.1 branch is there: https://github.com/bevyengine/bevy/tree/release-0.17.1
I can do that
Want me to PR a temporary
of the ICEing example?
We can even just PR it right back lol
just needs to be gone for the release
Yes please
I'm off work today but I can do that
cool! I'll try to reproduce the ICE first locally
nope, cannot reproduce
blindly remove the example it is, then
hold up
there's doc-scrape-examples
can we just make that false 
no promises
but I hope that changing this setting will make cargo rustdoc on their end not compile this example
@proud bone, merging this
can you wait a little second
want to try something out locally
kk
alright, I can verify locally that this change does what I hoped it does π
I still cannot reproduce the ICE, but cargo rustdoc doesn't complain when I introduce a syntax error into the file, meaning that the compiler must be ignoring it
if any other examples cause an ICE, we can just also disable doc scraping for them
ready for merge
Merging
I assume very one is already aware of this, but just in case.
Yep, we're on it
Probably releasing an immediate 0.17.1 to fix this
Go even more archaic with Old / Middle English and use Errand in the meaning of message.
Bevy 0.17.1 published, I'm waiting for the build on docs.rs to pass to make the discord announcement
oh the new observe bundle effect is locked behind bevy/experimental_bevy_ui_widgets, was that intentional?
I get that its temporary and a non-final api, but it should probably be in the prelude with the amount of people that are going to reach for it
I think the rationale is that the API might evolve a bit before it's finalized. If you look a the various third-party crates that do the same thing, they are all syntactically different.
But I agree that the concept is one that is badly needed.
yeah, it just seems very separate from the widgets and something everyone is already trying to reach for
I can say with confidence that every project I build will use this experimental flag just for observe, but not necessarily for widgets
Well, it's only about 50 lines of code, so you can always cut & paste it into your project if you don't want to set the flag.
I'm working through some pedagogical material at the moment, so copy/pasting wouldn't be an option
Maybe what we should have done is have a separate feature flag for just the observe function.
I can tell people to turn on the flag, but I was curious if it was intentionally behind it currently or more of a "this pr went in the day before release" kind of thing
It's more that cart and alice were dubious about the way I implemented it
That I was using features of Bundle effects beyond their intended use
yeah, I do get that we want a different end API for it, with many/many relations backing it
Essentially, it's a component that inserts nothing () but has a side effect of calling .observe().
well maybe it will have the effect of more people using the widgets then
yepyep, I read the impl to figure out if it could be used multiple times
The two other approaches seen in the wild are:
- A struct rather than a function, e.g.
ObservedBy - A macro, e.g.
observers![]
docs built! https://docs.rs/bevy/0.17.1/bevy/
for those that think the 0.17 improved compile times... building all the examples in wasm on the 0.16 took 15h19m, on the 0.17 1d9h52m
that's so much worse that it seems like it's hitting a pathological case or something π
Maybe it's worth turning some of the examples into doc examples?
that's not really related to compile time π
I thought compiling examples themselves takes a lot of time π€
building less examples is hiding the problem, not fixing it. if we want them faster for the website we can throw more CI at it
I hope nobody is building all the wasm-compatible examples twice (webgl2 and webgpu) on their local
Was there a significant number of new examples introduced?
True! I just think reducing the number of examples might also be useful.
For example, things like headless app example could be just a doc example. I don't think users really need to run them.
compile time changes over the last few months... (on linux, native, with 8 cores)
the recent decrease was when I updated Rust β€οΈ
wasm is usually a bit worse, and less cores in CI
Weird stock, where can I invest?
Cart wants to yeet that as quickly as possible
Itβs fully intentional that itβs as gated off as possible
With the rationale of "things that are not components should never pretend to be components"
So even a different implementation wouldnβt have been treated any differently, because observers fundamentally are not components
Instead, Cart wants this kind of operation done by BSN, where you can say "spawn this and observe it like that"
So the current observe function is just there as a crutch to make the API of the headless widgets / feathers more usable and closer to the 0.18 version for an easier migration
It will almost certainly be removed in 0.18
^ paraphrasing Cart for all of this
Although I did think that we should have made it easier to use π
Thank you β€οΈ
to be clear, I was already aware of all of this reasoning before I asked about the feature flag, I was asking because the PR was created and merged at the very last second for the release. I know the observe implementation is not the end-goal api and that it will change. What we've done here is provide the api and make life harder for anyone that is interested in using it... and changing the APIs between 0.17 and 0.18 is a regular, expected occurrence for any api. Are you saying that we're planning to break this API in 0.17.2?
I view including observe here (hidden behind the experimental flag and scoped to the widgets work) as a targeted "middle ground" compromise in the interest of not hamstringing the UX of this work while we wait for bsn!.
https://github.com/bevyengine/bevy/pull/21247#pullrequestreview-3282282172
Is the actual reasoning I was looking for if anyone else comes up with the same question.
Migrating renet, which is a networking crate. It contains the bevy feature.
But it's a bit confusing to have ServerEvent, which is a Message in Bevy.
On the other hand, renaming it to ServerMessage would be even worse π’
I use ServerClientMessage/ClientServerMessage
I don't know the specifics of renet, but in all my previous work with client/server authoritative MMOs, usually it is message passing between client and server.
So I don't find it strange or weird
Plenty of Bevy messages are called event: AssetEvent, WindowEvent, GamepadEvent are all Messages 
So donβt feel too pressured to rename it
Yep, it's what I usually expect.
But it's not a message from client to server. It's an event that happens on the server when client connects or disconnects.
I see, yeah, IIRC some of them had a distinction between things that was about to happen (Messages) and things that had already happened (Event). So I guess this example fits on the second one, which is kinda weird indeed.
It's another Svendoring Saturday for me π
cleaning up the bits of my dependency tree that aren't up at 0.17 proper
And all up to date π«‘ though web builds are broken for me, going to try to update my bevy_cli
I agree; I think that we don't need to get too rigid and pedantic with the naming convention. "message" and "event" are used for a LOT of things in programming, the terms are very general.
Trying to do a land-grab on those names is likely to end in tears.
so there's a problem I'm running into where bevy_http_client depends on ehttp which depends on a different version of getrandom (0.2.x) than everything else and isn't playing nice with the wasmjs/jsconfiguration for getrandom v0.3
Which error are you running into? Get random v2 and v3 should work in combination, I think both are in Bevy's dependency tree anyway for 0.17
error: the wasm*-unknown-unknown targets are not supported by default, you may need to enable the "js" feature. For more information see: https://docs.rs/getrandom/#webassembly-support
--> /Users/[]/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.2.16/src/lib.rs:346:9
|
346 | / compile_error!("the wasm*-unknown-unknown targets are not supported by \
347 | | default, you may need to enable the \"js\" feature. \
348 | | For more information see: \
349 | | https://docs.rs/getrandom/#webassembly-support");
| |________________________________________________________________________^
error[E0433]: failed to resolve: use of unresolved module or unlinked crate `imp`
--> /Users/[]/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.2.16/src/lib.rs:402:9
|
402 | imp::getrandom_inner(dest)?;
| ^^^ use of unresolved module or unlinked crate `imp`
|
= help: if you wanted to use a crate named `imp`, use `cargo add imp` to add it to your `Cargo.toml`
It should work when you manually add a dependency on getrandom v0.2 with the js feature enabled.
If you build with the latest Bevy CLI it should give you a snippet to fix it (if not let me know that would be a bug)
Also try activating Bevy's web feature when building for you web if you haven't already, my hope would be that it automatically enables the required get random features
I'm building this with the bevy cli web bundling command, I don't get a snippet (version is alpha.2)
ooh, maybe this round it'll actually get through.
Dang it, maybe I missed a case.
Your project doesn't happen to be open source so I can do a repro, does it?
Proprietary, but I've got it to work (some subset of the above had to be specified. Going to narrow down on which.)
https://github.com/TheBevyFlock/bevy_cli/issues/546
The Toml snippet here should fix the feature configuration and then the CLI should fix the rustflag
Not sure why the CLI didn't provide you with the snippet though
with bevy cli, it was this that got there in the end
[target.'cfg(target_arch = "wasm32")']
dependencies = { getrandom_2 = { version = "0.2", features = ["js"], package = "getrandom"} }
features = {default = ["getrandom:wasm_js"]}
rustflags = ['--cfg', 'getrandom_backend="wasm_js"']
are also sitting about there in my actual toml but I think they're from quite a while ago and removing them didn't impact anything.
(for target_arch = wasm32)
Yea, unfortunately we can't configure this automatically without editing the Cargo.toml, which we don't want to do
need to lobby for cargo new/init to just always add wasm getrandom workarounds regardless of project π
I think the feature (which is for v0.3) is activated by Bevy already (if memory serves me right)
And the rustflag is activated by the CLI
So indeed this might not have an impact
yep
we should probably call out at the top of the migration guide that there are new *_render features that people using no default features might need to enable.
Yes please, I got hit by this during the migration
Is simply "new *_render features have been added, so projects without defaults features may need to enable them" in the bullet points of important stuff good enough? Should we also have a list of these new features? Should it be its own guide that is linked to?
i thought i already include a guide for this
The guide is good but the failure mode is that your stuff doesn't render, so it's hard to know what to search. So a bullet point at the top may help
Which guide? So that I know what to link to with the point up top highlighting it.
There's a huge rendering crate refactoring one
That doesn't outright state that new rendering features have been added, may need to enable them when no default features. Just sort of implies it by mentioning that specific things are under this crate a user may have never seen before (so implies there may be a new feature and crate you hafta import).
I guess proper solution is make that migration guide more detailed, and clarify / mention the new features may need to be enabled in the bullet point up top.