• Stars
    star
    2,339
  • Rank 19,670 (Top 0.4 %)
  • Language
    CSS
  • License
    BSD 3-Clause "New...
  • Created over 8 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Project Flogo is an open source ecosystem of opinionated event-driven capabilities to simplify building efficient & modern serverless functions, microservices & edge apps.

Project Flogo is an Open Source ecosystem for event-driven apps

Ecosystem | Repos | Core | Flows | Streams | Flogo Rules | Go Developers | When to use Flogo | Contributing | License


Project 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.


  • App = Trigger(s) + Actions[&Activities]
  • Triggers
    • receive data from external sources.
    • are managed by a configurable threading model
    • have a common interface enabling anyone to build a Flogo trigger.
  • Handlers
    • dispatch events to actions
  • Actions
    • process events in a manner suitable with the implementation
    • have a common interface enabling opinionated event processing capabilities

Project Flogo Ecosystem

All 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.

Some of the key highlights include:

🎈 Ultra-light 20x-50x lighter than Java or Node.js
⚡️ Event-driven Powerful event-driven programming model based on triggers and actions
⚙️ Common core a single, common core enables reuse and flexibility across all eventing constructs
✏️ Golang based Written entirely in Golang for efficiency
💪 Deployment flexibility Deploy as ultra-lightweight serverless functions, containers or static binaries on IoT edge devices
🧠 Native machine learning Purpose built activity for TensorFlow SavedModel inferencing
😍 100% Open Source for your dev & hacking pleasure

  • Integration Flows Application Integration process engine with conditional branching and a visual development environment
  • Stream Processing a simple pipeline-based stream processing action with event joining capabilities across multiple triggers & aggregation over time windows
  • Contextual Decisioning Declarative Rules for Real-time Contextual Decisions
  • Microgateway Microgateway pattern for conditional, content-based routing, JWT validation, rate limiting, circuit breaking and other common patterns

The 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:

  • threading
  • logging
  • data type coercion
  • data mapping
  • tracing & monitoring hooks

While 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.

Flogo Repos

Project Flogo consists of the following sub-projects available as separate repos under a seperated GitHub Org:

Flogo Core

Flogo Core is an event-driven app framework used to develop apps for the cloud & IoT edge. It can also be thought of as a lightweight app kernel used by open source & commercial solutions.

Flogo Core provides the following key benefits:

Action chaining enables communication between one or more capabilities in a single, sub 10MB binary!
🏗 Common contribution model build activities and triggers that can be leveraged by all capabilities
🔨 Extensible easily extend the capabilities available by building your own action using the common interfaces

Flogo Core Contribution Model

Flogo Core exposes three principal contribution interfaces that enable developers to build common capabilities and functionality. These contribution interfaces include:

  • 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.
  • 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.
  • 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 & Go APIs for maximum developer flexibility.

Flogo Flows

Flogo Flows provides application integration capabilities and includes the following key highlights.

🌈 Painless development Visual modeler with step-back debugging capabilities & elegant DSL
⚙️ Ultra-light process engine for conditional flow control

Getting Started

We've made getting started with Flogo Flows as easy as possible. The current set of tooling is designed for:

  • Serverless function developers
  • Cloud-native microservices developers
  • IoT Solutions developers
  • Go Developers

Zero-code Developers

If 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.

Flows Web UI is available via Docker Hub or 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.

To report any issues with the Issue tracker on this project.

Flogo Web In Action

Flogo Streams

Edge 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.

A native streaming action as part of the Project Flogo Ecosystem accomplishes the following primary objectives:

  • Enables apps to implement basic streaming constructs in a simple pipeline fashion
  • Provides non-persistent state for streaming operations
    • Streams are persisted in memory until the end of the pipeline
  • Serves as a pre-process pipeline for raw data to perform basic mathematical and logical operations. Ideal for feeding ML models

Some of the key highlights include:

😀 Simple pipeline construct enables a clean, easy way of dealing with streams of data
Stream aggregation across streams using time or event tumbling & sliding windows
🙌 Join streams from multiple event sources
🌪 Filter out the noise with stream filtering capabilities

Getting Started

We’ve made building powerful streaming pipelines as easy as possible. Develop your pipelines using:

  • A simple, clean JSON-based DSL
  • Golang API

See 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 repo.

  "stages": [
    {
      "ref": "github.com/project-flogo/stream/activity/aggregate",
      "settings": {
        "function": "sum",
        "windowType": "timeTumbling",
        "windowSize": "5000"
      },
      "input": {
        "value": "=$.input"
      }
    },
    {
      "ref": "github.com/project-flogo/contrib/activity/log",
      "input": {
        "message": "=$.result"
      }
    }
  ]

Flogo Rules

Processing 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.

