{"id":13550201,"url":"https://github.com/leudz/shipyard","last_synced_at":"2025-12-12T11:42:29.379Z","repository":{"id":38631611,"uuid":"193380340","full_name":"leudz/shipyard","owner":"leudz","description":"Entity Component System focused on usability and flexibility.","archived":false,"fork":false,"pushed_at":"2024-09-06T17:57:44.000Z","size":14325,"stargazers_count":744,"open_issues_count":9,"forks_count":44,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-10-07T01:17:38.903Z","etag":null,"topics":["architectural-patterns","data-oriented","ecs","entity-component","entity-component-system","game-development","gamedev","parallel-ecs","rust","shipyard"],"latest_commit_sha":null,"homepage":"","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/leudz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"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}},"created_at":"2019-06-23T18:08:24.000Z","updated_at":"2024-10-05T09:33:32.000Z","dependencies_parsed_at":"2023-10-16T18:24:18.413Z","dependency_job_id":"e3d41749-e434-4055-8888-236fa59df925","html_url":"https://github.com/leudz/shipyard","commit_stats":{"total_commits":964,"total_committers":20,"mean_commits":48.2,"dds":0.09024896265560167,"last_synced_commit":"10f37ea9b0d83d3a3f38b80b5e1a90f7146fa94a"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leudz%2Fshipyard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leudz%2Fshipyard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leudz%2Fshipyard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leudz%2Fshipyard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leudz","download_url":"https://codeload.github.com/leudz/shipyard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222893053,"owners_count":17054035,"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":["architectural-patterns","data-oriented","ecs","entity-component","entity-component-system","game-development","gamedev","parallel-ecs","rust","shipyard"],"created_at":"2024-08-01T12:01:30.119Z","updated_at":"2025-12-12T11:42:29.373Z","avatar_url":"https://github.com/leudz.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n\n\u003ch1\u003eShipyard ⚓\u003c/h1\u003e \u003c!-- omit in toc --\u003e\n\nShipyard is an Entity Component System focused on usability and speed.\n\nIf you have any question or want to follow the development more closely \u003csub\u003e[![Chat](https://img.shields.io/badge/join-Zulip-brightgreen.svg)](https://shipyard.zulipchat.com)\u003c/sub\u003e.\n\n[![Crates.io](https://img.shields.io/crates/v/shipyard)](https://crates.io/crates/shipyard)\n[![Documentation](https://docs.rs/shipyard/badge.svg)](https://docs.rs/shipyard)\n[![LICENSE](https://img.shields.io/crates/l/shipyard)](LICENSE-APACHE)\n\n### [Guide Master](https://leudz.github.io/shipyard/guide/master) | [Guide 0.10](https://leudz.github.io/shipyard/guide/0.10) | [Demo](https://leudz.github.io/shipyard/bunny_demo) | [Visualizer](https://leudz.github.io/shipyard/visualizer)\n\n\u003c/div\u003e\n\n## Basic Example \u003c!-- omit in toc --\u003e\n\n```rust\nuse shipyard::{Component, IntoIter, View, ViewMut, World};\n\n#[derive(Component)]\nstruct Health(u32);\n#[derive(Component)]\nstruct Position {\n    x: f32,\n    y: f32,\n}\n\nfn in_acid(positions: View\u003cPosition\u003e, mut healths: ViewMut\u003cHealth\u003e) {\n    for (_, health) in (\u0026positions, \u0026mut healths)\n        .iter()\n        .filter(|(pos, _)| is_in_acid(pos))\n    {\n        health.0 -= 1;\n    }\n}\n\nfn is_in_acid(_: \u0026Position) -\u003e bool {\n    // it's wet season\n    true\n}\n\nfn main() {\n    let mut world = World::new();\n\n    world.add_entity((Position { x: 0.0, y: 0.0 }, Health(1000)));\n\n    world.run(in_acid);\n}\n```\n\n## Small Game Example \u003c!-- omit in toc --\u003e\n\nInspired by Erik Hazzard's [Rectangle Eater](http://erikhazzard.github.io/RectangleEater/).\n\n[![Play](https://img.shields.io/badge/Play-Online-green)](https://leudz.github.io/shipyard/square_eater)\n[![Source](https://img.shields.io/badge/View-Source-blue)](square_eater/src/main.rs)\n\n## Table of Contents \u003c!-- omit in toc --\u003e\n\n- [Origin of the name](#origin-of-the-name)\n- [Motivation](#motivation)\n- [Cargo Features](#cargo-features)\n- [License](#license)\n- [Contributing](#contributing)\n\n## Origin of the name\n\nAssembly lines take input, process it at each step, and output a result. You can have multiple lines working in parallel as long as they don't bother each other.\n\nShipyards such as the [Venetian Arsenal](https://en.wikipedia.org/wiki/Venetian_Arsenal) are some of the oldest examples of successful, large-scale, industrial assembly lines. So successful that it could output a fully-finished ship _every day_.\n\n_Shipyard_ is a project you can use to build your own highly-parallel software processes.\n\n## Motivation\n\nI initially wanted to make an ECS to learn how it works. After a failed attempt and some research, I started working on Shipyard.\n\n[Specs](https://github.com/amethyst/specs) was already well established as the go-to Rust ECS but I thought I could do better and went with [EnTT](https://github.com/skypjack/entt)'s core data-structure (`SparseSet`) and grouping model. A very flexible combo.\n\n## Cargo Features\n\n- **parallel** _(default)_ \u0026mdash; enables workload threading and add parallel iterators\n- **extended_tuple** \u0026mdash; extends implementations from the default 10 to 32 tuple size at the cost of 4X build time\n- **proc** _(default)_ \u0026mdash; re-exports macros from `shipyard_proc`, mainly to derive `Component`\n- **serde1** \u0026mdash; adds (de)serialization support with [serde](https://github.com/serde-rs/serde)\n- **std** _(default)_ \u0026mdash; lets Shipyard use the standard library\n- **thread_local** \u0026mdash; adds methods and types required to work with `!Send` and `!Sync` components\n- **tracing** \u0026mdash; reports workload and system execution\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0\n  ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n- MIT license\n  ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contributing\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","funding_links":[],"categories":["ECS Libraries","Rust","[ECS Libraries](#contents)"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleudz%2Fshipyard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleudz%2Fshipyard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleudz%2Fshipyard/lists"}