{"id":13725387,"url":"https://github.com/XXIIVV/riven","last_synced_at":"2025-05-07T20:32:10.079Z","repository":{"id":110285247,"uuid":"122559482","full_name":"XXIIVV/riven","owner":"XXIIVV","description":"Tiny Flow Based Framework","archived":false,"fork":false,"pushed_at":"2022-10-20T02:33:17.000Z","size":425,"stargazers_count":413,"open_issues_count":1,"forks_count":32,"subscribers_count":22,"default_branch":"master","last_synced_at":"2024-08-04T01:27:42.922Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://wiki.xxiivv.com/Riven","language":"JavaScript","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/XXIIVV.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-02-23T01:49:27.000Z","updated_at":"2024-07-25T19:56:33.000Z","dependencies_parsed_at":"2023-03-16T04:00:30.924Z","dependency_job_id":null,"html_url":"https://github.com/XXIIVV/riven","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XXIIVV%2Friven","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XXIIVV%2Friven/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XXIIVV%2Friven/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XXIIVV%2Friven/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/XXIIVV","download_url":"https://codeload.github.com/XXIIVV/riven/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224645355,"owners_count":17346131,"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":[],"created_at":"2024-08-03T01:02:21.344Z","updated_at":"2024-11-14T15:31:15.920Z","avatar_url":"https://github.com/XXIIVV.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# Ø(Riven)\n\n[Riven](http://wiki.xxiivv.com/Riven) is a bare minimum **flow-based programming framework** (eg: [math](https://rawgit.com/XXIIVV/Riven/master/example.math.html) \u0026 [conditional](https://rawgit.com/XXIIVV/Riven/master/example.conditional.html)). Nodes have 2 ways of communicating with each other, one is a `send/receive` pattern, the other, a `request/answer` pattern. Despite its minimal toolset, it can be expanded into a complete [web framework](http://wiki.xxiivv.com/riven.html).\n\n\u003cimg src='https://raw.githubusercontent.com/XXIIVV/Riven/master/PREVIEW.png' width=\"600\"/\u003e\n\n## The Ø Selector\n\nYou are given a node selection tool `Ø()`, you can type the character with `alt+shift+O`(Alt +0216). If you are on Windows, or cannot easily type this character, try wrapping this function into a character of your choosing, like `function R(a){ return Ø(a); }`.\n\n### Create a node\n\n`Ø(\"template\").create({x:2,y:2})` will create a **template** node at 2,2. \n\n### Select a node\n\n`Ø(\"template\")` will select the **template** node.\n\n### Connect a node\n\n`Ø(\"template\").connect(\"parser\")` will connect the **template** node to the **parser** node. \n\nYou can also connect to **multiple nodes** at once with `Ø(\"template\").connect([\"parser\",\"console\"])`. The `Ø(\"template\").bind(\"parser\")` will create both a **connection and a syphon** between the 2 nodes.\n\n## Communication\n\n### .Send()\n\n`Ø(\"template\").send(\"hello\")` will send *\"hello\"* to all receiving connected nodes.\n\n### .Receive()\n\n`Ø(\"template\").receive(q) =\u003e {}`, method is triggered by send().\n\n### .Request()\n\n`Ø(\"template\").request(\"cake\")` will request *\"cake\"* from all answering connected nodes.\n\n### .Answer()\n\n`Ø(\"template\").answer(\"cake\")`, method is triggered by request().\n\n## Extras\n\n### .Bang()\n\n`Ø(\"template\").bang()`, is a convenience method equivalent to `.send(true)`, will send *true* to all receiving connected nodes.\n\n### .Signal()\n\nLooks for a connected node(receiving/answering) with the parameter id, `Ø(\"template\").signal(\"parser\").send(\"hello\")`. Will send *\"hello\"*, directly to the *parser* node.\n\n### Mesh\n\nYou can group nodes into scopes with `.mesh(pos,[nodes])` to visually groups the nodes into a single element that can be moved as one.\n\n```\nØ(\"template\").mesh({x:2,y:2},[\n  Ø(\"parser\").create({x:1,y:2}),\n  Ø(\"header\").create({x:2,y:3})\n])\n```\n\n# That's it!\n\nThis framework does nothing else, but it does this well.\n\nEnjoy.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FXXIIVV%2Friven","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FXXIIVV%2Friven","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FXXIIVV%2Friven/lists"}