Flogo Rules simplifies the complexity involved with real-time contextual decisions.

Flogo Rules supports

  • Declarative Rules to define conditional logic and trigger result rules
  • Joins/Correlations across multiple Event sources
  • Ability to define Rule Priorities
  • Timer Events; Configurable TTL (time to live) -1 - no expiry, 0 - event expiry set to end of run to completion cycle.
  • Forward chaining for Inferencing

The CLI

The 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.

Getting started with the CLI couldn't be any easier (refer to Flogo CLI repo for detail instructions and dependencies):

  • Install the CLI
go install github.com/project-flogo/cli/...@latest
  • Create & build your app

  • flogo the core CLI for creating and building your applications
  • flogogen a scaffolding tool to begin building your Flogo contributions (activities, triggers & actions)

If you're interested in building your own contribution(s), refer to the Flogo Documentation or join us on the project-flogo/Lobby Gitter Channel.

Golang API

Are 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.

  • Create your new project dir and init your module
mkdir test
cd test
go mod init example.com/m
go get github.com/project-flogo/core
  • Optionally, if you're using any of the Flogo contributions, don't forget to get that repo, as well
go get github.com/project-flogo/contrib
  • Open up your favorite IDE or txt editor and start coding!
package main

import (
	"context"
	"fmt"

	"github.com/project-flogo/contrib/activity/log"
	"github.com/project-flogo/contrib/trigger/rest"
	"github.com/project-flogo/core/activity"
	"github.com/project-flogo/core/api"
	"github.com/project-flogo/core/data/coerce"
	"github.com/project-flogo/core/engine"
)

func main() {

	app := myApp()

	e, err := api.NewEngine(app)

	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	engine.RunEngine(e)
}

func myApp() *api.App {
	app := api.NewApp()

	trg := app.NewTrigger(&rest.Trigger{}, &rest.Settings{Port: 8080})
	h, _ := trg.NewHandler(&rest.HandlerSettings{Method: "GET", Path: "/blah/:num"})
	h.NewAction(RunActivities)

	//store in map to avoid activity instance recreation
	logAct, _ := api.NewActivity(&log.Activity{})
	activities = map[string]activity.Activity{"log": logAct}

	return app
}

var activities map[string]activity.Activity

func RunActivities(ctx context.Context, inputs map[string]interface{}) (map[string]interface{}, error) {

	trgOut := &rest.Output{}
	trgOut.FromMap(inputs)

	msg, _ := coerce.ToString(trgOut.PathParams)
	_, err := api.EvalActivity(activities["log"], &log.Input{Message: msg})
	if err != nil {
		return nil, err
	}

	response := make(map[string]interface{})

	response["id"] = "123"
	response["amount"] = "1"
	response["balance"] = "500"
	response["currency"] = "USD"

	reply := &rest.Reply{Code: 200, Data: response}
	return reply.ToMap(), nil
}
  • Don't forget to tidy your dependencies
go mod tidy
  • Before we can build the app, let's generate the metadata for the triggers
go generate
  • Build the app
go build

When to use Flogo

You’ll look to leverage Flogo if you’re a dev & 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 & want to deploy to a wide range of targets, such as

  • serverless compute
  • IoT edge devices
  • containers

The 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!

  • long running processes with flow-control support geared toward application integration
  • 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
  • contextual, declarative rules for real-time decisioning

In short...

Flogo is... Flogo is not...
an ecosystem of opinionated, event-driven capabilities a front-end web app or analytics framework
a Go lib to increase dev productivity an IoT platform

Contributing

Want 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.

Not sure where to start? No problem, here are a few suggestions:

  • 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 on GitHub, as some contributions are large enough to have their own repo.
  • Browse all of the [Project Flogo repositories] and look for issues tagged kind/help-wanted or good first issue

If you have any questions, feel free to post an issue and tag it as a question, email [email protected] or chat with the team and community:

  • The project-flogo/Lobby Gitter channel should be used for general discussions, start here for all things Flogo!
  • The project-flogo/developers Gitter channel should be used for developer/contributor focused conversations.

For additional details, refer to the Contribution Guidelines.

License

Project Flogo is licensed under a BSD-style license. Refer to LICENSE for license text.

Usage Guidelines

We’re excited that you’re using Project Flogo to power your project(s). Please adhere to the usage 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 folder of this project.

More Repositories

1

snappydata

Project SnappyData - memory optimized analytics database, based on Apache Spark™ and Apache Geode™. Stream, Transact, Analyze, Predict in one cluster
Scala
1,041
star
2

jasperreports

JasperReports® - Free Java Reporting Library
Java
839
star
3

js-docker

Container deployment of TIBCO JasperReports® Server
Smarty
144
star
4

jaspersoft-studio-ce

Jaspersoft Studio (Community Edition)
Java
115
star
5

