🦖 Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.

Overview

YoMo Go

YoMo is an open-source Streaming Serverless Framework for building Low-latency Edge Computing applications. Built atop QUIC Transport Protocol and Functional Reactive Programming interface. makes real-time data processing reliable, secure, and easy.

Official Website: 🦖 https://yomo.run

Gitee

🌶 Features

Features
⚡️ Low-latency Guaranteed by implementing atop QUIC QUIC
🔐 Security TLS v1.3 on every data packet by design
📱 5G/WiFi-6 Reliable networking in Celluar/Wireless
🌎 Geo-Distributed Edge Mesh Edge-Mesh Native architecture makes your services close to end users
📸 Event-First Architecture leverages serverless service to be event driven and elastic
🦖 Streaming Serverless Write only a few lines of code to build applications and microservices
🚀 Y3 a faster than real-time codec
📨 Reactive stream processing based on Rx

🚀 Getting Started

1. Install CLI

Note: YoMo requires Go 1.15 and above, run go version to get the version of Go in your environment, please follow this link to install or upgrade if it doesn't fit the requirement.

# Ensure use $GOPATH, golang requires main and plugin highly coupledecho $GOPATH

if $GOPATH is not set, check Set $GOPATH and $GOBIN first.

$ GO111MODULE=off go get github.com/yomorun/yomo

$ cd $GOPATH/src/github.com/yomorun/yomo

$ make install

YoMo Tutorial 1

2. Create your serverless app

$ mkdir -p $GOPATH/src/github.com/{YOUR_GITHUB_USERNAME} && cd $_

$ yomo init yomo-app-demo
2020/12/29 13:03:57 Initializing the Serverless app...
2020/12/29 13:04:00 ✅ Congratulations! You have initialized the serverless app successfully.
2020/12/29 13:04:00 🎉 You can enjoy the YoMo Serverless via the command: yomo dev

$ cd yomo-app-demo

YoMo Tutorial 2

CLI will automatically create the app.go:

package main

import (
	"context"
	"fmt"
	"time"

	"github.com/reactivex/rxgo/v2"
	y3 "github.com/yomorun/y3-codec-golang"
	"github.com/yomorun/yomo/pkg/rx"
)

// NoiseDataKey represents the Tag of a Y3 encoded data packet
const NoiseDataKey = 0x10

// NoiseData represents the structure of data
type NoiseData struct {
	Noise float32 `y3:"0x11"`
	Time  int64   `y3:"0x12"`
	From  string  `y3:"0x13"`
}

var printer = func(_ context.Context, i interface{}) (interface{}, error) {
	value := i.(NoiseData)
	rightNow := time.Now().UnixNano() / int64(time.Millisecond)
	fmt.Println(fmt.Sprintf("[%s] %d > value: %f ⚡️=%dms", value.From, value.Time, value.Noise, rightNow-value.Time))
	return value.Noise, nil
}

var callback = func(v []byte) (interface{}, error) {
	var mold NoiseData
	err := y3.ToObject(v, &mold)
	if err != nil {
		return nil, err
	}
	mold.Noise = mold.Noise / 10
	return mold, nil
}

// Handler will handle data in Rx way
func Handler(rxstream rx.RxStream) rx.RxStream {
	stream := rxstream.
		Subscribe(NoiseDataKey).
		OnObserve(callback).
		Debounce(rxgo.WithDuration(50 * time.Millisecond)).
		Map(printer).
		StdOut()

	return stream
}

3. Build and run

  1. Run yomo dev from the terminal. you will see the following message:

YoMo Tutorial 3

Congratulations! You have done your first YoMo application.

Optional: Set $GOPATH and $GOBIN

for current session:

export GOPATH=~/.go
export PATH=$GOPATH/bin:$PATH

for shell:

for zsh users

echo "export GOPATH=~/.go" >> .zshrc
echo "path+=$GOPATH/bin" >> .zshrc

for bash users

echo 'export GOPATH=~/.go' >> .bashrc
echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc

🧩 Interop

event-first processing

Multiple data sources combined calculation

Sources

Flows

Sinks

🗺 Location Insensitive Deployment

yomo-flow-arch

📚 Documentation

YoMo ❤️ Vercel, Our documentation website is

Vercel Logo

🎯 Focuses on computings out of data center

  • IoT/IIoT/AIoT
  • Latency-sensitive applications.
  • Networking situation with packet loss or high latency.
  • Handling continuous high frequency generated data with stream-processing.
  • Building Complex systems with Streaming-Serverless architecture.

🌟 Why YoMo

  • Based on QUIC (Quick UDP Internet Connection) protocol for data transmission, which uses the User Datagram Protocol (UDP) as its basis instead of the Transmission Control Protocol (TCP); significantly improves the stability and throughput of data transmission. Especially for cellular networks like 5G.
  • A self-developed y3-codec optimizes decoding performance. For more information, visit its own repository on GitHub.
  • Based on stream computing, which improves speed and accuracy when dealing with data handling and analysis; simplifies the complexity of stream-oriented programming.
  • Secure-by-default from transport protocol.

