{"id":38706916,"url":"https://github.com/oldrev/edgelinkd","last_synced_at":"2026-01-17T10:57:08.429Z","repository":{"id":305201247,"uuid":"1016794856","full_name":"oldrev/edgelinkd","owner":"oldrev","description":"Node-RED Reimplemented in Rust","archived":false,"fork":false,"pushed_at":"2025-11-01T03:43:29.000Z","size":3149,"stargazers_count":88,"open_issues_count":10,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-11-01T05:25:52.214Z","etag":null,"topics":["event-driven","flow","flow-based-programming","flowing","iot","low-code","node-red","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":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":"2025-07-09T14:33:02.000Z","updated_at":"2025-11-01T03:43:32.000Z","dependencies_parsed_at":"2025-07-18T22:03:06.703Z","dependency_job_id":"b9d8b0d2-f932-4493-907e-419270420396","html_url":"https://github.com/oldrev/edgelinkd","commit_stats":null,"previous_names":["oldrev/edgelinkd"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/oldrev/edgelinkd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelinkd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelinkd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelinkd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelinkd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oldrev","download_url":"https://codeload.github.com/oldrev/edgelinkd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oldrev%2Fedgelinkd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28506593,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T10:25:30.148Z","status":"ssl_error","status_checked_at":"2026-01-17T10:25:29.718Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["event-driven","flow","flow-based-programming","flowing","iot","low-code","node-red","nodered","rust"],"created_at":"2026-01-17T10:57:08.341Z","updated_at":"2026-01-17T10:57:08.419Z","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":"# EdgeLinkd: Node-RED Reimplemented in Rust\n\n[![Build Status]][actions]\n[![GitHub Release]][releases]\n[![GitHub Downloads]][releases]\n\n[Build Status]: https://img.shields.io/github/actions/workflow/status/oldrev/edgelinkd/CICD.yml?branch=master\n[actions]: https://github.com/oldrev/edgelinkd/actions?query=branch%3Amaster\n[GitHub Release]: https://img.shields.io/github/v/release/oldrev/edgelinkd?include_prereleases\n[releases]: https://github.com/oldrev/edgelinkd/releases\n[GitHub Downloads]: https://img.shields.io/github/downloads/oldrev/edgelinkd/total\n![Node-RED Rust Backend](assets/banner.jpg)\n\nEnglish | [简中](README.zh-cn.md)\n\n## Overview\n\n**EdgeLinkd** is a high-performance, memory-efficient Node-RED compatible runtime engine built from the ground up in Rust, now featuring an integrated web UI for complete standalone operation.\n\n**Why EdgeLinkd?**\n- **10x less memory usage** than Node-RED (only 10% of Node-RED's memory footprint)\n- **Native performance** with Rust's zero-cost abstractions\n- **Integrated web interface** - full Node-RED UI built-in for flow design and management\n- **Standalone operation** - no external Node-RED installation required\n- **Drop-in replacement** - use your existing `flows.json` files\n- **Perfect for edge devices** with limited resources\n- **Node-RED compatibility** - design, deploy, and run flows all in one application\n\nEdgeLinkd now includes the complete Node-RED web editor, allowing you to design flows directly in the browser while executing them with native Rust performance. You can also run it headless for production deployments on resource-constrained devices.\n\nOnly the `function` node uses the lightweight QuickJS JS interpreter to run JavaScript code; all other functionalities are implemented in native Rust code for maximum performance.\n\n## A Short Demo\n\n\n\u003cvideo src=\"https://github.com/user-attachments/assets/5841db63-513a-4b36-8566-57c74adb7b60\" controls width=\"100%\"\u003e\u003c/video\u003e\n\n### Use Cases\n\n- **Flow Development**: Design and test flows directly in the integrated web editor\n- **Rapid Prototyping**: Full Node-RED UI for quick flow development and iteration\n- **IoT Edge Gateways**: Process sensor data with minimal resource usage\n- **Industrial Automation**: Run control flows on embedded controllers with web-based monitoring\n- **Home Automation**: Deploy smart home logic on Raspberry Pi with remote web access\n- **Development \u0026 Production**: Use web UI for development, headless mode for production deployment\n- **Cloud-to-Edge Migration**: Move Node-RED flows from cloud to edge with unified interface\n- **Container Deployments**: Lightweight containers for edge computing with optional web UI\n- **Remote Management**: Access and modify flows remotely through the web interface\n\n\n## Quick Start\n\n### 0. Clone the Repository\n\n**Clone the repository with submodules:**\n\n```bash\ngit clone --recursive https://github.com/oldrev/edgelinkd.git\n```\n\nOr if you've already cloned without submodules:\n\n```bash\ngit clone https://github.com/oldrev/edgelinkd.git\ncd edgelinkd\ngit submodule update --init --recursive\n```\n\n### 1. Build\n\n**Prerequisites**: Rust 1.80 or later\n\n```bash\ncargo build --release\n```\n\n**Windows users**: Ensure `patch.exe` is in your PATH (included with Git) and install Visual Studio for MSVC.\n\n**Supported platforms**:\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\u003c/details\u003e\n\n\n### 2. Run\n\n**Start EdgeLinkd with integrated web UI (recommended):**\n\n```bash\ncargo run --release --\n# or after build\n./target/release/edgelinkd\n```\n\nBy default, your browser will open the Node-RED frontend at [http://127.0.0.1:1888](http://127.0.0.1:1888).\n\n**Main command-line options:**\n\n- `[FLOWS_PATH]`: Optional, specify the flow file (default: `~/.edgelinkd/flows.json`)\n- `--headless`: Headless mode (no Web UI, suitable for production)\n- `--bind \u003cBIND\u003e`: Custom web server bind address (default: `127.0.0.1:1888`)\n- `-u, --user-dir \u003cUSER_DIR\u003e`: Specify user directory (default: `~/.edgelink`)\n- See more options with `--help`\n\n**Examples:**\n\n```bash\n# Run in headless mode\n./target/release/edgelinkd run --headless\n\n# Specify flow file and port\n./target/release/edgelinkd run ./myflows.json --bind 0.0.0.0:8080\n```\n\n\u003e All data and configuration are stored in the `~/.edgelink` directory by default.\n\nUse `--help` to see all commands and options:\n\n```bash\n./target/release/edgelinkd --help\n./target/release/edgelinkd run --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\nEdgeLinkd can be configured through command-line arguments and configuration files.\n\n### Web UI Configuration\n\n**Command-line options:**\n- `--bind \u003caddress\u003e`: Set the web server binding address (default: `127.0.0.1:1888`)\n- `--headless`: Run without the web UI for production deployments\n- `--user-dir \u003cpath\u003e`: Specify custom user directory for flows and settings\n\n**Configuration file:**\nYou can also configure the web UI through the configuration file (`edgelinkd.toml`):\n\n```toml\n[ui-host]\nhost = \"0.0.0.0\"\nport = 1888\n```\n\n## Project Status\n\n**Alpha Stage**: The project is currently in the *alpha* stage and cannot guarantee stable operation.\n\n**New: Integrated Web UI**: EdgeLinkd now includes a complete Node-RED web interface for flow design and management. The web UI is fully compatible with Node-RED's editor and provides the same user experience while running on the high-performance Rust runtime.\n\n**Web UI Features**:\n- ✅ Complete Node-RED editor interface\n- ✅ Flow design and editing\n- ✅ Node palette with all supported nodes  \n- ✅ Deploy flows directly from the browser\n- ✅ Real-time flow execution monitoring\n- ✅ Debug panel integration\n- ✅ Settings and configuration management\n- ✅ Import/Export flows functionality\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] :heavy_check_mark: Catch\n        - [x] :heavy_check_mark: 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        - [x] :heavy_check_mark: Switch\n        - [x] :heavy_check_mark: Change\n        - [x] :heavy_check_mark: Range\n        - [x] :heavy_check_mark: Template\n        - [x] Delay\n        - [x] Trigger\n        - [x] Exec\n        - [x] :heavy_check_mark: Filter (RBE)\n    - Network nodes:\n        - [x] MQTT In\n        - [x] MQTT Out\n        - [ ] MQTT Broker\n        - [x] HTTP In\n        - [x] HTTP Out\n        - [x] HTTP Request\n        - [x] WebSocket Listener\n        - [x] WebSocket Client\n        - [x] WebSocket In\n        - [x] WebSocket Out\n        - [x] TCP In\n        - [x] TCP Out\n        - [x] TCP Get\n        - [x] UDP In\n        - [x] :heavy_check_mark: UDP Out\n            - [x] Unicast\n            - [x] Multicast\n        - [x] TLS (WIP)\n        - [x] HTTP Proxy (WIP)\n    - Sqeuence nodes:\n        - [x] Split\n        - [x] Join\n        - [x] Sort\n        - [x] Batch\n    - Parse nodes:\n        - [x] CSV\n        - [ ] HTML\n        - [x] :heavy_check_mark: JSON\n        - [x] :heavy_check_mark: XML\n        - [x] YAML\n    - Storage\n        - [x] File\n        - [x] File In\n        - [x] Watch\n\n## Roadmap\n\nCheck out our [milestones](https://github.com/oldrev/edgelinkd/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\nWe welcome contributions! Whether it's:\n\n- **Bug reports** and feature requests\n- **Documentation** improvements\n- **Code contributions** and new node implementations\n- **Testing** on different platforms\n\n\u003e Note: Please make meaningful contributions, or watch and learn. Simply modifying the README or making non-substantive changes will be considered malicious behavior.\n\nPlease read [CONTRIBUTING.md](.github/CONTRIBUTING.md) for details.\n\n### Support the Project\n\nIf EdgeLinkd saves you memory and improves your edge deployments, consider supporting development:\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## Known Issues\n\nPlease refer to [ISSUES.md](docs/ISSUES.md) for a list of known issues and workarounds.\n\n## 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/edgelinkd/issues).\n\n* Contact me: E-mail: oldrev(at)gmail.com\n* Discord: [https://discord.gg/XJstgANe26](https://discord.gg/XJstgANe26)\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%2Fedgelinkd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foldrev%2Fedgelinkd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foldrev%2Fedgelinkd/lists"}