{"id":28413600,"url":"https://github.com/mizyind/bevy_ui_animation","last_synced_at":"2026-03-01T04:06:16.313Z","repository":{"id":57507414,"uuid":"474406467","full_name":"miZyind/bevy_ui_animation","owner":"miZyind","description":"A GSAP-like animation plugin for Bevy UI.","archived":false,"fork":false,"pushed_at":"2022-04-15T11:18:56.000Z","size":1263,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-28T05:57:12.690Z","etag":null,"topics":["animation","bevy","bevy-ui","easing","game","gsap","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miZyind.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-26T16:39:49.000Z","updated_at":"2025-10-23T07:24:59.000Z","dependencies_parsed_at":"2022-09-26T18:31:31.724Z","dependency_job_id":null,"html_url":"https://github.com/miZyind/bevy_ui_animation","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/miZyind/bevy_ui_animation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miZyind%2Fbevy_ui_animation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miZyind%2Fbevy_ui_animation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miZyind%2Fbevy_ui_animation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miZyind%2Fbevy_ui_animation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miZyind","download_url":"https://codeload.github.com/miZyind/bevy_ui_animation/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miZyind%2Fbevy_ui_animation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29960161,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T01:47:18.291Z","status":"online","status_checked_at":"2026-03-01T02:00:07.437Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animation","bevy","bevy-ui","easing","game","gsap","rust"],"created_at":"2025-06-03T05:00:50.846Z","updated_at":"2026-03-01T04:06:16.302Z","avatar_url":"https://github.com/miZyind.png","language":"Rust","readme":"# Bevy UI Animation\n\n[![Rust](https://img.shields.io/badge/rust-v1.59.0-0e7261?style=for-the-badge\u0026logo=rust\u0026logoColor=fff\u0026labelColor=2a3438)](https://www.rust-lang.org)\n[![Crate](https://img.shields.io/crates/v/bevy_ui_animation?style=for-the-badge\u0026\u0026logo=rust\u0026logoColor=fff\u0026labelColor=2a3438\u0026label=Crate\u0026color=a72144)](https://crates.io/crates/bevy_ui_animation)\n[![Docrs](https://img.shields.io/docsrs/bevy_ui_animation?style=for-the-badge\u0026\u0026logo=rust\u0026logoColor=fff\u0026labelColor=2a3438\u0026label=Docrs)](https://docs.rs/bevy_ui_animation)\n[![Bevy](https://img.shields.io/crates/v/bevy?style=for-the-badge\u0026labelColor=2a3438\u0026color=855667\u0026label=Bevy)](https://bevyengine.org)\n\nA [GSAP-like](https://greensock.com/gsap) animation plugin for Bevy UI.\n\n## 🌌 Features\n\n- ✅ Animate NodeBundle, ImageBundle, TextBundle, ButtonBundle\n- 🚧 Timeline support\n- 🚧 Bevy event support\n\n## 🔮 Usage\n\nTo use this plugin, the first step is to add a dependency to your `Cargo.toml`:\n\n```toml\n[dependencies]\nbevy_ui_animation = \"1.0.0\"\n```\n\nAdd the `AnimationPlugin` to your `main.rs`:\n\n```rust\nuse bevy::prelude::*;\nuse bevy_ui_animation::*;\n\nApp::new()\n    .add_plugins(DefaultPlugins)\n    .add_plugin(AnimationPlugin)\n    .run();\n```\n\nAnimate a bundle:\n\n```rust\nuse bevy::prelude::*;\nuse bevy_ui_animation::*;\n\nfn setup(mut commands: Commands) {\n    commands.spawn_bundle(UiCameraBundle::default());\n    commands\n        .spawn_bundle(NodeBundle {\n            style: Style {\n                size: Size::new(Val::Percent(100.0), Val::Percent(100.0)),\n                ..Default::default()\n            },\n            color: UiColor(Color::BLUE),\n            transform: Transform::default(),\n            ..Default::default()\n        })\n        .insert(Animation::new(Vars {\n            style: Some(Style {\n                size: Size::new(Val::Percent(50.0), Val::Percent(50.0)),\n                ..Default::default()\n            }),\n            color: Some(UiColor(Color::RED)),\n            transform: Some(Transform::from_rotation(Quat::from_rotation_z(\n                180_f32.to_radians(),\n            ))),\n            duration: 2.0,\n            ease: Ease::ExpoOut,\n            repeat: true,\n            yoyo: true,\n            ..Default::default()\n        }));\n}\n```\n\nPreview:\n\n![preview](https://github.com/miZyind/bevy_ui_animation/blob/master/examples/all.gif)\n\nYou can directly run this example by:\n\n```bash\ncargo run --example all --features=\"bevy/bevy_winit\"\n```\n\n## ✳️ Vars\n\n| Field              | Type                        | Default   | Description                                                                 |\n| ------------------ | --------------------------- | --------- | --------------------------------------------------------------------------- |\n| style              | `Option\u003cStyle\u003e`             | `None`    | A Bevy Style component containing the destination fields to animate to.     |\n| color              | `Option\u003cUiColor\u003e`           | `None`    | A Bevy UiColor component containing the destination fields to animate to.   |\n| transform          | `Option\u003cTransform\u003e`         | `None`    | A Bevy Transform component containing the destination fields to animate to. |\n| transform_rotation | `Option\u003cTransformRotation\u003e` | `None`    | A struct to rotate a Bevy Transform component around a given fixed axis.    |\n| text_color         | `Option\u003cTextColor\u003e`         | `None`    | A struct to lerp the color of a Bevy Text component                         |\n| delay              | `f32`                       | `0.0`     | Amount of delay before the animation should begin (in seconds).             |\n| duration           | `f32`                       | `0.5`     | The duration of the animation (in seconds).                                 |\n| ease               | `Ease`                      | `ExpoOut` | The ease function to control the rate of change during the animation.       |\n| repeat             | `bool`                      | `false`   | If `true`, the animation will keep repeating.                               |\n| yoyo               | `bool`                      | `false`   | If `true`, the animation will run in the opposite direction once finished.  |\n| paused             | `bool`                      | `false`   | If `true`, the animation will pause itself immediately upon creation.       |\n\n## 📜 Animatable Components\n\n| Name      | Field            |\n| --------- | ---------------- |\n| Style     | position         |\n|           | margin           |\n|           | padding          |\n|           | border           |\n|           | size             |\n| UiColor   | color            |\n| Transform | translation      |\n|           | rotation         |\n|           | scale            |\n| Text      | TextStyle::color |\n\n## 📈 Ease\n\n| Name         | 0%         | 50%        | 100%      |\n| ------------ | ---------- | ---------- | --------- |\n| BackIn       | `0.0`      | `-0.375`   | `1.0`     |\n| BackInOut    | `0.0`      | `0.499`    | `1.0`     |\n| BackOut      | `-1.19e-7` | `1.375`    | `1.0`     |\n| BounceIn     | `0.0`      | `0.281`    | `1.0`     |\n| BounceInOut  | `0.0`      | `0.5`      | `1.0`     |\n| BounceOut    | `0.0`      | `0.718`    | `1.0`     |\n| ElasticIn    | `0.0`      | `-4.29e-8` | `2.74e-6` |\n| ElasticInOut | `0.0`      | `0.099`    | `1.0`     |\n| ElasticOut   | `0.099`    | `1.0`      | `1.0`     |\n| ExpoIn       | `0.0`      | `0.031`    | `1.0`     |\n| ExpoInOut    | `0.0`      | `0.5`      | `1.0`     |\n| ExpoOut      | `0.0`      | `0.968`    | `1.0`     |\n| Linear       | `0.0`      | `0.5`      | `1.0`     |\n| PowerIn      | `0.0`      | `0.25`     | `1.0`     |\n| PowerInOut   | `0.0`      | `0.5`      | `1.0`     |\n| PowerOut     | `0.0`      | `0.75`     | `1.0`     |\n\n## ❇️ Compatibility\n\n| `bevy_ui_animation` | `bevy` |\n| ------------------- | ------ |\n| `1.0`               | `0.6`  |\n\n## 🙏 Thanks\n\n- @djeedai for [bevy_tweening](https://crates.io/crates/bevy_tweening)\n- @mockersf for [bevy_easings](https://crates.io/crates/bevy_easings)\n- @PistonDevelopers for [interpolation](https://crates.io/crates/interpolation)\n\n## 🖋 Author\n\nmiZyind \u003cmizyind@gmail.com\u003e\n\n## 📇 License\n\nLicensed under the [MIT](LICENSE) License.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizyind%2Fbevy_ui_animation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmizyind%2Fbevy_ui_animation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmizyind%2Fbevy_ui_animation/lists"}