🦸 Contributing

First off, thank you for considering making contributions. It's people like you that make YoMo better. There are many ways in which you can participate in the project, for example:

  • File a bug report. Be sure to include information like what version of YoMo you are using, what your operating system is, and steps to recreate the bug.
  • Suggest a new feature.
  • Read our contributing guidelines to learn about what types of contributions we are looking for.
  • We have also adopted a code of conduct that we expect project participants to adhere to.

🤹🏻‍♀️ Feedback

Any questions or good ideas, please feel free to come to our Discussion. Any feedback would be greatly appreciated!

License

Apache License 2.0

Comments
  • fix: yomo build init setup

    fix: yomo build init setup

    currently, the yomo init generate a wrong go.mod, which leads to the following error when yomo dev

    $ yomo dev
    2021/01/17 16:37:53 Building the Serverless Function File...
    2021/01/17 16:37:53 ❌ Build the serverless file failure with err: exit status 1
    

    • latest yomo 0.7.1 binary
    • yomo init -name test
    • cd test
    • yomo dev

    relates to https://github.com/Homebrew/homebrew-core/pull/67240


    This change is Reviewable

    opened by chenrui333 7
  • [BUG] example noise

    [BUG] example noise

    Summary

    SUMMARY_GOES_HERE Hello. I find this example . Can just run under YoMo CLI version: v0.05 . When I use YoMo CLI version: v0.1.3 : it show yomo-source-noise unable to connect to yomo-zipper.

    Steps To Reproduce

    1. yomo-zipper run with yomo serve -c workflow.yaml image

    2. yomo-source-noise run with YOMO_SOURCE_MQTT_ZIPPER_ADDR=localhost:9999 YOMO_SOURCE_MQTT_SERVER_ADDR=0.0.0.0:1883 go run main.go image

    3. yomo-source-noise-emitter run with YOMO_SOURCE_MQTT_BROKER_ADDR=tcp://localhost:1883 \ YOMO_SOURCE_MQTT_PUB_TOPIC=NOISE \ YOMO_SOURCE_MQTT_PUB_INTERVAL=500 \ go run main.go image

    Is zipper not supported YoMo CLI version: v0.1.3? yomo-zipper-noise-example image

    Can you give me some advices,I think it applies to YoMo CLI version: v0.1.3. Thanks a lot!!!

    Additional Details & Logs

    • Yomo version : YoMo CLI version: v0.1.3
    • Yom: error logs
    • Yomo configuration
    • Operating system: Ubuntu20.04
    bug 
    opened by buliangc 6
  • Introduce .env file for config

    Introduce .env file for config

    Summary

    Currently, YoMo accepts three types of config:

    • config file(workflow.yaml)
    • env vars
    • command-line args.

    When developers start their serverless, has to:

    yomo dev --zipper-addr=10.10.44.33:9000 --auth-credential=xxxxxxx func.go
    

    Due to the lack of complete configuration management, the config process may be time-consuming and error-prone. With this feature developers could config all variables in the .env file.

    Intended Outcome

    The config process becomes easier for developers, especially between deploys(such as development, test, and production).

    How will it work?

    Developer can add .env file in current working directory, then YoMo will read these config variables(prefixed with YOMO_) automatically when program started. The file is like the following:

    YOMO_ZIPPER_ADDR=10.10.44.33:9000
    YOMO_LOG_LEVEL=debug
    

    then, start with command line:

    yomo dev func.go
    
    feat feat/cli 
    opened by wujunzhuo 5
  • Allow function to be broadcasted to all or randomly

    Allow function to be broadcasted to all or randomly

    Probably would require to be more polished, but the idea here would be to have multiple listener on one function. I didn't test the scenario of multiple zipper or mesh network, but only a simple source + zipper + multi-sfn.

    This is only a proposal draft, so don't hesitate to comment. Note that I am fully aware that I will have to remove some comments and improve some part of the code.


    This change is Reviewable

    opened by Nordes 5
  • [BUG] Grafana example bug

    [BUG] Grafana example bug

    Summary (概要)

    I am going to install the Yomo-datasource plugin in Ubuntu Grafana based on the plugin you provided to realize the display of data. But I tried this example,maybe I did something wrong, ran into two problems.

    image

    Steps To Reproduce (复现的步骤)

    1. First: In ubuntu,I followed the tutorial and unzip the releases link to Grafana plugins folder. I tried : yomo-websocket-datasource.zip and Source code (tar.gz). Unfortunately, after rebooting Grafana, I couldn't find YoMo Streams in the plugin.For comparison, I downloaded a plugin from the Grafana website and unzip to the Grafana plugins folder. Grafana identified it. So maybe I did something wrong, or it is not the correct version of Linux. So i hope you can give me some advices,thanks a lot!!!

    2. Second: In windows, I unzip the yomo-websocket-datasource.zip to Grafana plugins folder.Grafana identified it.So great! image Then add data source successfully: image But when I want to query data, it shows no data returned: image

    So that's all the problems I had trying this example. At present, I don't know how to solve these problems,I hope you can give me some advice,thanks a lot!!!

    Additional Details & Logs (附加的信息和日志)

    • Yomo version (版本) YoMo CLI version: v0.1.3
    • Yomo error logs (错误日志)
    • Yomo configuration (配置)
    • Operating system (操作系统) ubuntu16.04 and windows
    bug 
    opened by buliangc 5
  • [BUG]client [NewClient] Error: CRYPTO_ERROR (0x178): tls: no application protoco

    [BUG]client [NewClient] Error: CRYPTO_ERROR (0x178): tls: no application protoco

    Summary (概要)

    When I run this example, I want to do y3 encoding.There are some problems with the operation.It worked fine when I coded the example in JSON.

    https://github.com/yomorun/yomo-source-example/blob/main/main.go

    Steps To Reproduce (复现的步骤)

    I think there might be some error in the execution of this statement.But i don't know how to fix it.Can you give me some advices.thanks a lot.

    cli, err := client.NewSource("yomo-source").Connect(host, port)

    image

    Additional Details & Logs (附加的信息和日志)

    • github.com/yomorun/yomo v1.2.520 // indirect
    • Yomo version (版本) YoMo CLI version: v0.1.3
    • Yomo error logs (错误日志) client [NewClient] Error: CRYPTO_ERROR (0x178): tls: no application protoco
    • Yomo configuration (配置)
    • Operating system (操作系统) windows
    bug 
    opened by buliangc 5
  • [BUG] plugin different version of package

    [BUG] plugin different version of package

    Summary (概要)

    when I use cmd "yomo dev", I got some problem

    Steps To Reproduce (复现的步骤)

    1.mkdir demo 2.open my IDE goland to open my demo project 3.go mod tidy 4.yomo dev

    Additional Details & Logs (附加的信息和日志)

    • Yomo version (版本)1.0.0-3gf175e41 (2021-03-10)
    • Yomo error logs (错误日志)Load handle from .so file failure with error: plugin.Open("sl"): plugin was built with a different version of package github.com/yomorun/yomo/pkg/yy3
    • Yomo configuration (配置) I got the issue when I enter the cmd "yomo dev",so there`s probably is yomo init config
    • Operating system (操作系统)MacOS Catalina v10.15.7
    bug 
    opened by Levinethan 4
  • chore(deps): bump github.com/spf13/cobra from 1.5.0 to 1.6.1

    chore(deps): bump github.com/spf13/cobra from 1.5.0 to 1.6.1

    Bumps github.com/spf13/cobra from 1.5.0 to 1.6.1.

    Release notes

    Sourced from github.com/spf13/cobra's releases.

    v1.6.1

    Bug fixes 🐛

    • Fixes a panic when AddGroup isn't called before AddCommand(my-sub-command) is executed. This can happen within more complex cobra file structures that have many different inits to be executed. Now, the check for groups has been moved to ExecuteC and provides more flexibility when working with grouped commands - @​marckhouzam (and shout out to @​aawsome, @​andig and @​KINGSABRI for a deep investigation into this! 👏🏼)

    v1.6.0

    Summer 2022 Release

    Some exciting changes make their way to Cobra! Command completions continue to get better and better (including adding --help and --version automatic flags to the completions list). Grouping is now possible in your help output as well! And you can now use the OnFinalize method to cleanup things when all "work" is done. Checkout the full changelog below:


    Features 🌠

    Deprecation 👎🏼

    • ExactValidArgs is deprecated (but not being removed entirely). This is abit nuanced, so checkout #1643 for further information and the updated user_guide.md on how this may affect you (and how you can take advantage of the correct behavior in the validators): @​umarcor #1643

    Bug fixes 🐛

    Dependencies 🗳️

    Testing 🤔

    Docs ✏️

    Misc 💭

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    go dependencies 
    opened by dependabot[bot] 3
  • chore(deps): bump github.com/cenkalti/backoff/v4 from 4.1.1 to 4.1.2

    chore(deps): bump github.com/cenkalti/backoff/v4 from 4.1.1 to 4.1.2

    Bumps github.com/cenkalti/backoff/v4 from 4.1.1 to 4.1.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

    This change is Reviewable

    go dependencies 
    opened by dependabot[bot] 3
  • chore(deps): bump go.uber.org/zap from 1.19.0 to 1.20.0

    chore(deps): bump go.uber.org/zap from 1.19.0 to 1.20.0

    Bumps go.uber.org/zap from 1.19.0 to 1.20.0.

    Release notes

    Sourced from go.uber.org/zap's releases.

    v1.20.0

    Enhancements:

    • #989[]: Add EncoderConfig.SkipLineEnding flag to disable adding newline characters between log statements.
    • #1039[]: Add EncoderConfig.NewReflectedEncoder field to customize JSON encoding of reflected log fields.

    Bugfixes:

    • #1011[]: Fix inaccurate precision when encoding complex64 as JSON.
    • #554[], #1017[]: Close JSON namespaces opened in MarshalLogObject methods when the methods return.
    • #1033[]: Avoid panicking in Sampler core if thereafter is zero.

    Other changes:

    • #1028[]: Drop support for Go < 1.15.

    #554: uber-go/zap#554 #989: uber-go/zap#989 #1011: uber-go/zap#1011 #1017: uber-go/zap#1017 #1028: uber-go/zap#1028 #1033: uber-go/zap#1033 #1039: uber-go/zap#1039

    Thanks to @​psrajat, @​lruggieri, @​sammyrnycreal for their contributions to this release.

    v1.19.1

    Fixed

    • #1001[]: JSON: Fix complex number encoding with negative imaginary part. Thanks to @​hemantjadon.
    • #1003[]: JSON: Fix inaccurate precision when encoding float32.

    #1001: uber-go/zap#1001 #1003: uber-go/zap#1003

    Changelog

    Sourced from go.uber.org/zap's changelog.

    1.20.0 (4 Jan 2022)

    Enhancements:

    • #989[]: Add EncoderConfig.SkipLineEnding flag to disable adding newline characters between log statements.
    • #1039[]: Add EncoderConfig.NewReflectedEncoder field to customize JSON encoding of reflected log fields.

    Bugfixes:

    • #1011[]: Fix inaccurate precision when encoding complex64 as JSON.
    • #554[], #1017[]: Close JSON namespaces opened in MarshalLogObject methods when the methods return.
    • #1033[]: Avoid panicking in Sampler core if thereafter is zero.

    Other changes:

    • #1028[]: Drop support for Go < 1.15.

    #554: uber-go/zap#554 #989: uber-go/zap#989 #1011: uber-go/zap#1011 #1017: uber-go/zap#1017 #1028: uber-go/zap#1028 #1033: uber-go/zap#1033 #1039: uber-go/zap#1039

    Thanks to @​psrajat, @​lruggieri, @​sammyrnycreal for their contributions to this release.

    1.19.1 (8 Sep 2021)

    Bugfixes:

    • #1001[]: JSON: Fix complex number encoding with negative imaginary part. Thanks to @​hemantjadon.
    • #1003[]: JSON: Fix inaccurate precision when encoding float32.

    #1001: uber-go/zap#1001 #1003: uber-go/zap#1003

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

    This change is Reviewable

    go dependencies 
    opened by dependabot[bot] 3
  • [BUG]无法成功执行执行demo中echo.go

    [BUG]无法成功执行执行demo中echo.go

    Summary (概要)

    无法成功执行执行demo中echo.go

    Steps To Reproduce (复现的步骤)

    1.在$HOME/go/yomo中执行go mod init yomo 2.执行go get -u github.com/yomorun/yomo 3.按文档创建echo.go 4.执行go run echo.go

    Additional Details & Logs (附加的信息和日志)

    • Yomo version: latest
    • Yomo error logs:

    command-line-arguments

    ./echo.go:16:14: cannot use &EchoPlugin literal (type *EchoPlugin) as type plugin.YomoObjectPlugin in argument to yomo.RunDev: *EchoPlugin does not implement plugin.YomoObjectPlugin (missing Mold method)

    • Operating system: Debian 10
    opened by kunwu3 3
  • chore(deps): bump github.com/briandowns/spinner from 1.19.0 to 1.20.0

    chore(deps): bump github.com/briandowns/spinner from 1.19.0 to 1.20.0

    Bumps github.com/briandowns/spinner from 1.19.0 to 1.20.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    go dependencies 
    opened by dependabot[bot] 1
  • Provide a ability to Zipper can guide the Stream Function connecting to other Zippers

    Provide a ability to Zipper can guide the Stream Function connecting to other Zippers

    Summary

    Nowadays, API based communication between apps can not perform fast data exchange:

    image

    Last year, QUIC comes out as RFC9000, by YoMo, we can build our apps atop of this new network protocol easily, realtime collaboration features like Figma Cursor Chat become new standard features for SaaS.

    image

    Today, developers can build Geo-distributed system by YoMo, guarantee <50ms global latency for their users:

    image

    But it is costly in infrastructure and its management. Developers can not leverage cost and latency.

    Intended Outcome

    Providing the ability to YoMo Zipper, make it can guide YoMo Stream Functions connecting to other YoMo Zipper(s), developers can get about ~100ms global latency without geo-distributed deployments, reduces significant infrastructure investment and system maintenance costs.

    image

    How will it work?

    When a Stream Function connected to a Zipper, will get a ConnectToFrame signal from Zipper, this frame contains other zipper connection info like us-west-302.x.yomo.dev:9000, Stream Function will connect to the new one immediately.

    feat/serverless feat/mesh 
    opened by fanweixiao 0
  • Merge CLI repo to YoMo repo

    Merge CLI repo to YoMo repo

    Summary

    As getting off go plugin, there is no need to separate YoMo and CLI to different repos, should merge them together, and change install script.

    Release v1.9.0 for this changes, no breaking changes.

    feat feat/cli 
    opened by fanweixiao 1
Releases(v1.10.0)
  • v1.10.0(Dec 24, 2022)

    What's Changed

    • refactor: merge CLI repository by @venjiang in https://github.com/yomorun/yomo/pull/379
    • bump deps, Close #382, #383, #384, #385 by @fanweixiao in https://github.com/yomorun/yomo/pull/386
    • feat: expand DataTag from Byte to uint32 by @wujunzhuo in https://github.com/yomorun/yomo/pull/389
    • feat: version negotiation between server and client by @wujunzhuo in https://github.com/yomorun/yomo/pull/390
    • chore(deps): bump golang.org/x/tools from 0.2.0 to 0.3.0 by @dependabot in https://github.com/yomorun/yomo/pull/395
    • feat: add tls config, tls certificate from peer side can be verified. by @wujunzhuo in https://github.com/yomorun/yomo/pull/393
    • Implement the String() method for Frame to avoid unnecessary Encode() calls by @wujunzhuo in https://github.com/yomorun/yomo/pull/399
    • chore(deps): bump github.com/lucas-clemente/quic-go from 0.30.0 to 0.31.0 by @dependabot in https://github.com/yomorun/yomo/pull/398
    • test: add unittest by @woorui in https://github.com/yomorun/yomo/pull/396
    • chore: codecov by @woorui in https://github.com/yomorun/yomo/pull/403
    • refactor: obtain metadata from connection or dataframe by @wujunzhuo in https://github.com/yomorun/yomo/pull/402
    • Refactor client option by @woorui in https://github.com/yomorun/yomo/pull/400
    • feat(logger): add slog support by @woorui in https://github.com/yomorun/yomo/pull/407
    • chore(readme): add codecov badge by @woorui in https://github.com/yomorun/yomo/pull/406
    • fix: readme format by @woorui in https://github.com/yomorun/yomo/pull/414
    • refactor: core pkg uses slog by @woorui in https://github.com/yomorun/yomo/pull/410
    • chore(deps): bump golang.org/x/tools from 0.3.0 to 0.4.0 by @dependabot in https://github.com/yomorun/yomo/pull/409
    • chore(deps): bump github.com/lucas-clemente/quic-go from 0.31.0 to 0.31.1 by @dependabot in https://github.com/yomorun/yomo/pull/408
    • fix(cli): go.mod parse and init command template by @venjiang in https://github.com/yomorun/yomo/pull/416
    • feat(logger): add lumberjack support by @woorui in https://github.com/yomorun/yomo/pull/418
    • fix(server): escape nil frame if read error by @woorui in https://github.com/yomorun/yomo/pull/420
    • chore: update example by @venjiang in https://github.com/yomorun/yomo/pull/417
    • feat: server start handler by @woorui in https://github.com/yomorun/yomo/pull/419

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.9.2...v1.10.0

    Source code(tar.gz)
    Source code(zip)
    yomo-v1.10.0-arm64-Linux.tar.gz(9.66 MB)
    yomo-v1.10.0-x86_64-Darwin.tar.gz(11.45 MB)
    yomo-v1.10.0-x86_64-Linux.tar.gz(10.62 MB)
    yomo-v1.10.0-x86_64-Windows.tar.gz(9.64 MB)
  • v1.9.3-alpha(Oct 12, 2022)

  • v1.9.2(Sep 27, 2022)

    What's Changed

    • fix(sfn): fix log by @woorui in https://github.com/yomorun/yomo/pull/371
    • Fix typo by @jcayzac in https://github.com/yomorun/yomo/pull/375
    • fix: client read state race by @venjiang in https://github.com/yomorun/yomo/pull/377
    • chore: update dependencies by @venjiang in https://github.com/yomorun/yomo/pull/378

    New Contributors

    • @jcayzac made their first contribution in https://github.com/yomorun/yomo/pull/375

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.9.1...v1.9.2

    Source code(tar.gz)
    Source code(zip)
  • v1.9.1(Aug 29, 2022)

    Core Changes

    • fix(client): conn nil pointer panic close (#372) @woorui
    • refactor: better client connection state management (#364) @wujunzhuo

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.9.0...v1.9.1

    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Aug 22, 2022)

    Core Changes

    • feat: add broadcast frame for zipper cascading to broadcast messages to geo-distributed edge nodes by @venjiang in https://github.com/yomorun/yomo/pull/366

    Improvements

    • update installation script by @fanweixiao in https://github.com/yomorun/yomo/pull/358
    • feat: add server connection handler by @venjiang in https://github.com/yomorun/yomo/pull/359
    • fix: sfn auto reconnect/connection close by @venjiang in https://github.com/yomorun/yomo/pull/360
    • fix(source): source Write return 0 if error by @woorui in https://github.com/yomorun/yomo/pull/369
    • chore(deps): bump go.uber.org/zap from 1.21.0 to 1.22.0 by @dependabot in https://github.com/yomorun/yomo/pull/365
    • chore: update example by @venjiang in https://github.com/yomorun/yomo/pull/370

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.8.1...v1.9.0

    Source code(tar.gz)
    Source code(zip)
  • v1.8.1(Aug 1, 2022)

    What's Changed

    • fix: encode metadata by @wujunzhuo in https://github.com/yomorun/yomo/pull/341
    • fix(example): update go.mod, fix task run errors by @fanweixiao in https://github.com/yomorun/yomo/pull/342
    • Fix return nil when encounter a non-nil error by @xieyuschen in https://github.com/yomorun/yomo/pull/345
    • feat: implement customized server logger by @wujunzhuo in https://github.com/yomorun/yomo/pull/343
    • fix: close connection stream when client had closed by @wujunzhuo in https://github.com/yomorun/yomo/pull/350
    • fix: nil pointer error if handshake failed by @wujunzhuo in https://github.com/yomorun/yomo/pull/351
    • fix(config): polish loading config and unittest by @woorui in https://github.com/yomorun/yomo/pull/352
    • chore(deps): bump github.com/stretchr/testify from 1.7.2 to 1.8.0 by @dependabot in https://github.com/yomorun/yomo/pull/347
    • bump quic-go to v0.28.1 (#346) by @venjiang in https://github.com/yomorun/yomo/pull/354
    • refactor(listener): remove redundant dependence by @woorui in https://github.com/yomorun/yomo/pull/353
    • fix(config): QUIC config with upgrade by @fanweixiao in https://github.com/yomorun/yomo/pull/355
    • feat: add Context pool by @woorui in https://github.com/yomorun/yomo/pull/356
    • fix(config): QUIC config with upgrade by @venjiang in https://github.com/yomorun/yomo/pull/357

    New Contributors

    • @xieyuschen made their first contribution in https://github.com/yomorun/yomo/pull/345
    • @woorui made their first contribution in https://github.com/yomorun/yomo/pull/352

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.8.0...v1.8.1

    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Jun 15, 2022)

    What's Changed

    • feat: Backflow support of Source first mentioned by @Nordes at #321 , implemented by @venjiang in https://github.com/yomorun/yomo/pull/330
    • add backflow example by @venjiang in https://github.com/yomorun/yomo/pull/339
    • fix: goaway by @venjiang in https://github.com/yomorun/yomo/pull/334
    • chore(deps): bump quic-go from 0.27.1 to 0.27.2 https://github.com/yomorun/yomo/pull/340

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.7.4...v1.8.0

    Source code(tar.gz)
    Source code(zip)
  • v1.7.4(May 28, 2022)

    What's Changed

    • refactor: refactor Connector to make code more expressive by @wujunzhuo in https://github.com/yomorun/yomo/pull/329
    • fix: avoid panic due to reflecting nil pointer by @wujunzhuo in https://github.com/yomorun/yomo/pull/332
    • fix/security: CVE-2022-28948 by @fanweixiao in https://github.com/yomorun/yomo/pull/333

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.7.3...v1.7.4

    Source code(tar.gz)
    Source code(zip)
  • v1.7.3(May 13, 2022)

    What's Changed

    • Update README.md by @Sayanta66 in https://github.com/yomorun/yomo/pull/320
    • feat: upgrade auth process by @venjiang in https://github.com/yomorun/yomo/pull/319
    • feat: avoid SFN with the same name by @venjiang in https://github.com/yomorun/yomo/pull/322
    • fix: reconnect by @venjiang in https://github.com/yomorun/yomo/pull/326

    New Contributors

    • @Sayanta66 made their first contribution in https://github.com/yomorun/yomo/pull/320

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.7.2...v1.7.3

    Source code(tar.gz)
    Source code(zip)
  • v1.7.2(Apr 12, 2022)

    What's Changed

    • docs: fix typo by @schmelto in https://github.com/yomorun/yomo/pull/313
    • doc: add production os performance tuning section by @fanweixiao in https://github.com/yomorun/yomo/pull/315
    • chore(deps): bump quic-go to v0.27.0 by @venjiang in https://github.com/yomorun/yomo/pull/318

    New Contributors

    • @schmelto made their first contribution in https://github.com/yomorun/yomo/pull/313

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.7.1...v1.7.2

    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(Mar 25, 2022)

    Core Changes

    • fix: client TLS config by @venjiang in https://github.com/yomorun/yomo/pull/306
    • docs(example): typos by @venjiang in https://github.com/yomorun/yomo/pull/307
    • perf: change quic keep-alive packet strategy by @wujunzhuo in https://github.com/yomorun/yomo/pull/304
    • fix: Connector Write goroutine safety by @wujunzhuo in https://github.com/yomorun/yomo/pull/309
    • docs: advanced topics by @venjiang in https://github.com/yomorun/yomo/pull/305
    • chore(deps): bump github.com/stretchr/testify from 1.7.0 to 1.7.1 by @dependabot in https://github.com/yomorun/yomo/pull/308
    • chore: update dependencies by @venjiang in https://github.com/yomorun/yomo/pull/310
    • fix: connection state race by @venjiang in https://github.com/yomorun/yomo/pull/311

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.7.0...v1.7.1

    Source code(tar.gz)
    Source code(zip)
  • v1.7.0(Mar 4, 2022)

  • v1.6.1(Feb 28, 2022)

    Core Changes

    • fix: when client close the connection, no error should occured by @fanweixiao in https://github.com/yomorun/yomo/pull/297

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.6.0...v1.6.1

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Feb 25, 2022)

    Core Changes

    • Immutable streams for downstream serverless functions #284 @wujunzhuo

    Improvements

    • docs(example): update the README in examples by @xiaojian-hong in #285
    • refactory example task build by @fanweixiao in #286
    • doc(example): update Taskfile automation, docs and codes. by @fanweixiao in #287
    • refactor logger by @venjiang in #290
    • fix(logger): duplication message by @venjiang in #293
    • refactor: log a shortly frame data by @venjiang in #292
    • refactor: rename ObservedDataTags to ObserveDataTags by @venjiang in #291
    • refactor(frame): rename ObservedDataTags to ObserveDataTags by @venjiang in #295

    Full Changelog: https://github.com/yomorun/yomo/compare/v1.5.4...v1.6.0

    Source code(tar.gz)
    Source code(zip)
  • v1.5.4(Jan 30, 2022)

    Core Changes

    • security: custom router support/auth support (#259) @venjiang
    • fix: reconnect issue (#273) @venjiang
    • quic: client Write thread safety (#277) @wujunzhuo
    • example: unix pipeline over internet etc (#247, #256 ) @fanweixiao @xiaojian-hong
    Source code(tar.gz)
    Source code(zip)
  • v1.5.3(Oct 9, 2021)

  • v1.5.2(Oct 8, 2021)

  • v1.5.1(Oct 1, 2021)

  • v1.5.0(Sep 24, 2021)

    Core Changes

    • Introduce Frame @venjiang
    • Immutable streams @xiaojian-hong
    • Decoupling Y3 codec from user land @fanweixiao

    This version takes 2 months with 90 commits, with a lot of performance tuning stuffs. During this period, our core contributor @xiaojian-hong got his baby, so, this version of yomo, we use HD, the name of baby, as code name of current version :)

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0-beta(Aug 24, 2021)

  • v1.4.0-alpha(Aug 19, 2021)

    Core Changes

    • Rename source/flow/sink #173
    • Simplify workflow.yaml #174
    • stream-fn is optional to use the Encode operator.
    • Improve the throughput when high concurrency.
    • Add more tests.
    Source code(tar.gz)
    Source code(zip)
  • v1.3.7(Jul 15, 2021)

    Core Changes

    • refactor(log): add log when reconnecting to zipper (#206)
    • chore(deps): bump go.uber.org/zap from 1.17.0 to 1.18.1 (#202)
    • fix(mesh): print the received data when no sinks in zipper-receiver (#204)
    • fix(mesh): print the information when downloading the mesh config (#203)
    • fix(zipper): decode frame before sending data to downstream zipper (#201)
    • update links (#200) (#199)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.6(Jun 28, 2021)

  • v1.3.5(Jun 24, 2021)

    Core Changes

    • feat(logger): add logger to print different level logs (#195)
    • add example demonstrate how to transfer raw binary data with YoMo (#194)
    • chore(deps): bump github.com/lucas-clemente/quic-go from 0.21.0 to 0.21.1 (#193)
    • chore(deps): bump github.com/yomorun/y3-codec-golang from 1.6.9 to 1.7.0 (#196)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.4(Jun 21, 2021)

  • v1.3.3(Jun 18, 2021)

  • v1.3.2(Jun 11, 2021)

    Core Changes

    • Update README_CN.md to latest version
    • fix(client): add RetryWithCount and fix connection bug (#188)
    • refactor(runtime): migrate runtime codes from cli project to yomo (#189)
    Source code(tar.gz)
    Source code(zip)
  • v1.3.1(Jun 7, 2021)

  • v1.3.0(Jun 4, 2021)

  • v1.2.520(May 20, 2021)

    Core Changes

    • feat(workflow): Restructure the connection creation (#169), serverless applications can be deployed anywhere!
    • feat(codec): Support JSON codec (#166), integrating WebSocket with YoMo way much easier!
    • feat(quic): Use 0-RTT in QUIC client (#167)
    Source code(tar.gz)
    Source code(zip)
Owner
YoMo
Realtime IoT & edge computing framework engaging 5G
YoMo
Kubernetes Native Edge Computing Framework (project under CNCF)

KubeEdge KubeEdge is built upon Kubernetes and extends native containerized application orchestration and device management to hosts at the Edge. It c

KubeEdge 5.5k Jan 1, 2023
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 | Core | Flows | Streams | Flogo Rules | Go Developers | When to use Flogo |

TIBCO Software Inc. 2.2k Dec 31, 2022
Gatt is a Go package for building Bluetooth Low Energy peripherals

Package gatt provides a Bluetooth Low Energy GATT implementation. Gatt (Generic Attribute Profile) is the protocol used to write BLE peripherals (serv

PayPal 1.1k Dec 31, 2022
Bluetooth Low Energy for Go

Bluetooth Low Energy for Go (based od CC2541) Description Bluetooth Low Enery (HM10) module for Go Installation go get github.com/MarinX/goble Exampl

Marin Basic 46 Dec 12, 2022
MQTTtimer is based mqtt protocol sync timer

MQTTTimer is based mqtt protocol sync timer. You can used ntp sync time protocol in IoT without ntp server. used mqtt protocol sync time is tcp connne

hysios 8 Oct 27, 2021
Dwarka - API gateway offers REST API to manage various device controlled using MQTT protocol

dwarka API gateway offers REST API to manage various device controlled using 'MQ

Krishnaswamy Subramanian 2 Sep 16, 2022
MAVLink protocol implementation for Go

#go-mavlink go impletation of the MAVLink protocol. MAVLink or Micro Air Vehicle Link is a protocol for communicating with small unmanned vehicle. It'

Space Leap 8 Aug 19, 2020
Golang framework for robotics, drones, and the Internet of Things (IoT)

Gobot (https://gobot.io/) is a framework using the Go programming language (https://golang.org/) for robotics, physical computing, and the Internet of

The Hybrid Group 8k Dec 29, 2022
Gobot - Golang framework for robotics, drones, and the Internet of Things (IoT)

Gobot (https://gobot.io/) is a framework using the Go programming language (https://golang.org/) for robotics, physical computing, and the Internet of Things.

The Hybrid Group 8.1k Jan 8, 2023
An edge-native container management system for edge computing

SuperEdge is an open source container management system for edge computing to manage compute resources and container applications in multiple edge regions. These resources and applications, in the current approach, are managed as one single Kubernetes cluster. A native Kubernetes cluster can be easily converted to a SuperEdge cluster.

SuperEdge 881 Dec 29, 2022
Antenna RPC is an RPC protocol for distributed computing, it's based on QUIC and Colfer. its currently an WIP.

aRPC - Antenna Remote Procedure Call Antenna remote procedure call (aRPC) is an RPC protocol focused on distributed processing and HPC. aRPC is implem

Raphael de Carvalho Almeida 3 Jun 16, 2021
A project outputs Bluetooth Low Energy (BLE) sensors data in InfluxDB line protocol formatA project outputs Bluetooth Low Energy (BLE) sensors data in InfluxDB line protocol format

Intro This project outputs Bluetooth Low Energy (BLE) sensors data in InfluxDB line protocol format. It integrates nicely with the Telegraf execd inpu

Marc Venturini 1 Apr 15, 2022
QUIC-PING: A UDP client for sending QUIC PINGs.

QUIC-PING A UDP client for sending "QUIC PING"s. What is a QUIC PING? A QUIC Initial packet with random payload and the version 0xbabababa to force Ve

null 5 Dec 14, 2022
Kubernetes Native Edge Computing Framework (project under CNCF)

KubeEdge KubeEdge is built upon Kubernetes and extends native containerized application orchestration and device management to hosts at the Edge. It c

KubeEdge 5.5k Jan 1, 2023
A simple API for computing diffs of your documents over the time built on a scalable technology stack.

Diffme API WIP - this is an API to compute diffs between documents. It serves as a way to easily create audit logs for documents in your system, think

diffme 11 Sep 8, 2021
a small form factor OpenShift/Kubernetes optimized for edge computing

Microshift Microshift is OpenShift1 Kubernetes in a small form factor and optimized for edge computing. Edge devices deployed out in the field pose ve

Red Hat Emerging Technologies 450 Dec 29, 2022
Microshift is a research project that is exploring how OpenShift1 Kubernetes can be optimized for small form factor and edge computing.

Microshift is a research project that is exploring how OpenShift1 Kubernetes can be optimized for small form factor and edge computing.

Oleg Silkin 0 Nov 1, 2021
Edge Orchestration project is to implement distributed computing between Docker Container enabled devices.

Edge Orchestration Introduction The main purpose of Edge Orchestration project is to implement distributed computing between Docker Container enabled

null 1 Dec 17, 2021
High performance, distributed and low latency publish-subscribe platform.

Emitter: Distributed Publish-Subscribe Platform Emitter is a distributed, scalable and fault-tolerant publish-subscribe platform built with MQTT proto

emitter 3.4k Jan 2, 2023
TalariaDB is a distributed, highly available, and low latency time-series database for Presto

TalariaDB is a distributed, highly available, and low latency time-series database that stores real-time data. It's built on top of Badger DB.

Grab 104 Nov 16, 2022