{"id":22120338,"url":"https://github.com/joshbrew/graphscript","last_synced_at":"2025-08-30T02:08:08.279Z","repository":{"id":41428853,"uuid":"509263523","full_name":"joshbrew/graphscript","owner":"joshbrew","description":"Generalized Javascript graph-based hierarchical programming and microservice architecture. Focus on BIGGER problems using self-configuring graph networks for simple or complex remote and local execution pipelining. Servers, workers, rendering, the works.","archived":false,"fork":false,"pushed_at":"2024-03-23T23:04:14.000Z","size":27723,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-25T17:05:09.024Z","etag":null,"topics":["application","application-deployment","application-development","backend","framework","framework-agnostic","frontend","javascript","mobile-development","multiplayer","networking","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joshbrew.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,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-06-30T23:39:57.000Z","updated_at":"2024-12-16T07:27:23.000Z","dependencies_parsed_at":"2024-01-30T02:29:59.109Z","dependency_job_id":"82b82b49-b3d9-42ee-8c5d-cc37a7addb9c","html_url":"https://github.com/joshbrew/graphscript","commit_stats":null,"previous_names":["joshbrew/graphscript","brainsatplay/graphscript"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joshbrew/graphscript","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbrew%2Fgraphscript","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbrew%2Fgraphscript/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbrew%2Fgraphscript/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbrew%2Fgraphscript/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joshbrew","download_url":"https://codeload.github.com/joshbrew/graphscript/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshbrew%2Fgraphscript/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272793018,"owners_count":24993830,"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","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"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":["application","application-deployment","application-development","backend","framework","framework-agnostic","frontend","javascript","mobile-development","multiplayer","networking","typescript"],"created_at":"2024-12-01T14:22:50.245Z","updated_at":"2025-08-30T02:08:08.259Z","avatar_url":"https://github.com/joshbrew.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# graphscript\n[![Npm package version](https://img.shields.io/npm/v/graphscript)](https://npmjs.com/package/graphscript)\n[![Npm package monthly downloads](https://badgen.net/npm/dm/graphscript)](https://npmjs.ccom/package/graphscript)\n[![License: LGPL v3](https://img.shields.io/badge/license-LGPL_v3-blue.svg)](https://www.gnu.org/licenses/LGPL-3.0)\n\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"./gs_logo_min.png\"  width=350px height=350px\u003e\u003cbr\u003e\nFor happy code!\n\u003c/p\u003e\n\n## This API is still under construction\nThere's plenty of working tools available already. However, we are randomly breaking/finding old broken code and improving things constantly as we push out a model we feel can be competitive. 100% FOSS!\n\nAlso, we are going to turn this spec into something that supports a visual editor for games and applications built right into VSCode: [Notes](https://docs.google.com/document/d/18EZ1UgztDTi5w7B8xdgAWzMF2TDoZubMnkuVbW-y4cU/edit?usp=sharing )\n\u003chr/\u003e\n**GraphScript** is a highly customizable, high performance library for creating complex full stack software and library architectures. It's based around graphs hierarchies, event systems, and microservices, with an intuitive composition and node/function indexing tree system for rapid development.\n\u003cbr/\u003e\u003cbr/\u003e\n\nCheck out the code in [examples](./examples) for very clear, compelling implementatons that flex our rapidly evolving feature sets. Get in touch at brewster.joshua1@gmail.com if you'd like to contribute and see this evolve.\n\n## Core Concepts\n**graphscript** is organized by the basic principles of graph theory:\n\n1. **Graph:** These are contained in a shared scope.\n2. **Nodes:** There is a hierarchy of objects.\n3. **Connections:** Within each shared scope, properties can be linked in order to react to each other.\n\nBeyond these basic concepts, nodes can be direct proxies for generic javascript functions, objects or class instances from any libraries, enabling an intuitive frontend/backend hierarchical organization scheme that can plug right in as an event system for existing object-oriented programs. \n\n### Graphs and Graph Nodes\nSee [Graphs and GraphNodes](./docs/Graph.md) for more information.\n\nThe basic connectivity framework. You can design entire apps or modules as nested object (or scope) associations with the graph node properties and event system. We've demonstrated dozens of modules in the examples and throughout the source code. Just dump them in a Graph and you can quickly build event systems with a clear readable hierarchy. This isn't a rigid system as you'll see in the [examples](./examples/). Add more GraphScript properties (which we distinguish with a *__*) using **loaders** to customize node instantiation behaviors e.g. for spawning a multithreaded app from a fairly simple hierarchical definition for the desired i/o scheme.\n\n### Services\nSee [Services](./docs/Service.md) for more information.\n\nThis forms a microservices layer on top of the graph system. It makes it easier to communicate between separate graphs that track their own properties. We've implemented all kinds of protocols (HTTP, WebRTC, WSS, Event Sources, End-to-End encryption, etc) on top of this to demonstrate the convenience of a graph-based event system for software pipelining.\n\n[Included Services](./docs/Service.md#included-services) contains a reference of the services included in the main graphscript packages.\n\n## Packages\n\n### `graphscript`: A GraphScript distribution for browsers (~211kb)\n#### Package Features\n- Graphs, Services\n- Web Workers, including convenient canvas renderer multithreading and MessageChannel pipelining\n- WebRTC\n- WebSockets \n- Event Sources\n- Session system for syncing data across connections (e.g. for game servers)\n- Router for creating user systems and connection routing by user assocation.\n- End 2 End encryption (via `sjcl`)\n\n### `graphscript-node`: A GraphScript build for Node.js (~238Kb)\n#### Package Features\n- Graphs, Services\n- Experimental pure nodejs HTTP/HTTPS server for rapid prototyping. Tie requests to graph node properties or use a simple page templating system. \n- Websocket server and Websockets (via `ws`)\n- Server-Sent Events (via `better-sse`)\n- Child-Processes (still need to add a polyfill for web workers)\n- Session system for syncing data across connections (e.g. for game servers)\n- Router for creating user systems and connection routing by user assocation.\n- End 2 End encryption (via `sjcl`) \n\n\n### `graphscript-core` : (~26kb)\n#### Package Features\n- A minimal GraphScript distribution featuring only Graphs, the EventHandler, and the base loaders. Should work in browser and node.js\n\n### `graphscript-services`: A collection of additional GraphScript services and general bloat.\n#### Package Features\n- User database system made for use with Mongoose/MongoDB. Includes dozens of boilerplate data structures for a simple query system with optional user permissions and access token verification.\n- Entity Component System - a semi out-of-date but functional ECS format.\n- WebGL plotter, can handle millions of points.\n- Node templates (e.g. for use with the remoteGraphRoutes) for receiving data from sensors and stuff. \n\n#### Extras\n - `graphscript-services.gpu`: Experimental `gpu.js` plugin. ~500kb, use it with workers for best results.\n - `graphscript-services.storage`: Some BrowserFS, CSV, and Google Drive utilities. Not very complete.\n\n### Contributing\n\nWant to see this API improve faster? Please contribute or create issues and offer perspective. This repo is mostly a labor of love by Josh, with Garrett swooping in to reality check the actual utility of it from time to time. We want this to API to give you open web super powers, so we can all move on to building much more interesting end products as a community, as well as get more students, engineers, and researchers working in a collaborative development environment. This is the future! Down with knowledge and tool hoarding!\n\n### See also:\n- [`device-decoder`](https://github.com/joshbrew/device-decoder) - Complex Browser USB and Browser or Native Mobile Bluetooth driver set that is by-default multithreaded using our web worker system. You can use the worker system to create fully-threaded pipelines from the device codec without touching the main thread.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshbrew%2Fgraphscript","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoshbrew%2Fgraphscript","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshbrew%2Fgraphscript/lists"}