{"id":15043107,"url":"https://github.com/reactive-graph/reactive-graph","last_synced_at":"2025-06-20T23:36:56.317Z","repository":{"id":44584617,"uuid":"401040451","full_name":"reactive-graph/reactive-graph","owner":"reactive-graph","description":"Reactive Graph and Flow Control","archived":false,"fork":false,"pushed_at":"2025-06-16T19:35:48.000Z","size":101519,"stargazers_count":19,"open_issues_count":52,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-19T00:43:46.038Z","etag":null,"topics":["entity","entity-component-system","flow-control","graph-database","graphql","inexor","reactive-programming","rust"],"latest_commit_sha":null,"homepage":"https://reactive-graph.io/","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/reactive-graph.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"open_collective":"reactive-graph"}},"created_at":"2021-08-29T12:49:50.000Z","updated_at":"2025-06-17T09:58:31.000Z","dependencies_parsed_at":"2024-06-23T14:27:25.436Z","dependency_job_id":"a4c7697e-5380-4100-8d03-e6be5fef1140","html_url":"https://github.com/reactive-graph/reactive-graph","commit_stats":{"total_commits":2145,"total_committers":7,"mean_commits":"306.42857142857144","dds":0.04289044289044286,"last_synced_commit":"8e3c930f772d0ebba130e0813c52fc526dd7a979"},"previous_names":["reactive-graph/reactive-graph","inexorgame/inexor-rgf-application"],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/reactive-graph/reactive-graph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactive-graph%2Freactive-graph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactive-graph%2Freactive-graph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactive-graph%2Freactive-graph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactive-graph%2Freactive-graph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reactive-graph","download_url":"https://codeload.github.com/reactive-graph/reactive-graph/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactive-graph%2Freactive-graph/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261037158,"owners_count":23100933,"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":["entity","entity-component-system","flow-control","graph-database","graphql","inexor","reactive-programming","rust"],"created_at":"2024-09-24T20:48:35.091Z","updated_at":"2025-06-20T23:36:56.278Z","avatar_url":"https://github.com/reactive-graph.png","language":"Rust","funding_links":["https://opencollective.com/reactive-graph"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www,reactive-graph.io/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/reactive-graph/design/main/public/logo/rendered/mexican-pink/reactive-graph-400x400.png\" alt=\"Reactive Graph\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003ch1 align=\"center\" style=\"text-align: center;\"\u003eReactive Graph\u003c/h1\u003e\n\n\u003cdiv align=\"center\" style=\"text-align: center\"\u003e\n\n[\u003cimg src=\"https://img.shields.io/badge/book-master-yellow\"\u003e](https://docs.reactive-graph.io/book/)\n[\u003cimg src=\"https://img.shields.io/badge/api-master-yellow\"\u003e](https://docs.reactive-graph.io/docs/)\n\n[\u003cimg src=\"https://img.shields.io/badge/Language-Rust-brightgreen\"\u003e](https://www.rust-lang.org/)\n[\u003cimg src=\"https://img.shields.io/badge/Platforms-Linux%20%26%20Windows-brightgreen\"\u003e]()\n[\u003cimg src=\"https://img.shields.io/github/license/reactive-graph/reactive-graph\"\u003e](https://github.com/reactive-graph/reactive-graph/blob/main/LICENSE.md)\n\n[![Build](https://github.com/reactive-graph/reactive-graph/actions/workflows/rust.yml/badge.svg)](https://github.com/reactive-graph/reactive-graph/actions/workflows/rust.yml)\n[\u003cimg src=\"https://img.shields.io/discord/698219248954376256?logo=discord\"\u003e](https://discord.com/invite/acUW8k7)\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eWhat is this?\u003c/h2\u003e\n\n\u003cdiv style=\"background-color: #333333; padding: 10px 50px; font-size: 12pt;\"\u003e\n\n➔ The `Reactive Graph` is a **graph database**\n\n➔ The `Reactive Graph` is a **document store**\n\n➔ The `Reactive Graph` is a **flow control** runtime\n\n➔ The `Reactive Graph` is **pluggable** and **extensible**\n\n➔ The `Reactive Graph` is **fast**, **secure** and **small**\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eWhat is it for?\u003c/h2\u003e\n\n\u003cdiv style=\"background-color: #333333; padding: 10px 50px; font-size: 12pt;\"\u003e\n\n➔ Game Entity Component System (ECS) - especially for [Inexor](https://inexor.org/)\n\n➔ Smart Home and Internet of Things\n\n➔ Data Conversion Tools\n\n➔ Flow Control System for card size computers and embedded devices\n\n➔ Desktop Automation\n\n➔ Content Management System\n\n➔ Knowledge Graphs and Knowledge Processing\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eGraph\u003c/h2\u003e\n\n\u003cdiv style=\"background-color: #333333; padding: 10px 50px; font-size: 12pt;\"\u003e\n\nA **graph** organizes highly interconnected data. The state of an `Entity Component System` can be ideally represented\nwith the help of the graph.\n\nThe main benefits of a graph are:\n\n* A universal data structure for everything\n* Relations are first class citizens\n* Benefit from types and instances which makes things intuitive\n* Benefit from navigation which is fast and intuitive\n* Benefit from the semantics of highly connected, intuitive data\n* Properties can store not only certain primitive data but complete documents\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eReactive\u003c/h2\u003e\n\n\u003cdiv style=\"background-color: #333333; padding: 10px 50px; font-size: 12pt;\"\u003e\n\nNow that we understand how data is stored, here's how data interacts. The approach is that the data itself is \"alive\".\nTo do this, **Reactive Graph** adopts a concept from reactive programming.\n\nIn computing, reactive programming is a declarative programming paradigm concerned with data streams and the\npropagation of change.\n\nIt is the ingenious combination of a graph with reactive programming. The property instances are not static\nand only contain data. Rather, they are streams of data. If you change the value of a property instance, you\nfill the data stream of this property instance. Data streams are linked together. For example, if the stream\nof one property instance is linked to the stream of another property instance and you change the value of the\nfirst property instance, the value of the second property instance will automatically change as well. Data is\nthus propagated from one station to the next, triggering a cascade of propagations.\n\nIn addition, **Reactive Graph** remembers the last value in each property instance. This is done by subscribing to your\nown data stream and caching it. This allows subsequent querying of the value of a property instance.\n\nRemember this basic concept:\n\n* Every property is a stream not only data\n* Property streams can be subscribed and published\n* The streams of two properties can be connected and changes will be propagated (cascade)\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eBehaviour driven design\u003c/h2\u003e\n\n\u003cdiv style=\"background-color: #333333; padding: 10px 50px; font-size: 12pt;\"\u003e\n\nThe data flow is therefore automatic. Building on this, **Reactive Graph** applies the concept of behaviour-driven design.\nThe goal is to use these data streams to simulate behaviour.\n\nBehaviors can be implemented on components, entities and relations. To do this, one or more incoming data streams\nare combined, calculations are performed and written to one or more outgoing data streams.\n\nFor example, the entity type \"AND gate\" implements a behavior by subscribing to the two input properties, combining\nthem into a combination data stream and performing an AND operation on the incoming pairs of values. The result of\nthe AND operation is itself a data stream and this is linked to the output property.\n\nThis example shows how an entity type is wired internally. They are all data streams that are cleverly combined\nwith one another and thus depict behavior.\n\nIt is interesting that this behavior also works for relations. For example, connectors are also implemented\nbehaviors of streams. It is interesting that connectors connect the data stream from a property instance of the\noutgoing entity instance with the data stream from a property instance of the incoming entity instance.\n\nFor example the AND-Gate accepts inputs at the properties lhs and rhs. Both streams are subscribed and zipped.\nThe zipped stream is calculated with a function - in this case the AND-Operator. This results in another\n(invisible) stream which is connected with the property result. The entity type AND-Gate defines that the\nproperties lhs, rhs and result have to exist. Furthermore, the socket types are defined: lhs and rhs are\nInput-Sockets and result is a Output-Socket. The behaviour is like the internal wiring of entity instances and\nof relation instances. A behaviour can be added to entity instances and removed from entity/relation instances.\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eFlow\u003c/h2\u003e\n\n\u003cdiv style=\"background-color: #333333; padding: 10px 50px; font-size: 12pt;\"\u003e\n\nControl flows can be implemented based on the graph, the data streams and the behavior-driven design. It is\nimportant here that the available modules that implement the behavior are linked with connectors.\n\nFor example, a flow can consist of a logic that links several AND gates with each other using connectors. Both\nthe AND gate and the connector are behaviors. But the arrangement of these behaviors within a flow makes them\npowerful.\n\nEntire game modes can be implemented with the help of flows. Or just parts of it that are used in multiple game\nmodes, such as a mechanism to pick up, drop, and score flags.\n\nFlows are also useful for making maps more interactive. With the help of flows and behaviors, it can be ensured\nthat a door opens in a map when you press switch 1 and switch 2. Or you determine the color of your own team's\nbase based on the current score. Or you control particle emitters, depending on how many players are near the\nemitter. The possibilities for this are endless and want to be used!\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003ePlugins\u003c/h2\u003e\n\n\u003cdiv align=\"center\" style=\"text-align: center\"\u003e\n\n[The Plugin System](https://docs.reactive-graph.io/book/Plugin_System.html)\n\n[List of Plugins](https://docs.reactive-graph.io/book/Plugins.html)\n\n[Plugins Repository](https://github.com/reactive-graph/plugins-core)\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eDevelopment\u003c/h2\u003e\n\n\u003cdiv align=\"center\" style=\"text-align: center\"\u003e\n\n[Build Instructions](https://docs.reactive-graph.io/book/Development_Build.html)\n\n[Data Model](https://docs.reactive-graph.io/book/Model.html)\n\n[GraphQL API](https://docs.reactive-graph.io/book/GraphQL_API.html)\n\n[Dynamic Graph API](https://docs.reactive-graph.io/book/Dynamic_Graph_API.html)\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eConfiguration\u003c/h2\u003e\n\n\u003cdiv align=\"center\" style=\"text-align: center\"\u003e\n\n[Configuration](https://docs.reactive-graph.io/book/Configuration.html)\n\n\u003c/div\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eGraphQL Type System\u003c/h2\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/reactive-graph/reactive-graph/main/book/src/images/queries.png\" alt=\"GraphQL Type System Queries\"\u003e\n\n\u003cimg src=\"https://raw.githubusercontent.com/reactive-graph/reactive-graph/main/book/src/images/mutations.png\" alt=\"GraphQL Type System Mutations\"\u003e\n\n\n\u003ch2 align=\"center\" style=\"text-align: center;\"\u003eFlow Editor\u003c/h2\u003e\n\n\u003cdiv align=\"center\" style=\"text-align: center\"\u003e\n\nComing soon.\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactive-graph%2Freactive-graph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freactive-graph%2Freactive-graph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactive-graph%2Freactive-graph/lists"}