mashling

Project Mashling
Go
86
star
6

snappy-on-k8s

An Integrated and collaborative cloud environment for building and running Spark applications on PKS/Kubernetes
Shell
79
star
7

bw6-plugin-maven

Plug-in Code for Apache Maven and TIBCO ActiveMatrix BusinessWorks™
Java
65
star
8

flogo-contrib

Flogo Contribution repo. Contains activities, triggers, models and actions.
Go
64
star
9

flogo-cli

Project Flogo Command Line Interface
Go
57
star
10

spotfire-mods

Spotfire Mods by TIBCO Spotfire®
TypeScript
50
star
11

js-visualize

Click here for live samples to quickly embed analytics with Visualize.js...
JavaScript
50
star
12

flogo-lib

Project Flogo Library
Go
49
star
13

jasperreports-server-ce

JasperReports® Server Community Edition
Java
41
star
14

snappy-examples

Use cases built on SnappyData. Use cases contained here: 1. Ad Analytics 2. Streaming data ingestion from RabbitMQ.
Scala
32
star
15

flogo-services

Project Flogo Services
Go
30
star
16

tci-flogo

Contributions and tutorials for TIBCO Cloud™ Integration - Develop powered by open source Project Flogo™
TypeScript
24
star
17

labs-air

TIBCO LABS™ Project AIR - Documentation
CSS
23
star
18

bwce-docker

Scripts for customizing Docker image for TIBCO BusinessWorks™ Container Edition
Shell
21
star
19

tgdb-client

Graph Database Client
Go
21
star
20

TIBCO-LABS

TIBCO LABS™ Initiative, the power of the future today. This is a program designed to provide customers and partners with a mechanism for actively participating in TIBCO’s history of innovation.
JavaScript
19
star
21

JS-FDSample

Sample web application demonstrating TIBCO Jaspersoft. Try it live at:
CSS
18
star
22

apiscout

TIBCO API Scout, Finding your APIs in Kubernetes so you know what you deployed last summer!
CSS
18
star
23

mashling-recipes

Recipes for Project Mashling
Go
14
star
24

cic-cli-main

Command Line Interface for TIBCO Cloud Platform Capabilities
TypeScript
13
star
25

dovetail

Dovetail blockchain ecosystem docs repository
Shell
13
star
26

snappy-cloud-tools

SnappyData Cloud Utilities
Python
13
star
27

TIBCO-Messaging

TIBCO Messaging
Java
12
star
28

spotfire-python

Package for Building Python Extensions to TIBCO Spotfire®
Python
11
star
29

Augmented-Reality

TIBCO LABS™ Project ART
C#
11
star
30

spotfire-cloud-deployment-kit

Vanilla recipes to build container images and Helm charts for TIBCO Spotfire®
Smarty
11
star
31

cic-cli-core

CLI Core for TIBCO CLOUD™ CLI Plugins
TypeScript
11
star
32

TCSTK-Angular

TIBCO Cloud™ Composer - Angular Libraries
TypeScript
11
star
33

tci-awesome

Showcase of awesome projects for TCI.
11
star
34

businessworks-awesome

Awesome projects and tools for TIBCO BusinessWorks
11
star
35

js-workshops

Follow this "Urban Roast" demo tutorial series to power your app with Visualize.js!
JavaScript
11
star
36

bw-samples

Samples and Open API's for TIBCO BusinessWorks Platform
Java
10
star
37

tibco-streaming-samples

TIBCO Streaming samples, showing various aspects of Streaming functionality.
Java
10
star
38

bw-tooling

Collection of tools designed to simplify deployment and management of TIBCO BusinessWorks applications
Java
10
star
39

genxdm

GenXDM: XQuery/XPath Data Model API, bridges, and processors for tree-model neutral access to XML.
Java
9
star
40

be-tools

Collection of tools to work with TIBCO BusinessEvents
Shell
8
star
41

cic-cli-plugin-asyncapi

CLI Plugin for transforming AsyncAPI specs into flogo templates
TypeScript
8
star
42

vscode-extension-tci

TIBCO Cloud Integration Node.js Tools for VS Code
JavaScript
8
star
43

SpotfireDockerScripts

Provide Scripts for Containerizing Spotfire Server Components
Dockerfile
8
star
44

cic-cli-plugin-tcam

TypeScript
8
star
45

spotfire-wrapper

An Angular component packaged as custom elements that defined a new HTML element to display a Spotfire dashboard in a framework-agnostic way
TypeScript
8
star
46

bwce-buildpack

Buildpack Scripts for TIBCO BusinessWorks™ Container Edition
Shell
7
star
47

TCSTK-Cloud-CLI

TIBCO Cloud™ Composer - Command Line Interface
TypeScript
7
star
48

