{"id":21317203,"url":"https://github.com/oldrev/edgelink","last_synced_at":"2025-06-13T17:08:07.038Z","repository":{"id":255464465,"uuid":"703951605","full_name":"oldrev/edgelink","owner":"oldrev","description":"A based flow programming runtime engine, compatible with Node-RED, in Rust.","archived":false,"fork":false,"pushed_at":"2025-04-25T07:11:08.000Z","size":1716,"stargazers_count":46,"open_issues_count":3,"forks_count":10,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-25T08:24:32.542Z","etag":null,"topics":["embedded","event-driven","fbp","flow","iot","iot-platform","low-code","nodered","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oldrev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/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},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"oldrev","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":["paypal.me/oldrev"]}},"created_at":"2023-10-12T08:37:53.000Z","updated_at":"2025-04-25T07:10:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"dbfccd88-45a5-4099-8295-d0319f2464fe","html_url":"https://github.com/oldrev/edgelink","commit_stats":null,"previous_names":["oldrev/edgelink"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oldrev/edgelink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oldrev","download_url":"https://codeload.github.com/oldrev/edgelink/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelink/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259686130,"owners_count":22896054,"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":["embedded","event-driven","fbp","flow","iot","iot-platform","low-code","nodered","rust"],"created_at":"2024-11-21T18:42:24.127Z","updated_at":"2025-06-13T17:08:07.007Z","avatar_url":"https://github.com/oldrev.png","language":"Rust","funding_links":["https://ko-fi.com/oldrev","paypal.me/oldrev","https://ko-fi.com/O5O2U4W4E'","https://www.paypal.me/oldrev"],"categories":[],"sub_categories":[],"readme":"# EdgeLink: A Node-RED Compatible Run-time Engine in Rust\n[![Build Status]][actions]\n[![Releases](https://img.shields.io/github/release/oldrev/edgelink.svg)](https://github.com/oldrev/edgelink/releases)\n\n[Build Status]: https://img.shields.io/github/actions/workflow/status/oldrev/edgelink/CICD.yml?branch=master\n[actions]: https://github.com/oldrev/edgelink/actions?query=branch%3Amaster\n\n![Node-RED Rust Backend](assets/banner.jpg)\n\nEnglish | [简体中文](README.zh-cn.md)\n\n## Overview\n\nEdgeLink is a [Node-RED](https://nodered.org/) compatible run-time engine implemented in Rust\u003csub\u003e†\u003c/sub\u003e.\n\nThis program is designed to execute `flows.json` file that have been designed and exported/deployed using Node-RED, without any editor or other HTML/Web-related functionalities. The purpose of its development is to deploy tested Node-RED flows to devices with limited memory for execution.\n\nOnly the \"function\" node will use the lightweight QuickJS JS interpreter to run their code; all other functionalities are implemented in native Rust code.\n\n## Features\n\n![Memory Usage](assets/memory.png)\n\n- **High Performance**: Leverage the advantages of the Rust language for excellent performance.\n- **Low Memory Footprint**: Reduce memory usage compared to the NodeJS backend. Tests indicate that, for running a same simple workflow, the physical memory usage of EdgeLink is only 10% of that of Node-RED.\n- **Scalability**: Retain the extensibility of Node-RED, supporting custom nodes.\n- **Easy Migration**: Easily replace the existing Node-RED backend with minimal modifications.\n\n## Quick Start\n\n### 0. Install Node-RED\n\nFor the purpose of testing this project, we first need to install Node-RED as our flow designer and generate the `flows.json` file. Please refer to the Node-RED documentation for its installation and usage.\n\nAfter completing the flow design in Node-RED, please ensure that you click the big red \"Deploy\" button to generate the `flows.json` file. By default, this file is located in `~/.node-red/flows.json`. Be mindful not to use Node-RED features that are not yet implemented in this project.\n\n### 1. Build\n\nUsing Rust 1.80 or later, run:\n\n```bash\ncargo build -r\n```\n\n\u003e [!IMPORTANT]\n\u003e **Note for Windows Users:**\n\u003e Windows users should ensure that the `patch.exe` program is available in the `%PATH%` environment variable to successfully compile the project using `rquickjs`. This utility is required to apply patches to the QuickJS library for Windows compatibility. If Git is already installed, it will include `patch.exe`.\n\u003e\n\u003e To compile `rquickjs`, which is required by the project, you will need to install Microsoft Visual C++ (MSVC) and the corresponding Windows Software Development Kit (SDK).\n\nThe toolchains tested are as follows(see GitHub Actions for details):\n\n* `x86_64-pc-windows-msvc`\n* `x86_64-pc-windows-gnu`\n* `x86_64-unknown-linux-gnu`\n* `aarch64-unknown-linux-gnu`\n* `armv7-unknown-linux-gnueabihf`\n* `armv7-unknown-linux-gnueabi`\n\n### 2. Run\n\n```bash\ncargo run -r\n```\n\nOr:\n\n```bash\n./target/release/edgelinkd\n```\n\nBy default, EdgeLink will read `~/.node-red/flows.json` and execute it.\n\nYou can use the `--help` command-line argument to view all the supported options for this program:\n\n```bash\n./target/release/edgelinkd --help\n```\n\n#### Run Unit Tests\n\n```bash\ncargo test --all\n```\n\n#### Run Integration Tests\n\nRunning integration tests requires first installing Python 3.9+ and the corresponding Pytest dependencies:\n\n```bash\npip install -r ./tests/requirements.txt\n```\n\nThen execute the following command:\n\n```bash\nset PYO3_PYTHON=YOUR_PYTHON_EXECUTABLE_PATH # Windows only\ncargo build --all\npy.test\n```\n\n## Configuration\n\nAdjust various settings and configuration, please execute `edgelinkd` with flags.\nThe flags available can be found when executing `edgelinkd --help`. \n\n## Project Status\n\n**Pre-Alpha Stage**: The project is currently in the *pre-alpha* stage and cannot guarantee stable operation.\n\nThe heavy check mark ( :heavy_check_mark: ) below indicates that this feature has passed the integration test ported from Node-RED.\n\n### Node-RED Features Roadmap:\n\n- [x] :heavy_check_mark: Flow\n- [x] :heavy_check_mark: Sub-flow\n- [x] Group\n- [x] :heavy_check_mark: Environment Variables\n- [ ] Context\n    - [x] Memory storage\n    - [ ] Local file-system storage\n- [ ] RED.util (WIP)\n    - [x] `RED.util.cloneMessage()`\n    - [x] `RED.util.generateId()`\n- [x] Plug-in subsystem[^1]\n- [ ] JSONata\n\n[^1]: Rust's Tokio async functions cannot call into dynamic libraries, so currently, we can only use statically linked plugins. I will evaluate the possibility of adding plugins based on WebAssembly (WASM) or JavaScript (JS) in the future.\n\n### The Current Status of Nodes:\n\nRefer [REDNODES-SPECS-DIFF.md](tests/REDNODES-SPECS-DIFF.md) to view the details of the currently implemented nodes that comply with the Node-RED specification tests.\n\n- Core nodes:\n    - Common nodes:\n        - [x] :heavy_check_mark: Console-JSON (For integration tests)\n        - [x] :heavy_check_mark: Inject\n        - [x] Debug (WIP)\n        - [x] :heavy_check_mark: Complete\n        - [x] Catch\n        - [x] Status\n        - [x] :heavy_check_mark: Link In\n        - [x] :heavy_check_mark: Link Call\n        - [x] :heavy_check_mark: Link Out\n        - [x] :heavy_check_mark: Comment (Ignored automatically)\n        - [x] GlobalConfig (WIP)\n        - [x] :heavy_check_mark: Unknown\n        - [x] :heavy_check_mark: Junction\n    - Function nodes:\n        - [x] Function (WIP)\n            - [x] Basic functions\n            - [x] `node` object (WIP)\n            - [x] `context` object\n            - [x] `flow` object\n            - [x] `global` object\n            - [x] `RED.util` object\n            - [x] `env` object\n        - [ ] Switch\n        - [x] :heavy_check_mark: Change\n        - [x] :heavy_check_mark: Range\n        - [ ] Template\n        - [ ] Delay\n        - [ ] Trigger\n        - [ ] Exec\n        - [x] :heavy_check_mark: Filter (RBE)\n    - Network nodes:\n        - [ ] MQTT In\n        - [ ] MQTT Out\n        - [ ] HTTP In\n        - [ ] HTTP Response\n        - [ ] HTTP Request\n        - [ ] WebSocket In\n        - [ ] WebSocket Out\n        - [ ] TCP In\n        - [ ] TCP Out\n        - [ ] TCP Request\n        - [ ] UDP In\n        - [x] UDP Out\n            - [x] Unicast\n            - [ ] Multicast (WIP)\n        - [ ] TLS\n        - [ ] HTTP Proxy\n    - Sqeuence nodes:\n        - [ ] Split\n        - [ ] Join\n        - [ ] Sort\n        - [ ] Batch\n    - Parse nodes:\n        - [ ] CSV\n        - [ ] HTML\n        - [ ] JSON\n        - [ ] XML\n        - [ ] YAML\n    - Storage\n        - [ ] Write File\n        - [ ] Read File\n        - [ ] Watch\n\n## Roadmap\n\nCheck out our [milestones](https://github.com/oldrev/edgelink/milestones) to get a glimpse of the upcoming features and milestones.\n\n## Contribution\n\n![Alt](https://repobeats.axiom.co/api/embed/cd18a784e88be20d79778703bda8858523c4257e.svg \"Repobeats analytics image\")\n\nContributions are always welcome! Please read [CONTRIBUTING.md](.github/CONTRIBUTING.md) for more details.\n\nIf you want to support the development of this project, you could consider buying me a beer.\n\n\u003ca href='https://ko-fi.com/O5O2U4W4E' target='_blank'\u003e\u003cimg height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi3.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /\u003e\u003c/a\u003e\n\n[![Support via PayPal.me](assets/paypal_button.svg)](https://www.paypal.me/oldrev)\n\n## Issues, Feedback and Support\n\nWe welcome your feedback! If you encounter any issues or have suggestions, please open an [issue](https://github.com/edge-link/edgelink/issues).\n\nE-mail: oldrev(at)gmail.com\n\n## License\n\nThis project is licensed under the Apache 2.0 License - see the [LICENSE](LICENSE) file for more details.\n\nCopyright © Li Wei and other contributors. All rights reserved.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foldrev%2Fedgelink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foldrev%2Fedgelink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foldrev%2Fedgelink/lists"}