bevyengine/bevy · error
Cannot have multiple default variants
Error message
Cannot have multiple default variants
What it means
Compile error from derive_from_template: while scanning enum variants, more than one was marked #[default]. Template codegen needs a single unambiguous default variant to generate the Default/FromTemplate impls, and this guard fires when the count exceeds one.
Source
Thrown at crates/bevy_ecs/macros/src/template.rs:149
for variant in &data_enum.variants {
let result = match struct_impl(&variant.fields, &bevy_ecs, true) {
Ok(result) => result,
Err(err) => return err.into_compile_error().into(),
};
let StructImpl {
template_fields,
template_field_builds,
template_field_defaults,
template_field_clones,
..
} = result;
let is_default = variant
.attrs
.iter()
.any(|a| a.path().is_ident(TEMPLATE_DEFAULT_ATTRIBUTE));
if is_default && variant_default_ident.is_some() {
panic!("Cannot have multiple default variants");
}
let variant_ident = &variant.ident;
let variant_name_lower = variant_ident.to_string().to_lowercase();
let variant_default_name = format_ident!("default_{}", variant_name_lower);
match &variant.fields {
Fields::Named(fields) => {
variant_definitions.push(quote! {
#variant_ident {
#(#template_fields,)*
}
});
let field_idents = fields.named.iter().map(|f| &f.ident);
variant_builds.push(quote! {
// TODO: proper assignments here
#template_ident::#variant_ident {
#(#field_idents,)*
} => {
#type_ident::#variant_ident {View on GitHub (pinned to 396ca72708)
Solutions
- Keep only one #[default] variant per enum
- Pick the intended default and remove the attribute from the others
- Implement Default manually if multiple fallback variants are genuinely needed
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/bevy_ecs/macros/src/template.rs:149 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of bevyengine/bevy@396ca72708 (2026-08-20).
Data as JSON: /api/errors/64f0c82cd0276760.
Report an issue: GitHub.