Distributed RTC System by pure Go and Flutter

Overview

ION is a distributed real-time communication system, the goal is to chat anydevice, anytime, anywhere!

MITGo Report CardGitHub go.mod Go versionGitHub tag (latest SemVer pre-release)Docker PullsFinancial Contributors on Open Collective GitHub contributorsTwitter Followslack


Distributed Real-time Communication System

  • ION is a secure, self-hosted WebRTC video conferencing SFU (what is an SFU?), that you can host today in the cloud or on-premise.
  • This ION repository contains the backend cluster services, so you also need to deploy the web app or install a flutter client for web, desktop or mobile
  • ION's mission is to deliver world-class tools for creating communication systems, and many people build their projects on top of it:
    • ION Cluster (This project!) is composed of two services biz + ISLB (see glossary) and uses NATS, etcd and redis as databases to administer room membership, manage text chat, verify JWT authentication and assign clients to the proper SFU in a multi-datacenter architecture. ION Cluster also builds its own version of ion-sfu binary, which is lightly adapted to use NatsRPC for signaling (which is how biz and ISLB trade messages internally).
    • ion-sfu (external), which handles WebRTC streams, can be used as a standalone SFU for designing custom chat experiences or implementing your own scaling architecture. ion-sfu is equally capable of forwarding Video, Audio and DataChannel tracks, and can handle arbitrary non-media data transport.
    • ion-avp Audio/Video Processing (WIP) is a sidecar utility for running realtime AV processing jobs, including write-to-disk, ffmpeg and openCV
    • ion-live LIVE node (planned) - A feed streaming gateway for supporting publishing to and from SIP/RTMP/HLS/RTSP endpoints
  • All built with pion and golang, ION is fast and efficient
  • ION is a young project, under active development; some people run ION in production, but it's not for everyone (yet)
  • ION is a community effort and relies on volunteers like you and me!

Roadmap

NOV24 STATUS UPDATE: The ion project has been undergoing a major restructuring for a few months! If you want to build on top of ion today, you should start with ion-sfu! You can still deploy ion:0.4.6 as a ready-to-go conference demonstration.

arch

❤️ Sponsor to help this awsome project go faster! 🚀

