{"id":23175168,"url":"https://github.com/siyul-park/uniflow","last_synced_at":"2025-08-18T10:31:12.873Z","repository":{"id":208212612,"uuid":"721078922","full_name":"siyul-park/uniflow","owner":"siyul-park","description":"Low-Code Engine for Backend Workflows","archived":false,"fork":false,"pushed_at":"2024-05-22T11:50:20.000Z","size":1026,"stargazers_count":4,"open_issues_count":3,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-05-22T22:27:01.639Z","etag":null,"topics":["flow-based-programming","low-code"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/siyul-park.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"publiccode":null,"codemeta":null}},"created_at":"2023-11-20T10:10:20.000Z","updated_at":"2024-05-27T12:41:21.685Z","dependencies_parsed_at":"2023-11-21T11:47:42.405Z","dependency_job_id":"b9009d38-36b0-40ad-887b-350d1f75ae1e","html_url":"https://github.com/siyul-park/uniflow","commit_stats":null,"previous_names":["siyul-park/uniflow"],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siyul-park%2Funiflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siyul-park%2Funiflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siyul-park%2Funiflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/siyul-park%2Funiflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/siyul-park","download_url":"https://codeload.github.com/siyul-park/uniflow/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230224688,"owners_count":18192954,"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":["flow-based-programming","low-code"],"created_at":"2024-12-18T05:35:56.598Z","updated_at":"2025-08-18T10:31:12.854Z","avatar_url":"https://github.com/siyul-park.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🪐 Uniflow\n\n[![go report][go_report_img]][go_report_url]\n[![go doc][go_doc_img]][go_doc_url]\n[![release][repo_releases_img]][repo_releases_url]\n[![code coverage][go_code_coverage_img]][go_code_coverage_url]\n\n**A high-performance, extremely flexible, and easily extensible universal workflow engine.**\n\n## 📝 Overview\n\nEfficiently manage complex data flows and adjust them in real-time. With the ability to add [plugins](plugins/README.md), workflows can be easily expanded to optimize processes according to business needs. Build a strong foundation for continuous system evolution and deliver personalized services.\n\n## 🎯 Key Features\n\n- **Performance:** Offers maximum throughput and minimal latency across various environments.\n- **Flexibility:** Adjust and modify workflows in real-time.\n- **Scalability:** Easily expand functionality by adding new components.\n\n## 🚀 Quick Start\n\n### 🛠️ Build and Installation\n\nTo build the source code, ensure you have **[Go 1.24 or above](https://go.dev/doc/install)** installed and run the\nfollowing commands:\n\n```sh\ngit clone https://github.com/siyul-park/uniflow\n\ncd uniflow\n\nmake init\nmake build-all\n```\n\nAfter building, the executable will be created in the `dist` directory.\n\n### ⚙️ Configuration\n\nYou can manage configuration using environment variables or a `.uniflow.toml` file. Here's an example of registering and\nconfiguring the built-in plugins:\n\n```toml\n[runtime]\nnamespace = \"default\"\nlanguage = \"cel\"\n\n[database]\nurl = \"memory://\"\n\n[collection]\nspecs = \"specs\"\nvalues = \"values\"\n\n[[plugins]]\npath = \"./dist/cel.so\"\nconfig.extensions = [\"encoders\", \"math\", \"lists\", \"sets\", \"strings\"]\n\n[[plugins]]\npath = \"./dist/ecmascript.so\"\n\n[[plugins]]\npath = \"./dist/mongodb.so\"\n\n[[plugins]]\npath = \"./dist/reflect.so\"\n\n[[plugins]]\npath = \"./dist/ctrl.so\"\n\n[[plugins]]\npath = \"./dist/net.so\"\n\n[[plugins]]\npath = \"./dist/sql.so\"\n\n[[plugins]]\npath = \"./dist/testing.so\"\n```\n\n### ⚡ Example Run\n\nTo run the [ping.yaml](examples/ping.yaml) example, which processes HTTP requests, use the following configuration:\n\n```yaml\n- kind: listener\n  name: listener\n  protocol: http\n  port: '{{ .PORT }}'\n  env:\n    PORT:\n      data: '{{ .PORT }}'\n  ports:\n    out:\n      - name: router\n        port: in\n\n- kind: router\n  name: router\n  routes:\n    - method: GET\n      path: /ping\n      port: out[0]\n  ports:\n    out[0]:\n      - name: pong\n        port: in\n\n- kind: snippet\n  name: pong\n  language: text\n  code: pong\n```\n\nStart the workflow with this command:\n\n```sh\n./dist/uniflow start --from-specs ./examples/ping.yaml --environment PORT=8000\n```\n\nTo verify it's working, use the following command to call the HTTP endpoint:\n\n```sh\ncurl localhost:8000/ping\npong#\n```\n\n## 📊 Benchmark\n\nThe following benchmark was run on a **[Contabo](https://contabo.com/)** VPS S SSD (4-core, 8GB) environment.  \nThe test was conducted using\nthe [Apache HTTP server benchmarking tool](https://httpd.apache.org/docs/2.4/programs/ab.html) on a workflow consisting\nof `listener`, `router`, and `snippet` nodes, using the [ping.yaml](examples/ping.yaml) example.\n\n```sh\nab -n 102400 -c 1024 http://127.0.0.1:8000/ping\n```\n\n```\nThis is ApacheBench, Version 2.3 \u003c$Revision: 1879490 $\u003e\nBenchmarking 127.0.0.1 (be patient)\nServer Hostname:        127.0.0.1\nServer Port:            8000\nDocument Path:          /ping\nDocument Length:        4 bytes\nConcurrency Level:      1024\nTime taken for tests:   122.866 seconds\nComplete requests:      1024000\nFailed requests:        0\nTotal transferred:      122880000 bytes\nHTML transferred:       4096000 bytes\nRequests per second:    8334.29 [#/sec] (mean)\nTime per request:       122.866 [ms] (mean)\nTime per request:       0.120 [ms] (mean, across all concurrent requests)\nTransfer rate:          976.67 [Kbytes/sec] received\n\nConnection Times (ms)\n              min  mean[+/-sd] median   max\nConnect:        0    2   3.8      0      56\nProcessing:     0  121  53.4    121     593\nWaiting:        0  120  53.4    121     592\nTotal:          0  123  53.3    123     594\n\nPercentage of the requests served within a certain time (ms)\n  50%    123\n  66%    143\n  75%    155\n  80%    163\n  90%    185\n  95%    207\n  98%    240\n  99%    266\n 100%    594 (longest request)\n```\n\n## 📚 Learn More\n\n- [Getting Started](./docs/getting_started.md): Learn about CLI installation and workflow management.\n- [Core Concepts](./docs/key_concepts.md): Understand key concepts such as nodes, connections, ports, and packets.\n- [Architecture](./docs/architecture.md): Explore the specification loading and workflow execution process.\n- [Flowchart](./docs/flowchart.md): A step-by-step guide to compilation and runtime processes.\n- [Debugging](./docs/debugging.md): Find troubleshooting and debugging tips.\n- [User Extensions](./docs/user_extensions.md): Learn how to add new nodes and integrate services.\n\n## 🌐 Community \u0026 Support\n\n- [Discussion Forum](https://github.com/siyul-park/uniflow/discussions): Ask questions and share feedback.\n- [Issue Tracker](https://github.com/siyul-park/uniflow/issues): Report bugs and request features.\n\n## 📜 License\n\nThis project is distributed under the [MIT License](./LICENSE). You are free to use, modify, and distribute it.\n\n\u003c!-- Go --\u003e\n\n[go_download_url]: https://golang.org/dl/\n[go_version_img]: https://img.shields.io/badge/Go-1.21+-00ADD8?style=for-the-badge\u0026logo=go\n\n[go_code_coverage_img]: https://codecov.io/gh/siyul-park/uniflow/graph/badge.svg?token=HOFm99R9SO\n[go_code_coverage_url]: https://codecov.io/gh/siyul-park/uniflow\n[go_report_img]: https://goreportcard.com/badge/github.com/siyul-park/uniflow\n[go_report_url]: https://goreportcard.com/report/github.com/siyul-park/uniflow\n[go_doc_img]: https://godoc.org/github.com/siyul-park/uniflow?status.svg\n[go_doc_url]: https://godoc.org/github.com/siyul-park/uniflow\n\n\u003c!-- Repository --\u003e\n\n[repo_url]: https://github.com/siyul-park/uniflow\n[repo_issues_url]: https://github.com/siyul-park/uniflow/issues\n[repo_pull_request_url]: https://github.com/siyul-park/uniflow/pulls\n[repo_discussions_url]: https://github.com/siyul-park/uniflow/discussions\n[repo_releases_img]: https://img.shields.io/github/release/siyul-park/uniflow.svg\n[repo_releases_url]: https://github.com/siyul-park/uniflow/releases\n[repo_wiki_url]: https://github.com/siyul-park/uniflow/wiki\n[repo_wiki_img]: https://img.shields.io/badge/docs-wiki_page-blue?style=for-the-badge\u0026logo=none\n[repo_wiki_faq_url]: https://github.com/siyul-park/uniflow/wiki/FAQ\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiyul-park%2Funiflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsiyul-park%2Funiflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsiyul-park%2Funiflow/lists"}