{"id":15017976,"url":"https://github.com/fishfolk/bones","last_synced_at":"2025-05-14T12:07:04.642Z","repository":{"id":65347764,"uuid":"581287098","full_name":"fishfolk/bones","owner":"fishfolk","description":"An easy-to-use game engine for making real games.","archived":false,"fork":false,"pushed_at":"2024-12-04T20:31:28.000Z","size":364821,"stargazers_count":266,"open_issues_count":63,"forks_count":22,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-05-01T21:49:58.170Z","etag":null,"topics":["bevy","bones","bones-framework","easy-to-use","fishfolk","game-engine","game-engine-2d","lua","meta-engine","modding","multiplayer","pixels","rust","spicy-lobster"],"latest_commit_sha":null,"homepage":"https://fishfolk.org/development/bones/introduction/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fishfolk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-12-22T19:13:10.000Z","updated_at":"2025-04-26T10:43:58.000Z","dependencies_parsed_at":"2023-10-03T01:02:28.039Z","dependency_job_id":"1843a2ac-cf48-4985-952d-fae53a147a79","html_url":"https://github.com/fishfolk/bones","commit_stats":{"total_commits":308,"total_committers":13,"mean_commits":"23.692307692307693","dds":"0.30519480519480524","last_synced_commit":"965b000bfe2d2b6cad0e6c32281c47d9c6aed3e6"},"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishfolk%2Fbones","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishfolk%2Fbones/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishfolk%2Fbones/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fishfolk%2Fbones/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fishfolk","download_url":"https://codeload.github.com/fishfolk/bones/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254140741,"owners_count":22021218,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","bones","bones-framework","easy-to-use","fishfolk","game-engine","game-engine-2d","lua","meta-engine","modding","multiplayer","pixels","rust","spicy-lobster"],"created_at":"2024-09-24T19:51:16.529Z","updated_at":"2025-05-14T12:07:04.592Z","avatar_url":"https://github.com/fishfolk.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/fishfolk/bones_branding/main/renders/logo-rect.svg\" align=\"center\" width=\"250px\" /\u003e\n\u003ch1\u003eBones\u003c/h1\u003e\n\nA 'meta-engine' framework made to facilitate the development of moddable, multiplayer 2D games.\n\n[![Documentation](https://img.shields.io/badge/documentation-fishfolk.org-green.svg?labelColor=1e1c24\u0026color=f3ee7a)](https://fishfolk.org/bones/overview/introduction/)\n[![Crates.io](https://img.shields.io/crates/v/bones_lib?labelColor=1e1c24)](https://crates.io/crates/bones_lib)\n[![docs.rs](https://img.shields.io/docsrs/bones_framework?label=API%20Docs\u0026labelColor=1e1c24)](https://docs.rs/bones_framework)\n[![Main Branch Docs](https://img.shields.io/badge/API_Docs-Main_Branch-blue?labelColor=1e1c24\u0026color=red)](https://fishfolk.github.io/bones/rustdoc/bones_framework/index.html)\n[![License](https://img.shields.io/badge/License-MIT%20or%20Apache%202-green.svg?label=license\u0026labelColor=1e1c24\u0026color=34925e)](./LICENSE)\n[![Discord](https://img.shields.io/discord/865004050357682246?logo=discord\u0026logoColor=white)](https://discord.gg/4smxjcheE5)\n\n\u003chr /\u003e\n\n\u003c/div\u003e\n\nInitially borne out of [Jumpy](https://github.com/fishfolk/jumpy), Bones will eventually be the engine of choice for all [Fish Folk](https://github.com/fishfolk) games. It is suitable for any other games with similar requirements.\n\nBy default Bones is rendered with [Bevy](https://bevyengine.org), but it is fundamentally engine-agnostic and comes with its own lightweight ECS, asset server and user experience. Bones is officially focused on 2D games and models itself after the likes of [Corgi](https://corgi-engine.moremountains.com/). It can however be used for 3D games as well, if you are willing to create custom rendering integrations.\n\n## Overview\n\n### Bones ECS\n\nBones is designed around a simple, custom Entity Component System (ECS), designed to make it easier to get a few features that are important to us:\n\n- **Determinism:** Bones ECS is deterministic by default, making it easier to get a re-producible and predictable gameplay.\n- **Snapshot/Restore:** The Bones ECS world can be trivially snapshot and restored.\n- **Modding/Scripting:** Bones ECS is built on our [`bones_schema`] system, which allows for runtime reflection and the ability to interact with data types defined outside of Rust.\n\n[`bones_schema`]: https://fishfolk.github.io/bones/rustdoc/bones_schema/index.html\n\nDeterminism and Snapshot/Restore are also key features for getting excellent **network play** with the rollback networking model, while requiring no changes to the core game loop implementation.\n\n### Bones Lib\n\nThe [`bones_lib`] contains the [`bones_ecs`] and the [`bones_asset`] system. It defines the concept\nof a [`Game`] which contains all of your game logic and data in a collection of [`Session`]s that\neach have their own ECS [`World`].\n\nBones lib has no rendering components or even math types, it is only concerned with organizing your game logic and assets.\n\n[`bones_lib`]: https://fishfolk.github.io/bones/rustdoc/bones_lib/index.html\n[`bones_ecs`]: https://fishfolk.github.io/bones/rustdoc/bones_ecs/index.html\n[`bones_asset`]: https://fishfolk.github.io/bones/rustdoc/bones_asset/index.html\n[`Game`]: https://fishfolk.github.io/bones/rustdoc/bones_lib/struct.Game.html\n[`Session`]: https://fishfolk.github.io/bones/rustdoc/bones_lib/struct.Session.html\n[`World`]: https://fishfolk.github.io/bones/rustdoc/bones_lib/ecs/struct.World.html\n\n### Bones Framework\n\nOn top of [`bones_lib`] there is the [`bones_framework`], which defines the rendering components and\nmath types. Right now [`bones_framework`] is focused only on 2D rendering. 3D is not a priority for\nus now, but there is no technical limitation preventing community developed 3D rendering components\neither on top of [`bones_lib`] directly or as an extension to the [`bones_framework`].\n\n[`bones_framework`]: https://fishfolk.github.io/bones/rustdoc/bones_framework/index.html\n\n### Bones Bevy Renderer\n\nA game created with only the [`bones_framework`] is renderer agnostic, allowing us to create\nrendering integrations with other engines. Our official integration is with the [Bevy] engine.\n\nRendering in the [`bones_framework`] is intentionally simple, and some games may need more advanced\nfeatures that aren't supported out of the box. Bones, and it's Bevy integration, are designed so\nthat you can create custom rendering specific to your needs. That means you can still take advantage\nof any fancy new Bevy plugins, or maybe use something other than Bevy entirely!\n\n### Bones Scripting\n\n[`bones_ecs`] is built to be scripted. Effort has also been made to avoid putting unnecessary\nperformance limitations into the scripting system. Bones comes with an integration with the\n[`piccolo`] VM to enable Lua scripting out-of-the-box.\n\nThis integration allows Lua scripts to access the ECS world in a way very similar to the\nRust API. Rust components and resources can be annotated with `#[repr(C)]` to enable direct\naccess by Lua scripts, and if a type cannot be `#[repr(C)]`, you can still manually\ncreate your own Lua bindings for that type.\n\nAllowing both Rust and the scripting language to talk to the _same_ ECS world allows you to easily\nblend both languages in your game, and have them interact quite easily in many circumstances. If\na portion of your game needs extra high performance or low-level access, you can use Rust, but\nif you want hot reloaded and moddable elements of your game, you can use Lua.\n\nThe scripting system is not limited to Lua. Using the simple dynamic API to [`bones_ecs`], you can\ncreate your own integrations to any language or system you desire.\n\nThe scripting system is new and work-in-progress, but all of the major things have been\nsuccessfully implemented, and it is going to be actively used in Jumpy.\n\n[`piccolo`]: https://github.com/kyren/piccolo/\n\n## Contributing\n\nIf you would like to contribute, feel free to reach out on our [Discord](https://discord.gg/4smxjcheE5) server to ask questions!\n\nWe also use [TODO Issue][tdi] to automatically create issues from all of our `TODO` comments in code. You can check out the [todo issue list][tdil] to see if there's any thing you'd like to take a hack at.\n\n[tdi]: https://github.com/DerJuulsn/todo-issue\n[tdil]: https://github.com/fishfolk/bones/issues?q=is%3Aissue+is%3Aopen+label%3Acode%3Atodo\n\n## Similar Projects\n\nOur architecure has many things in common with these other awesome projects:\n\n- [Gamercade](https://github.com/gamercade-io/) / wasm4\n- [Ambient](https://github.com/AmbientRun/Ambient)\n- [flecs-polyglot](https://github.com/flecs-hub/flecs-polyglot)\n- [Tangle](https://github.com/kettle11/tangle)\n- [Godot sandbox #5010](https://github.com/godotengine/godot-proposals/issues/5010)\n","funding_links":[],"categories":["Games and 3D","[Applications powered by ECS](#contents)"],"sub_categories":["[Game Engines](#contents)"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffishfolk%2Fbones","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffishfolk%2Fbones","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffishfolk%2Fbones/lists"}