(https://opencollective.com/pion-ion)

You can vote for feature if you are a sponsor.

Features: https://github.com/pion/ion/projects/2

Quick-Start (LOCALHOST ONLY)

NOTE: Do not attempt to run this example on a VPS, it only works on localhost. Make sure you read the docs; WebRTC requires some specific network configuration for the SFU service (depending on your host), and the JavaScript GetUserMedia() API can only request camera access on pages with SSL (or localhost). If you are not running on localhost, you MUST configure networking for SFU and enable HTTPS for ion-app-web.

1. Run Ion Backend Services

After cloning the folder, create a docker network (we use this so ion-app-web can communicate securely with the backend):

docker network create ionnet

docker-compose up

3. Expose Ports

Ensure the ports 5000-5200/udp are exposed or forwarded for the SFU service;

4. UI (optional)

Head over to Ion Web App to bring up the front end.

The web app repo also contains examples of exposing the ion biz websocket via reverse proxy with automatic SSL.

For dev and more options see the wiki

Documentation

Architecture

arch

Maintainers

Contributors

Original Author: adwpc cloudwebrtc

Community Hero: Sean-Der

Comments
  • Demo PC/JS doesn't work correctly in FireFox

    Demo PC/JS doesn't work correctly in FireFox

    Linux "Ubuntu 16.04.6 LTS" 75.0 (64-bit) Mozilla Firefox for Ubuntu canonical-1.0

    I create room with more than one members I expect watching all members streams

    In Google Chrome all is Ok. But firefox shows me only LocalStream

    There are some errors in developer's console: Warning: This page uses the non standard property “zoom”. Consider using calc() in the relevant property values, or using “transform” along with “transform-origin: 0 0” Warning: onaddstream is deprecated! Use peerConnection.ontrack instead. Error: InvalidAccessError: Answer tried to set recv when offer did not set send

    I'am not javascript ninja... I can't explain this behavior

    opened by schors 14
  • User authentication

    User authentication

    Summary

    User authentication, internally and/or externally would be great, as meetings are often confidential.

    • [ ] Internal Users
    • [ ] LDAP
    • [ ] Oauth2
    • [ ] Kerberos
    • [ ] JWT
    • [ ] Others?
    enhancement 
    opened by maxnoe 12
  • RTCPeerConnection addTransceiver method not found

    RTCPeerConnection addTransceiver method not found

    Your environment.

    • Version: iOS
    • Browser: Safari
    • Other Information - error: The method 'addTransceiver' isn't defined for the class 'RTCPeerConnection'. (undefined_method at [brodacaster] lib/src/client.dart:216)

    What did you do?

    I just cloned the repo and tried running example on iOS simulator

    What did you expect?

    I expect it to at least build successfully

    What happened?

    It gives me error on building and i am unable to install

    opened by Faiyyaz 11
  • Not found any node for islb

    Not found any node for islb

    DEBUG: Recivied data: {"response":true,"id":2462221,"ok":false,"errorCode":500,"errorReason":"Not found any node for islb."}
    [VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: {code: 500, error: Not found any node for islb.}
    

    I am getting the above error after 2 or 3 days of the server running. To fix this again I have to do docker-compose up.

    opened by rajababu3 9
  • Docker hosting updates

    Docker hosting updates

    Expose Biz websocket under a path on web, not a separate port. Switch to standard web ports for http/https. This simplifies prod hosting as only the two common ports must be exposed for the web service.

    For local dev the 8443 websocket port is routed directly to the biz container. This port should not be exposed in production / external hosting.

    This required some minor client updates. The changes made here will use the host:port combination that the page is currently served on to request the /ws path. A better long term solution would be to provide these as defaults but allow the clients to specify an override url for the biz ws location.

    The web dockerfile was reworked to use multistage builds. I grabbed the code from the previous version, before space reduction, and simply updated to use pre-built docker images for node and caddy server. Overall the image size should be similar, but with the benefit of docker layer caching for node builds.

    Additionally the Caddyfile was update to version 2.0 to support the versions available from dockerhub. The Caddy files have been split into a local and remote version with http port 8080 for localhost. The docker-compose file has both with remote currently commented out. For prod, port 8080 should not be exposed publicly.

    This should fit most cases, but could use some feedback on how people are hosting remote and locally for dev.

    Fixes #75

    opened by jbrady42 8
  • Ion nodes die without logs

    Ion nodes die without logs

    It seems that after an extended period of time sitting idle, the nodes go down. This is the logs i see

    biz_1    | 2020-04-03 02:39:23.533 INF handleSFUBroadCast: method=stream-remove, data=map[mid:f6e16f25-1756-450b-83d0-017030fe68ef#BEPCHN]
    redis_1  | 1:M 03 Apr 2020 12:41:52.438 * 1 changes in 3600 seconds. Saving...
    redis_1  | 1:M 03 Apr 2020 12:41:52.690 * Background saving started by pid 22
    redis_1  | 22:C 03 Apr 2020 12:41:52.857 * DB saved on disk
    redis_1  | 22:C 03 Apr 2020 12:41:52.864 * RDB: 0 MB of memory used by copy-on-write
    redis_1  | 1:M 03 Apr 2020 12:41:52.918 * Background saving terminated with success
    biz_1    | 2020-04-03 12:41:52.932 INF DELETE "/dc1/node/islb-EeZD7mgaPPsR":""
    islb_1   | 2020-04-03 12:41:53 INF DELETE "/dc1/node/islb-EeZD7mgaPPsR":""
    islb_1   | 2020-04-03 12:41:53.011 INF Node [/dc1/node/islb-EeZD7mgaPPsR] Down
    islb_1   | 2020-04-03 12:41:53.027 INF DELETE "/dc1/node/sfu-sAWekEXhrOXb":""
    islb_1   | 2020-04-03 12:41:53.038 INF Node [/dc1/node/sfu-sAWekEXhrOXb] Down
    islb_1   | 2020-04-03 12:41:53.043 INF DELETE "/dc1/node/biz-bV3fgNOqiN7l":""
    islb_1   | 2020-04-03 12:41:53.044 INF Node [/dc1/node/biz-bV3fgNOqiN7l] Down
    islb_1   | 2020-04-03 12:41:53.044 INF removeStreamsByNode: node => sfu-sAWekEXhrOXb
    biz_1    | 2020-04-03 12:41:52.953 INF Node [/dc1/node/islb-EeZD7mgaPPsR] Down
    

    Any ideas why this might be?

    opened by tarrencev 8
  • User pub dies but is still subscribed

    User pub dies but is still subscribed

    I'm seeing an intermittent issue when a users pub seems to die, they stop streaming video/audio, but their subs are still active, so they can see everyone else in the room. When this happens, their stream freezes for everyone else but they can still hear everyone else. It seems to happen more frequently with bad internet (lossy/slow).

    I've seen this issue brought up a bit is slack too.

    bug 
    opened by tarrencev 7
  • Docker updates

    Docker updates

    Re-opening this so we can move hosting forward. I have seen a few users having trouble hosting, and had quite a time getting it set up myself the first time. These changes represent a fairly standard way of web hosting and I think they are very beneficial to new users.

    As I mentioned in the last PR the port change on the clients is intentional in order to use standard web ports (443 in prod) for hosting. If you are having issues with your hosting I would be glad to go through it and work out changes to support it.

    I have been hosting using this docker setup for weeks now and have had zero issue. Please update with what issues you are running into so we can get this merged and out to the community.

    opened by jbrady42 7
  • Add Python script to stress test the Ion web stack

    Add Python script to stress test the Ion web stack

    Description

    Simple Python script that uses Selenium and Chromedriver to generate multiple user sessions and stress test the Ion JS Demo code and underlying Docker containers.

    Useful to diagnose #135.

    opened by barronbud 7
  • Update golang.org/x/crypto commit hash to 75b2880 - reopen

    Update golang.org/x/crypto commit hash to 75b2880 - reopen

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | digest | 279210d -> 75b2880 |


    Renovate configuration

    :date: Schedule: "on the first day of the month" (UTC).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 6
  • sfu panic when a second user joins via the demo app

    sfu panic when a second user joins via the demo app

    Your environment.

    • Version: e936c2a
    • Browser: Chrome 80.0.3987.149 macOS
    • Other Information:
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.GetOrNewRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.GetRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.AddRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF NewRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.872 INF subscribe tracks=map[eI5U01z2tJlCU1ikLuNVeAFZMp18njodeUMJ 066a306c-c5f5-4b93
    -ad09-766dd9383657:[map[id:066a306c-c5f5-4b93-ad09-766dd9383657 pt:111 ssrc:4.273608241e+09 type:audio]] eI5U01z2tJ
    lCU1ikLuNVeAFZMp18njodeUMJ e02b1007-9974-4d61-859b-b4d52a39e2ed:[map[id:e02b1007-9974-4d61-859b-b4d52a39e2ed pt:96 
    ssrc:1.143603203e+09 type:video]]]
    sfu_1    | panic: interface conversion: interface {} is nil, not string
    sfu_1    | 
    sfu_1    | goroutine 32 [running]:
    sfu_1    | github.com/pion/ion/pkg/node/sfu.subscribe(0xc0003b92f0, 0x9, 0xf2a2c2)
    sfu_1    |      /go/src/github.com/pion/ion/pkg/node/sfu/internal.go:205 +0x1630
    sfu_1    | github.com/pion/ion/pkg/node/sfu.handleRequest.func1(0xc0003b92c0, 0xc0003b93e0, 0xc0003b9410)
    sfu_1    |      /go/src/github.com/pion/ion/pkg/node/sfu/internal.go:35 +0x2d8
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).handleRequest(0xc000173e60, 0xc0003b92c0, 0xc0003ccbc0, 0x14, 0xc0003ccbe0, 0x19)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:150 +0x1d4
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).handleMessage(0xc000173e60, 0xc0003ce000, 0x16db, 0x16db, 0xc0003ccbc0, 0x14, 0xc0003ccbe0, 0x19)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:105 +0x156
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).onRequest(0xc000173e60, 0xc0003cac30)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:96 +0x198
    sfu_1    | github.com/nats-io/nats%2ego.(*Conn).waitForMsgs(0xc0000b7b80, 0xc00016a240)
    sfu_1    |      /go/pkg/mod/github.com/nats-io/[email protected]/nats.go:2147 +0x330
    sfu_1    | created by github.com/nats-io/nats%2ego.(*Conn).subscribe
    

    Seems like it's panicking here because the msg didn't contain a codec in the tracks map, line with timestamp 2020-04-07 02:18:30.872 in the stacktrace.

    What did you do?

    1. docker-compose up on a GCP compute engine node.
    2. Accessed ion at https://mydomain:8080 created a room 'test' with a display name.
    3. From another tab (or incognito mode) accessed ion at https://mydomain:8080 joined room 'test' with a different display name.

    What did you expect?

    Seeing both users' video tracks.

    What happened?

    sfu crashed.

    opened by alexferl 6
  • panic: (*logrus.Entry) Error

    panic: (*logrus.Entry) Error

    I am trying to bind '0.0.0.0' with my domain name within ion->config->docker->signal.toml file. once I add my domain name or IP address in host="domain_name" I am getting this errors. ion-signal-1 | panic: (*logrus.Entry) 0xc000384230 ion-signal-1 | ion-signal-1 | goroutine 1 [running]: ion-signal-1 | github.com/sirupsen/logrus.(*Entry).log(0xc000384000, 0x0, 0xc000398240, 0x5a) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/entry.go:259 +0x2ba ion-signal-1 | github.com/sirupsen/logrus.(*Entry).Log(0xc000384000, 0x0, 0xc000217950, 0x1, 0x1) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/entry.go:293 +0x86 ion-signal-1 | github.com/sirupsen/logrus.(*Entry).Logf(0xc000384000, 0xc000000000, 0xc1e51c, 0x18, 0xc000217bb8, 0x1, 0x1) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/entry.go:338 +0xe5 ion-signal-1 | github.com/sirupsen/logrus.(*Logger).Logf(0xc0000f5960, 0x0, 0xc1e51c, 0x18, 0xc000217bb8, 0x1, 0x1) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/logger.go:151 +0x95 ion-signal-1 | github.com/sirupsen/logrus.(*Logger).Panicf(...) ion-signal-1 | /go/pkg/mod/github.com/sirupsen/[email protected]/logger.go:192 ion-signal-1 | github.com/pion/ion-log.Panicf(...) ion-signal-1 | /go/pkg/mod/github.com/pion/[email protected]/log.go:72 ion-signal-1 | github.com/pion/ion/pkg/util.(*WrapperedGRPCWebServer).Serve(0xc000366f00, 0xc000366f00, 0x2) ion-signal-1 | /ion/pkg/util/wrapped.go:177 +0xc8d ion-signal-1 | main.main() ion-signal-1 | /ion/cmd/signal/main.go:124 +0x6e8 ion-signal-1 exited with code 2

    opened by sajib0028 0
  • open does not work on linux

    open does not work on linux

    In the documentation, you use the open command has it was universal, it's not.

    Not a big deal, but just wanted to point that it does not work in Linux base distributions and may confuse beginners.

    opened by kantum 0
  • The 'ontrackevent' event is called regardless of the session

    The 'ontrackevent' event is called regardless of the session

    The 'ontrackevent' event is called regardless of the session. Even if users in another session then for all sessions will be called. Is it not sopposed to be called according to session?

    rtc.ontrackevent

    opened by flyingdove 0
  • ERROR: for redis  Cannot start service redis

    ERROR: for redis Cannot start service redis

    Your environment.

    • Version: I am using docker so I assume it's the recent. I would love to learn how to use different versions!

    What did you do?

    git clone https://github.com/pion/ion
    cd ion
    sudo make docker-start-services
    
    /bin/sh: 1: go: not found
    docker-compose pull
    Pulling nats     ... done
    Pulling redis    ... done
    Pulling islb     ... done
    Pulling app-room ... done
    Pulling signal   ... done
    Pulling sfu      ... done
    docker network create ionnet
    8a6f31d3b875c2a53772b023567d90f66cd2bea939707aa436d867ac553a3fcc
    docker-compose -f docker-compose.yml up
    Starting ion_redis_1 ... error
    Starting ion_nats_1  ...
    
    Starting ion_nats_1  ... done
    
    ERROR: for redis  Cannot start service redis: network e3256c5fed9f7e7017135563e5037117082af044028b722ac8c15a451204a831 not found
    ERROR: Encountered errors while bringing up the project.
    make: *** [Makefile:34: docker-start-services] Error 1
    

    What did you expect?

    not to see an error

    What happened?

    i see error in the terminal:

    ERROR: for redis  Cannot start service redis: network e3256c5fed9f7e7017135563e5037117082af044028b722ac8c15a451204a831 not found
    
    opened by oren 7
  • 使用nginx代理5551端口流量,默认一分钟关闭连接,是否有心跳 api?

    使用nginx代理5551端口流量,默认一分钟关闭连接,是否有心跳 api?

    1、/rtc.RTC/ 这个ws接口是否有心跳接口? 2、/room.RoomSignal/ 这个ws是否有心跳接口?

    demo 使用的是 examples\ion-pubsub

    nginx.config

        location ^~ /room.RoomSignal/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
    
            proxy_redirect off;
            proxy_pass http://172.25.158.83:5551/room.RoomSignal/;      # 转发
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
         }
    
    
        #截取url开头匹配/rtc.RTC/,然后转发到http://172.25.158.83:5551/rtc.RTC/
        location ^~ /rtc.RTC/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
    
            proxy_redirect off;
            proxy_pass http://172.25.158.83:5551/rtc.RTC/;      # 转发
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
         }
    
        location /ion-pubsub/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
           # proxy_pass http://172.16.99.219:8080;
           # proxy_set_header   Host             $host;
           # proxy_set_header   X-Real-IP        $remote_addr;
           # proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
    
            #项目添加到容器,这是容器的路径
            root /usr/local/docker/ion/ion/examples/;
            index index.html;
         }
    
    opened by luo199393 0