ASAssets_Utilities

Java
6
star
49

ASAssets_DataAbstractionBestPractices

6
star
50

JoomlaAdapter-legacy

Adapter Code for TIBCO API Exchange and Joomla!
JavaScript
6
star
51

labs-air-ui

TIBCO LABS™ Project AIR - User Interface
JavaScript
6
star
52

snappy-zeppelin-interpreter

Snappydata interpreter for Apache Zeppelin
Java
5
star
53

vulnrep

Vulnerability Report Library for parsing and conversion of software vulnerability formats, including CVRF and CSAF
Go
5
star
54

dovetail-contrib

Go
5
star
55

labs-graphbuilder-contrib

TIBCO LABS™ Project GraphBuilder
TypeScript
5
star
56

ASAssets_CacheManagement

5
star
57

tibco-streaming-community

TIBCO(r) Streaming Community Samples Repository
Java
5
star
58

tcapim-graphql-proxy

Proxy Server for enforcing GraphQL Policies on TIBCO Cloud™ API Management
JavaScript
5
star
59

jrio-docker

JasperReports IO Dockerfile
Dockerfile
4
star
60

snappy-benchmarking

Scala
4
star
61

labs-discover

TIBCO LABS™ Project Discover, Business Process Mining
TypeScript
4
star
62

as2-jdbc

JDBC for TIBCO ActiveSpaces
Java
4
star
63

TCSTK-case-manager-app

TIBCO Cloud™ Composer Pattern App - Case Manager App
TypeScript
4
star
64

SDS-R-Connector

R Connector for TIBCO Spotfire® Data Science
C
3
star
65

dovetail-cli

Client for the generation and deployment of smart contracts
Go
3
star
66

labs-air-edgex

TIBCO LABS™ Project AIR - EdgeX baseline
Go
3
star
67

spotfire-mod-welllog

A visualization for TIBCO Spotfire® to display well logs on tracks and fill in between the lines to aid visualization and interpretation of the data.
JavaScript
3
star
68

labs-air-contrib

TIBCO LABS™ Project AIR - Extensions
Go
3
star
69

labs-air-services

TIBCO LABS™ Project AIR - Services
Go
3
star
70

TCSTK-component-schematics

TIBCO Cloud™ Composer - Component Schematics
TypeScript
3
star
71

lmi-spotfire-ds

The LMI Data Source for Spotfire creates a new data source type that connects to an LMI instance.
C#
3
star
72

PDTool

HTML
3
star
73

tibco-developer-hub

TypeScript
3
star
74

ebx-container-edition

Shell
3
star
75

bpme-samples

This repository includes samples focused on TIBCO BPM Enterprise capabilities, custom UI development, cloud-native deployment
JavaScript
2
star
76

fabrician-jruby-scripting-engine

TIBCO Silver Fabric scripting engine for JRuby.
2
star
77

TCSTK-base-app

TIBCO Cloud™ Composer Pattern App - Base App
JavaScript
2
star
78

tcapim-cli-plugin

CLI Plugin to create and manage TIBCO Cloud™ API Management applications.
JavaScript
2
star
79

PDToolRelease

2
star
80

vscode-extension-mashling

Project Mashling VSCode Extension
TypeScript
2
star
81

catalystml

CatalystML is an open source specification for real-time feature processing, purpose built to transform data for machine learning models.
Python
2
star
82

loglmi-appender

Java log appender for LogLogic
Java
2
star
83

lmi-flogo-collectors

Go
2
star
84

fabrician-hadoop-enabler

TIBCO Silver Fabric Enabler for Hadoop
Python
2
star
85

spotfire-quickstart

Spotfire quickstart templates for automatic deployment of TIBCO Spotfire® platform
HCL
2
star
86

platform-provisioner

Platform Provisioner by TIBCO®
Shell
2
star
87

TCSTK-analytics-app

TIBCO Cloud™ Composer Pattern App - Analytics App
TypeScript
2
star
88

ASAssets_KPI

Java
2
star
89

labs-air-charts

TIBCO LABS™ Project AIR - Charts
Shell
2
star
90

dovetail-java-lib

Java
1
star
91

bcce-tas-scripts

Shell
1
star
92

bw-sample-for-amazon-sns

Java
1
star
93

lmi-jdbc

JDBC driver for accessing data stored in LogLogic LMI
Java
1
star
94

labs-lightcrane-services

Python
1
star
95

JasperMobileSDK-ios

Objective-C
1
star
96

eftl

Go bindings for eFTL
Go
1
star
97

gateway-examples

Usage examples for the Gateway.
1
star
98

labs-lightcrane-contrib

Go
1
star
99

tibcli-node

Command line version of Visual Studio Code extension
JavaScript
1
star
100

lmi-aws-ec

JavaScript
1
star