{"id":49453275,"url":"https://github.com/jcornaz/heron","last_synced_at":"2026-05-16T16:00:59.088Z","repository":{"id":36989201,"uuid":"330189479","full_name":"jcornaz/heron","owner":"jcornaz","description":"[DISCONTINUED] An ergonomic physics API for bevy games","archived":true,"fork":false,"pushed_at":"2022-11-27T19:40:24.000Z","size":592,"stargazers_count":288,"open_issues_count":29,"forks_count":43,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-04-17T04:17:24.050Z","etag":null,"topics":["bevy-engine","game-development","physics","rapier","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/jcornaz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-16T15:10:57.000Z","updated_at":"2026-03-29T04:31:47.000Z","dependencies_parsed_at":"2022-07-15T21:00:50.334Z","dependency_job_id":null,"html_url":"https://github.com/jcornaz/heron","commit_stats":null,"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"purl":"pkg:github/jcornaz/heron","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcornaz%2Fheron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcornaz%2Fheron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcornaz%2Fheron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcornaz%2Fheron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jcornaz","download_url":"https://codeload.github.com/jcornaz/heron/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcornaz%2Fheron/sbom","scorecard":{"id":511777,"data":{"date":"2025-08-11","repo":{"name":"github.com/jcornaz/heron","commit":"27351be666e31fc7f7b39003ce0cc0a7ed2f9b10"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":2,"reason":"Found 6/26 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Warn: no topLevel permission defined: .github/workflows/look-ahead.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:121: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:133: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:135: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:87: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:88: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:111: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:144: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:145: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:171: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:98: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/look-ahead.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/look-ahead.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/look-ahead.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/jcornaz/heron/look-ahead.yml/main?enable=pin","Warn: containerImage not pinned by hash: .gitpod.Dockerfile:1: pin your Docker image by updating gitpod/workspace-rust to gitpod/workspace-rust@sha256:51450ef4f1da8cacc0096d5e9893f029c8b3784bd60c163c1ce8396dbf39c4e4","Warn: npmCommand not pinned by hash: .github/workflows/build.yml:177","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  13 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 15 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T00:43:25.794Z","repository_id":36989201,"created_at":"2025-08-20T00:43:25.794Z","updated_at":"2025-08-20T00:43:25.794Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33109461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bevy-engine","game-development","physics","rapier","rust"],"created_at":"2026-04-30T04:01:02.091Z","updated_at":"2026-05-16T16:00:59.081Z","avatar_url":"https://github.com/jcornaz.png","language":"Rust","funding_links":[],"categories":["Plugins and Crates"],"sub_categories":["Physics"],"readme":"# Heron\n\n[![License](https://img.shields.io/github/license/jcornaz/heron)](https://github.com/jcornaz/heron/blob/main/LICENSE)\n[![Crates.io](https://img.shields.io/crates/v/heron)](https://crates.io/crates/heron)\n[![Docs](https://docs.rs/heron/badge.svg)](https://docs.rs/heron)\n[![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-released%20version-lightblue)](https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md#main-branch-tracking)\n[![Build](https://img.shields.io/github/workflow/status/jcornaz/heron/Build)](https://github.com/jcornaz/heron/actions?query=workflow%3ABuild+branch%3Amain)\n[![Zenhub](https://img.shields.io/badge/workspace-zenhub-%236061be)](https://app.zenhub.com/workspaces/heron-600478067304b1000e27f4c4/board)\n\nAn ergonomic physics API for 2d and 3d [bevy] games. (powered by [rapier])\n\n## ⚠ The project is discontinued!\n\nHeron is in now discontinued. No more features, fixes or support will be provided.\n\nFor more details on the reasons, read the [announcement](https://github.com/jcornaz/heron/discussions/317)\n\n\n## Design principles\n\n* Use [bevy] types, resources and components when possible (`Vec3`, `Quat`, `Transform`, `Events`, etc.)\n* Provide a single API that works for both 2d and 3d.\n* Data oriented. Using this library should feel like its a part of [bevy].\n* Avoid asking the user to lookup in resources via *handles*. Data should be accessible and modifiable directly in components.\n* Hide the actual physics engine. This is an implementation detail the user shouldn't have to worry about.\n    * But, allow advanced users to access the underlying [rapier] resources, so the user is never blocked by a missing\n      element in the API of heron.\n\n\n## What it looks like\n\n```rust,no_run\nuse bevy::prelude::*;\nuse heron::prelude::*;\n\nfn main() {\n  App::new()\n    .add_plugins(DefaultPlugins)\n    .add_plugin(PhysicsPlugin::default()) // Add the plugin\n    .insert_resource(Gravity::from(Vec3::new(0.0, -9.81, 0.0))) // Optionally define gravity\n    .add_startup_system(spawn)\n    .run();\n}\n\nfn spawn(mut commands: Commands) {\n    commands\n\n        // Spawn any bundle of your choice. Only make sure there is a `GlobalTransform`\n        .spawn_bundle(SpriteBundle::default())\n\n        // Make it a rigid body\n        .insert(RigidBody::Dynamic)\n        \n        // Attach a collision shape\n        .insert(CollisionShape::Sphere { radius: 10.0 })\n        \n        // Optionally add other useful components...\n        .insert(Velocity::from_linear(Vec3::X * 2.0))\n        .insert(Acceleration::from_linear(Vec3::X * 1.0))\n        .insert(PhysicMaterial { friction: 1.0, density: 10.0, ..Default::default() })\n        .insert(RotationConstraints::lock())\n        .insert(CollisionLayers::none().with_group(Layer::Player).with_mask(Layer::World));\n}\n\n// Define your physics layers\n#[derive(PhysicsLayer)]\nenum Layer {\n    World,\n    Player,\n    Enemies,\n}\n```\n\n## Documentation\n\n* [guide and reference](https://docs.rs/heron)\n* [changelog](CHANGELOG.md)\n\n\n## MSRV\n\nThe minimum supported rust version is currently: `1.60`\n\n**It *may* be increased to a newer stable version in a minor release.** (but only if needed)\n\nIt *will* be increased to the latest stable version in a major release. (even if not needed)\n\n\n## Supported Bevy Versions\n\n| bevy | heron      |\n|------|------------|\n| 0.8  | 4, 5       |\n| 0.7  | 3          |\n| 0.6  | 1, 2       |\n| 0.5  | 0.4 - 0.13 |\n| 0.4  | 0.1 - 0.3  |\n\n\n## How does this project compare to bevy_rapier?\n\n[bevy_rapier] plugin is an excellent option and should definitely be considered.\n\nHere are some key differences between the two projects:\n\n* `heron` tries to provide a smaller, simpler API that is easier to use. `bevy_rapier` is more complete and powerful, but a bit more complex.\n* `heron` is focused on games only. `bevy_rapier` targets all kind of physics simulation applications (incl. games).\n* `bevy_rapier` is actively maintained by [dimforge], the developer of `rapier`. `heron` is also active, but cannot evolve as fast as `bevy_rapier` can. \n\n\n`heron` is probably more suited for simple games and game-jams, where the ease of learn/use is especially valuable and where the lack of advanced feature isn't problematic.\n\n`bevy_rapier` is probably more suited for bigger/complex games and other types of physics simulations, where it may be better to learn/use a more exhaustive/complex API. \n\n\n## Contribute / Contact\n\nYou can open issues/discussions here or you can discuss with me (`Jomag#2675`) in the [bevy discord](https://discord.com/invite/gMUk5Ph)\n\nSee [how to contribute](https://github.com/jcornaz/heron/blob/main/CONTRIBUTING.md)\n\n\n[bevy]: https://bevyengine.org\n[rapier]: https://rapier.rs\n[bevy_rapier]: https://github.com/dimforge/bevy_rapier\n[dimforge]: https://www.dimforge.com\n[nalgebra]: https://github.com/dimforge/nalgebra\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcornaz%2Fheron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcornaz%2Fheron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcornaz%2Fheron/lists"}