Releases(v1.10.0)
  • v1.10.0(Nov 9, 2021)

  • v1.9.2(Nov 2, 2021)

  • v1.9.1(Jun 18, 2021)

    • Adjust the architecture of ion
    • Add signal node for JWT and signaling reverse proxy
    • Move biz node to the /apps directory and separate it into independent business logic nodes
    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Apr 10, 2021)

  • v1.5.3(Dec 5, 2020)

    chore(deps): update ion-sdk-js to v1.5.3 fix: improve a few code feat: add example for signing/validating token feat(biz): improve room managing fix(biz): delete peer when joining failed. fix(islb): check that redis be created feat: islb load balancing fix: async handling messages fix(log): correct logs feat: sfu send message to biz/avp chore(deps): update helm chart etcd to v5.3.0 (#443) … feat: modularize fix(ci): remove travis

    Source code(tar.gz)
    Source code(zip)
  • v1.5.2(Dec 2, 2020)

    feat: peer leave when ice connection failed/closed fix(biz): send peer-list to client when joining fix(biz): watch running islb nodes fix(sfu): improve logs chore(deps): update ion-sdk-js to v1.5.1 chore(docker): rename image ci(workflow): rename docker name, fix docker push denied.

    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(Nov 30, 2020)

    chore(deps): update module pion/ion-avp to v1.5.1 (#438) chore(deps): update module pion/ion-sfu to v1.5.1 (#437) ci(workflow): add lint,build,docker jobs

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Nov 27, 2020)

Owner
Pion
The Open Source, Cross Platform Stack for Real-time Media and Data Communication.
Pion
Instant messaging platform. Backend in Go and Client in Flutter

Seemer Messaging Server Instant messaging server. Backend in pure Go (license GPL 3.0), client-side binding in Flutter as well as gRPC client support

Mohammad Javad Hossieni 3 Nov 28, 2022
A simple WebRTC Signaling server for flutter-webrtc and html5

flutter-webrtc-server A simple WebRTC Signaling server for flutter-webrtc and html5. Online Demo: https://demo.cloudwebrtc.com:8086/ Features Support

wahaha 0 Dec 13, 2021
Pure Go Brotli encoder and decoder

This package is a brotli compressor and decompressor implemented in Go. It was translated from the reference implementation (https://github.com/google

Andy Balholm 447 Dec 28, 2022
🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go./ gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。

English | ???? 中文 ?? Introduction gnet is an event-driven networking framework that is fast and lightweight. It makes direct epoll and kqueue syscalls

Andy Pan 7.2k Jan 2, 2023
Pure-Go library for cross-platform local peer discovery using UDP multicast :woman: :repeat: :woman:

peerdiscovery Pure-go library for cross-platform thread-safe local peer discovery using UDP multicast. I needed to use peer discovery for croc and eve

Zack 577 Jan 8, 2023
A QUIC implementation in pure go

A QUIC implementation in pure Go quic-go is an implementation of the QUIC protocol in Go. It implements the IETF QUIC draft-29 and draft-32. Version c

Lucas Clemente 7.7k Jan 9, 2023
Pure Go implementation of the WebRTC API

Pion WebRTC A pure Go implementation of the WebRTC API New Release Pion WebRTC v3.0.0 has been released! See the release notes to learn about new feat

Pion 10.5k Jan 1, 2023
A Windows named pipe implementation written in pure Go.

npipe Package npipe provides a pure Go wrapper around Windows named pipes. Windows named pipe documentation: http://msdn.microsoft.com/en-us/library/w

Nate Finch 259 Jan 1, 2023
Pure Go implementation of the WebRTC API

Pure Go implementation of the WebRTC API

Pion 10.5k Jan 8, 2023
A pure Unix shell script implementing ACME client protocol

An ACME Shell script: acme.sh An ACME protocol client written purely in Shell (Unix shell) language. Full ACME protocol implementation. Support ACME v

acme.sh 29.8k Jan 2, 2023
Pure-Go HBase client

Golang HBase client This is a pure Go client for HBase. Current status: beta. Supported Versions HBase >= 1.0 Installation go get github.com/tsuna/goh

Benoit Sigoure 665 Jan 3, 2023
Snugger is a light weight but fast network recon scanner that is written from pure golang

Snugger is a light weight but fast network recon scanner that is written from pure golang. with this scann you can ARP your network, port scan hosts and host lists, as well as scan for BSSId

RE43P3R 2 May 19, 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
🌐 (Web 3.0) Pastebin built on IPFS, securely served by Distributed Web and Edge Network.

pastebin-ipfs 简体中文 (IPFS Archivists) Still in development, Pull Requests are welcomed. Pastebin built on IPFS, securely served by Distributed Web and

Mayo/IO 166 Jan 1, 2023
Simple HTTP/HTTPS proxy - designed to be distributed as a self-contained binary that can be dropped in anywhere and run.

Simple Proxy This is a simple HTTP/HTTPS proxy - designed to be distributed as a self-contained binary that can be dropped in anywhere and run. Code b

Jamie Thompson 17 Jan 7, 2023
:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing

Toxiproxy Toxiproxy is a framework for simulating network conditions. It's made specifically to work in testing, CI and development environments, supp

Shopify 8.8k Jan 7, 2023
Squzy - is a high-performance open-source monitoring, incident and alert system written in Golang with Bazel and love.

Squzy - opensource monitoring, incident and alerting system About Squzy - is a high-performance open-source monitoring and alerting system written in

Squzy 468 Dec 12, 2022