{"id":13367278,"url":"https://github.com/TIBCOSoftware/flogo","last_synced_at":"2025-03-12T18:32:15.878Z","repository":{"id":40775974,"uuid":"62978868","full_name":"TIBCOSoftware/flogo","owner":"TIBCOSoftware","description":"Project Flogo is an open source ecosystem of opinionated  event-driven capabilities to simplify building efficient \u0026 modern serverless functions, microservices \u0026 edge apps.","archived":false,"fork":false,"pushed_at":"2024-04-24T18:42:04.000Z","size":34005,"stargazers_count":2420,"open_issues_count":127,"forks_count":288,"subscribers_count":150,"default_branch":"master","last_synced_at":"2024-10-17T13:22:03.256Z","etag":null,"topics":["aws-lambda","edge","faas","faas-framework","flogo","functions-as-a-service","go","golang","integration","iot","kafka-client","kafka-producer","lambda","microservices","mqtt-client","mqtt-producer","rules","serverless","streaming","tensorflow"],"latest_commit_sha":null,"homepage":"http://flogo.io","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TIBCOSoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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,"publiccode":null,"codemeta":null}},"created_at":"2016-07-10T02:57:43.000Z","updated_at":"2024-10-16T16:53:40.000Z","dependencies_parsed_at":"2022-07-12T19:40:53.133Z","dependency_job_id":"ac0298bc-b3da-4a02-9bf6-8ad23f9859c9","html_url":"https://github.com/TIBCOSoftware/flogo","commit_stats":{"total_commits":345,"total_committers":52,"mean_commits":6.634615384615385,"dds":0.7507246376811594,"last_synced_commit":"33d8cba81a6dd6f360242894f2262158d14dc118"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIBCOSoftware%2Fflogo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIBCOSoftware%2Fflogo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIBCOSoftware%2Fflogo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIBCOSoftware%2Fflogo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TIBCOSoftware","download_url":"https://codeload.github.com/TIBCOSoftware/flogo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221309950,"owners_count":16795835,"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":["aws-lambda","edge","faas","faas-framework","flogo","functions-as-a-service","go","golang","integration","iot","kafka-client","kafka-producer","lambda","microservices","mqtt-client","mqtt-producer","rules","serverless","streaming","tensorflow"],"created_at":"2024-07-30T00:01:43.430Z","updated_at":"2024-10-24T11:31:07.008Z","avatar_url":"https://github.com/TIBCOSoftware.png","language":"CSS","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src =\"images/projectflogo.png\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\" \u003e\n  \u003cb\u003eProject Flogo is an Open Source ecosystem for event-driven apps\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://travis-ci.org/TIBCOSoftware/flogo.svg\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/dependencies-up%20to%20date-green.svg\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-BSD%20style-blue.svg\"/\u003e\n  \u003ca href=\"https://gitter.im/project-flogo/Lobby?utm_source=share-link\u0026utm_medium=link\u0026utm_campaign=share-link\"\u003e\u003cimg src=\"https://badges.gitter.im/Join%20Chat.svg\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#project-flogo-ecosystem\"\u003eEcosystem\u003c/a\u003e | \u003ca href=\"#flogo-repos\"\u003eRepos\u003c/a\u003e | \u003ca href=\"#flogo-core\"\u003eCore\u003c/a\u003e | \u003ca href=\"#flogo-flows\"\u003eFlows\u003c/a\u003e | \u003ca href=\"#flogo-streams\"\u003eStreams\u003c/a\u003e | \u003ca href=\"#flogo-rules\"\u003eFlogo Rules\u003c/a\u003e | \u003ca href=\"#golang-api\"\u003eGo Developers\u003c/a\u003e | \u003ca href=\"#when-to-use-flogo\"\u003eWhen to use Flogo\u003c/a\u003e | \u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e | \u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\nProject Flogo is an ultra-light, Go-based open source ecosystem for building event-driven apps. Event-driven, you say? Yup, the notion of *triggers* and *actions* are leveraged to process incoming events. An action, a common interface, exposes key capabilities such as application integration, stream processing, etc.\n\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src =\"images/eventhandlers.png\" /\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\n- **App = Trigger(s) + Actions[\u0026Activities]**\n- **Triggers**\n  - receive data from external sources.\n  - are managed by a configurable threading model\n  - have a common interface enabling anyone to build a Flogo trigger.\n- **Handlers**\n  - dispatch events to actions\n- **Actions**\n  - process events in a manner suitable with the implementation\n  - have a common interface enabling opinionated event processing capabilities\n\n# Project Flogo Ecosystem\n\nAll capabilities within the Flogo Ecosystem have a few things in common, they all process events (in a manner suitable for the specific purpose) and they all implement the *action* interface exposed by Flogo Core.\n\nSome of the key highlights include:\n\n🎈 **Ultra-light** 20x-50x lighter than Java or Node.js \u003cbr/\u003e\n⚡️ **Event-driven** Powerful event-driven programming model based on *triggers* and *actions*\u003cbr/\u003e\n⚙️ **Common core** a single, common core enables reuse and flexibility across all eventing constructs\u003cbr/\u003e\n✏️ **Golang based** Written entirely in Golang for efficiency\u003cbr/\u003e\n💪 **Deployment flexibility** Deploy as ultra-lightweight serverless functions, containers or static binaries on IoT edge devices\u003cbr/\u003e\n🧠 **Native machine learning** Purpose built activity for TensorFlow SavedModel inferencing\u003cbr/\u003e\n😍 **100% Open Source** for your dev \u0026 hacking pleasure\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src =\"images/flogostack.png\" /\u003e\n\u003c/p\u003e\n\n* **Integration Flows** Application Integration process engine with conditional branching and a visual development environment\u003cbr/\u003e\n* **Stream Processing** a simple pipeline-based stream processing action with event joining capabilities across multiple triggers \u0026 aggregation over time windows\u003cbr/\u003e\n* **Contextual Decisioning**  Declarative Rules for Real-time Contextual Decisions\u003cbr/\u003e\n* **Microgateway** Microgateway pattern for conditional, content-based routing, JWT validation, rate limiting, circuit breaking and other common patterns\u003cbr/\u003e\n\nThe concept is simple, an event is just that, an event, how it’s processed is what differs. Flogo Core eases the burden by enabling a common set of functionality, such as:\n\n- threading\n- logging\n- data type coercion\n- data mapping\n- tracing \u0026 monitoring hooks\n\nWhile also exposing a common set of contributions via activities and triggers. For example, all available triggers can be leveraged to dispatch events to any action implementation, that is, flows for application integration, streams for stream processing, rules for contextual rule processing, etc.\n\n# Flogo Repos\n\nProject Flogo consists of the following sub-projects available as separate repos under a seperated GitHub Org:\n\n* [project-flogo/flogo-cli](https://github.com/project-flogo/cli):  Command line tools for building Flogo apps \u0026 extensions\n* [project-flogo/flogo-core](https://github.com/project-flogo/core): The core Flogo library \n* [project-flogo/flogo-contrib](https://github.com/project-flogo/contrib): Flogo contributions/extensions\n* [project-flogo/stream](https://github.com/project-flogo/stream): Flogo Streams Action\n* [project-flogo/rules](https://github.com/project-flogo/rules): Contextual, deterministic rules action\n* [project-flogo/microgateway](https://github.com/project-flogo/microgateway): Flogo Microgateway Action\n* [project-flogo/flogo-web](https://github.com/project-flogo/flogo-web): Flogo Web UI\n\n# Flogo Core\n\nFlogo Core is an event-driven app framework used to develop apps for the cloud \u0026 IoT edge. It can also be thought of as a lightweight *app kernel* used by open source \u0026 commercial solutions.\n\nFlogo Core provides the following key benefits:\n\n⛓ **Action chaining** enables communication between one or more capabilities in a single, sub 10MB binary!\u003cbr/\u003e\n🏗 **Common contribution model** build activities and triggers that can be leveraged by all capabilities\u003cbr/\u003e\n🔨 **Extensible** easily extend the capabilities available by building your own action using the common interfaces\u003cbr/\u003e\n\n## Flogo Core Contribution Model\n\nFlogo Core exposes three principal contribution interfaces that enable developers to build common capabilities and functionality. These contribution interfaces include:\n\n* **Trigger Interface** a common interface for building event-consumers that dispatch events to one or more actions. The Kafka subscriber is an example of a trigger.\n* **Activity Interface** a common interface for exposing common application logic in a reusable manner. Think of this as a function, such as write to database, publish to Kafka, etc that can be used by all Flogo apps.\n* **Action Interface** a common interface for processing events. Actions contain the specific capability logic, such as integration, stream processing, rule processing, etc. Actions have a great deal of flexibility in how they’re developed and how developers leverage actions within their overall applications. For example, flows and streams expose JSON-based DSLs \u0026 Go APIs for maximum developer flexibility.\n\n# Flogo Flows\n\nFlogo Flows provides application integration capabilities and includes the following key highlights.\n\n🌈 **Painless development** Visual modeler with step-back debugging capabilities \u0026 elegant DSL\u003cbr/\u003e\n⚙️ **Ultra-light process engine** for conditional flow control\n\n## Getting Started\n\nWe've made getting started with Flogo Flows as easy as possible. The current set of tooling is designed for:\n\n- Serverless function developers\n- Cloud-native microservices developers\n- IoT Solutions developers\n- \u003ca href=\"#golang-api\"\u003eGo Developers\u003c/a\u003e\n\n### Zero-code Developers\n\nIf your background is in or you prefer to develop your apps using zero-coding environments, then read on, because we’ve got something special for you.\n\nFlows Web UI is available via [Docker Hub](https://hub.docker.com/r/flogo/flogo-docker) or [Flogo.io](http://flogo.io). The Docker image contains the Flows Web UI along with all required components to begin developing, testing and building deployable artifacts right from your web browser.\n\nTo report any issues with the Issue tracker on this project.\n\n![Flogo Web In Action](images/flogo-web2.gif)\n\n# Flogo Streams\n\nEdge devices have the potential for producing millions or even billions of events at rapid intervals, often times the events on their own are meaningless, hence the need to provide basic streaming operations against the slew of events.\n\nA native streaming action as part of the Project Flogo Ecosystem accomplishes the following primary objectives:\n\n- Enables apps to implement basic streaming constructs in a simple pipeline fashion\n- Provides non-persistent state for streaming operations\n  - Streams are persisted in memory until the end of the pipeline\n- Serves as a pre-process pipeline for raw data to perform basic mathematical and logical operations. Ideal for feeding ML models\n\nSome of the key highlights include:\n\n😀 **Simple pipeline** construct enables a clean, easy way of dealing with streams of data\u003cbr/\u003e\n⏳ **Stream aggregation** across streams using time or event tumbling \u0026 sliding windows\u003cbr/\u003e\n🙌 **Join streams** from multiple event sources\u003cbr/\u003e\n🌪 **Filter** out the noise with stream filtering capabilities\u003cbr/\u003e\n\n## Getting Started\n\nWe’ve made building powerful streaming pipelines as easy as possible. Develop your pipelines using:\n\n- A simple, clean JSON-based DSL\n- Golang API\n\nSee the sample below of an aggregation pipeline (for brevity, the triggers and metadata of the resource has been omitted). Also don’t forget to check out the examples in the [project-flogo/stream](https://github.com/project-flogo/stream/tree/master/examples) repo.\n\n```json\n  \"stages\": [\n    {\n      \"ref\": \"github.com/project-flogo/stream/activity/aggregate\",\n      \"settings\": {\n        \"function\": \"sum\",\n        \"windowType\": \"timeTumbling\",\n        \"windowSize\": \"5000\"\n      },\n      \"input\": {\n        \"value\": \"=$.input\"\n      }\n    },\n    {\n      \"ref\": \"github.com/project-flogo/contrib/activity/log\",\n      \"input\": {\n        \"message\": \"=$.result\"\n      }\n    }\n  ]\n```\n\n# Flogo Rules\n\nProcessing Events in real-time to determine next best action is an important function of Event driven applications. With the vast amount of events that are generated from different sources, making sense of the information in a given context can be immensely valuable. \n\nFlogo Rules simplifies the complexity involved with real-time contextual decisions.\n\nFlogo Rules supports\n\n- Declarative Rules to define conditional logic and trigger result rules\n- Joins/Correlations across multiple Event sources\n- Ability to define Rule Priorities\n- Timer Events; Configurable TTL (time to live) -1 - no expiry, 0 - event expiry set to end of run to completion cycle. \n- Forward chaining for Inferencing\n\n# The CLI\n\nThe CLI is used to build all applications that leverage the JSON-based DSL. If you’re using the Go API to build your apps, feel free to just `go build` your stuff without the flogo CLI.\n\nGetting started with the CLI couldn't be any easier (refer to [Flogo CLI](https://github.com/project-flogo/cli) repo for detail instructions and dependencies):\n\n* Install the CLI\n```bash\ngo install github.com/project-flogo/cli/...@latest\n```\n\n* Create \u0026 build your app\n\u003cimg src=\"images/flogo-cli.gif\" width=\"70%\"/\u003e\n\n* **flogo** the core CLI for creating and building your applications\n* **flogogen** a scaffolding tool to begin building your Flogo contributions (activities, triggers \u0026 actions)\n\nIf you're interested in building your own contribution(s), refer to the [Flogo Documentation](https://tibcosoftware.github.io/flogo/) or join us on the [project-flogo/Lobby Gitter Channel](https://gitter.im/project-flogo/Lobby?utm_source=share-link\u0026utm_medium=link\u0026utm_campaign=share-link).\n\n# Golang API\n\nAre you the kind of person who would rather code, but would love to leverage the capabilities of the Flogo Ecosystem? Makes total sense, we just ❤️ to code also! We’ve exposed a number of Go APIs for leveraging the various action types, activities and triggers. Getting started is pretty easy, just follow the steps below.\n\n* Create your new project dir and init your module\n```base\nmkdir test\ncd test\ngo mod init example.com/m\n```\n\n* Go get the latest [flogo core](https://github.com/project-flogo/core)\n```bash\ngo get github.com/project-flogo/core\n```\n\n* Optionally, if you're using any of the Flogo contributions, don't forget to get that repo, as well\n```bash\ngo get github.com/project-flogo/contrib\n```\n\n* Open up your favorite IDE or txt editor and start coding!\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/project-flogo/contrib/activity/log\"\n\t\"github.com/project-flogo/contrib/trigger/rest\"\n\t\"github.com/project-flogo/core/activity\"\n\t\"github.com/project-flogo/core/api\"\n\t\"github.com/project-flogo/core/data/coerce\"\n\t\"github.com/project-flogo/core/engine\"\n)\n\nfunc main() {\n\n\tapp := myApp()\n\n\te, err := api.NewEngine(app)\n\n\tif err != nil {\n\t\tfmt.Println(\"Error:\", err)\n\t\treturn\n\t}\n\n\tengine.RunEngine(e)\n}\n\nfunc myApp() *api.App {\n\tapp := api.NewApp()\n\n\ttrg := app.NewTrigger(\u0026rest.Trigger{}, \u0026rest.Settings{Port: 8080})\n\th, _ := trg.NewHandler(\u0026rest.HandlerSettings{Method: \"GET\", Path: \"/blah/:num\"})\n\th.NewAction(RunActivities)\n\n\t//store in map to avoid activity instance recreation\n\tlogAct, _ := api.NewActivity(\u0026log.Activity{})\n\tactivities = map[string]activity.Activity{\"log\": logAct}\n\n\treturn app\n}\n\nvar activities map[string]activity.Activity\n\nfunc RunActivities(ctx context.Context, inputs map[string]interface{}) (map[string]interface{}, error) {\n\n\ttrgOut := \u0026rest.Output{}\n\ttrgOut.FromMap(inputs)\n\n\tmsg, _ := coerce.ToString(trgOut.PathParams)\n\t_, err := api.EvalActivity(activities[\"log\"], \u0026log.Input{Message: msg})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresponse := make(map[string]interface{})\n\n\tresponse[\"id\"] = \"123\"\n\tresponse[\"amount\"] = \"1\"\n\tresponse[\"balance\"] = \"500\"\n\tresponse[\"currency\"] = \"USD\"\n\n\treply := \u0026rest.Reply{Code: 200, Data: response}\n\treturn reply.ToMap(), nil\n}\n```\n\n* Don't forget to tidy your dependencies\n```bash\ngo mod tidy\n```\n\n* Before we can build the app, let's generate the metadata for the triggers\n```bash\ngo generate\n```\n\n* Build the app\n```bash\ngo build\n```\n\n# When to use Flogo\n\nYou’ll look to leverage Flogo if you’re a dev \u0026 sick of building all the messy stuff that comes along with coding production apps. Such as connectivity to event-driven messaging platforms, datastores, SaaS apps, etc \u0026 want to deploy to a wide range of targets, such as\n\n- serverless compute\n- IoT edge devices\n- containers\n\nThe broader Flogo ecosystem exposes an opinionated perspective on building event-driven apps. If you’re looking to process events in any of the following ways, then read on because the Project Flogo Ecosystem is for you!\n\n- long running processes with flow-control support geared toward application integration\n- consuming and manipulating large streams of events via a pipeline to act as a pre-processor for time-series data to serve things like machine learning models or to derive simple conclustions via data aggregation\n- contextual, declarative rules for real-time decisioning\n\nIn short...\n\n| Flogo is...  | Flogo is not... |\n| :--- | :--- |\n| an ecosystem of opinionated, event-driven capabilities | a front-end web app or analytics framework |\n| a Go lib to increase dev productivity  | an IoT platform  |\n\n# Contributing\nWant to contribute to Project Flogo? We've made it easy, all you need to do is fork the repository you intend to contribute to, make your changes and create a Pull Request! Once the pull request has been created, you'll be prompted to sign the CLA (Contributor License Agreement) online.\n\nNot sure where to start? No problem, here are a few suggestions:\n\n* [flogo-contrib](https://github.com/project-flogo/contrib): This repository contains all of the standard contributions, such as activities, triggers, etc. Perhaps there is something missing? Create a new activity or trigger or fix a bug in an existing activity or trigger. Don't forget to check all of the other repositores in the [project-flogo org](https://github.com/project-flogo) on GitHub, as some contributions are large enough to have their own repo.\n* Browse all of the [Project Flogo repositories] and look for issues tagged `kind/help-wanted` or `good first issue`\n\nIf you have any questions, feel free to post an issue and tag it as a question, email flogo-oss@tibco.com or chat with the team and community:\n\n* The [project-flogo/Lobby](https://gitter.im/project-flogo/Lobby) Gitter channel should be used for general discussions, start here for all things Flogo!\n* The [project-flogo/developers](https://gitter.im/project-flogo/developers) Gitter channel should be used for developer/contributor focused conversations. \n\nFor additional details, refer to the [Contribution Guidelines](https://github.com/TIBCOSoftware/flogo/blob/master/CONTRIBUTING.md).\n\n# License \nProject Flogo is licensed under a BSD-style license. Refer to [LICENSE](https://github.com/TIBCOSoftware/flogo/blob/master/LICENSE) for license text.\n\n## Usage Guidelines\n\nWe’re excited that you’re using Project Flogo to power your project(s). Please adhere to the [usage guidelines](http://flogo.io/brand-guidelines) when referencing the use of Project Flogo within your project(s) and don't forget to let others know you're using Project Flogo by proudly displaying one of the following badges or the Flynn logo, found in the [branding](branding) folder of this project.\n","funding_links":[],"categories":["CSS","Repositories","Relational Databases","Edge","IoT (Internet of Things)","Others","Frameworks / Runtimes"],"sub_categories":["Tutorial","Advanced Console UIs"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTIBCOSoftware%2Fflogo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FTIBCOSoftware%2Fflogo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FTIBCOSoftware%2Fflogo/lists"}