Full-featured BitTorrent client package and utilities

torrent

Join the chat at https://gitter.im/anacrolix/torrent GoDoc CircleCI Astronomer Rating GitHub Release PkgGoDev

This repository implements BitTorrent-related packages and command-line utilities in Go. The emphasis is on use as a library from other projects. It's been used 24/7 in production by downstream services since late 2014. The implementation was specifically created to explore Go's concurrency capabilities, and to include the ability to stream data directly from the BitTorrent network. To this end it supports seeking, readaheads and other features exposing torrents and their files with the various Go idiomatic io package interfaces. This is also demonstrated through torrentfs.

There is support for protocol encryption, DHT, PEX, uTP, and various extensions. There are several data storage backends provided: blob, file, bolt, mmap, and sqlite, to name a few. You can write your own to store data for example on S3, or in a database.

Some noteworthy package dependencies that can be used for other purposes include:

Installation

Install the library package with go get github.com/anacrolix/torrent, or the provided cmds with go get github.com/anacrolix/torrent/cmd/....

Library examples

There are some small examples in the package documentation.

Mentions

Downstream projects

There are several web-frontends and Android clients among the known public projects:

Help

Communication about the project is primarily through Gitter and the issue tracker.

Command packages

Here I'll describe what some of the packages in ./cmd do.

Note that the godo command which is invoked in the following examples builds and executes a Go import path, like go run. It's easier to use this convention than to spell out the install/invoke cycle for every single example.

torrent

Downloads torrents from the command-line. This first example does not use godo.

$ go get github.com/anacrolix/torrent/cmd/torrent
# Now 'torrent' should be in $GOPATH/bin, which should be in $PATH.
$ torrent download 'magnet:?xt=urn:btih:KRWPCX3SJUM4IMM4YF5RPHL6ANPYTQPU'
ubuntu-14.04.2-desktop-amd64.iso [===================================================================>]  99% downloading (1.0 GB/1.0 GB)
2015/04/01 02:08:20 main.go:137: downloaded ALL the torrents
$ md5sum ubuntu-14.04.2-desktop-amd64.iso
1b305d585b1918f297164add46784116  ubuntu-14.04.2-desktop-amd64.iso
$ echo such amaze
wow

torrentfs

torrentfs mounts a FUSE filesystem at -mountDir. The contents are the torrents described by the torrent files and magnet links at -metainfoDir. Data for read requests is fetched only as required from the torrent network, and stored at -downloadDir.

$ mkdir mnt torrents
$ godo github.com/anacrolix/torrent/cmd/torrentfs -mountDir=mnt -metainfoDir=torrents &
$ cd torrents
$ wget http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-desktop-amd64.iso.torrent
$ cd ..
$ ls mnt
ubuntu-14.04.2-desktop-amd64.iso
$ pv mnt/ubuntu-14.04.2-desktop-amd64.iso | md5sum
996MB 0:04:40 [3.55MB/s] [========================================>] 100%
1b305d585b1918f297164add46784116  -

torrent-magnet

Creates a magnet link from a torrent file. Note the extracted trackers, display name, and info hash.

$ godo github.com/anacrolix/torrent/cmd/torrent-magnet < ubuntu-14.04.2-desktop-amd64.iso.torrent
magnet:?xt=urn:btih:546cf15f724d19c4319cc17b179d7e035f89c1f4&dn=ubuntu-14.04.2-desktop-amd64.iso&tr=http%3A%2F%2Ftorrent.ubuntu.com%3A6969%2Fannounce&tr=http%3A%2F%2Fipv6.torrent.ubuntu.com%3A6969%2Fannounce
Owner
Matt Joiner
I'm a functional programming and concurrency enthusiast that got sucked into Go. Please send help.
Matt Joiner
Comments
  • Slow download speed (Using Elementum)

    Slow download speed (Using Elementum)

    Hi,

    I'm using Elementum 0.0.39, have tried the two options of: File Storage and Memory Storage. On both I got very low speed.

    • File Storage (Max download limit = 8000kbs, Connections limit = 150, Init buffer = 30MB) Speed = ~500kbs - 1200kbs Kodi log: https://paste.ubuntu.com/26496607/ Torrent log: https://paste.ubuntu.com/26496608/

    • Memory Storage (Max download limit = 9000kbs, Connections limit = 150, Init buffer = 100MB, Memory size for use = 250Mb) Speed = ~300kbs - 400kbs Kodi log: https://paste.ubuntu.com/26496618/ Torrent log: https://paste.ubuntu.com/26496622/

    Kodi 17.6 Windows 10, 64 bit @elgatito

  • Webtorrent support

    Webtorrent support

    Issuehunt badges

    Does this client by any chance support webtorrent?

    If no, anyone know of a go torrent solution that does?

    thanks!


    IssueHunt Summary

    anacrolix anacrolix has been rewarded.

    Backers (Total: $250.00)

    • steelbrain steelbrain ($50.00)
    • $200.00 have been anonymously funded.

    Submitted pull Requests


    Tips


    IssueHunt has been backed by the following sponsors. Become a sponsor

  • go-libutp build issues on Windows

    go-libutp build issues on Windows

    
    C:\Users\shellus\go\src\github.com\shellus\untitled>go get github.com/anacrolix/torrent
    # github.com/anacrolix/go-libutp
    ..\..\anacrolix\go-libutp\utp.go:12:1: error: unknown type name 'uint64_t'
     uint64_t errorCallback(utp_callback_arguments *);
     ^~~~~~~~
    ..\..\anacrolix\go-libutp\utp.go:13:1: error: unknown type name 'uint64_t'
     uint64_t logCallback(utp_callback_arguments *);
     ^~~~~~~~
    ..\..\anacrolix\go-libutp\utp.go:14:1: error: unknown type name 'uint64_t'
     uint64_t acceptCallback(utp_callback_arguments *);
     ^~~~~~~~
    ..\..\anacrolix\go-libutp\utp.go:15:1: error: unknown type name 'uint64_t'
     uint64_t sendtoCallback(utp_callback_arguments *);
     ^~~~~~~~
    ..\..\anacrolix\go-libutp\utp.go:16:1: error: unknown type name 'uint64_t'
     uint64_t stateChangeCallback(utp_callback_arguments *);
     ^~~~~~~~
    ..\..\anacrolix\go-libutp\utp.go:17:1: error: unknown type name 'uint64_t'
     uint64_t readCallback(utp_callback_arguments *);
     ^~~~~~~~
    
    C:\Users\shellus\go\src\github.com\shellus\untitled>
    
    
    
  • Good peers getting banned after chunks are removed from storage

    Good peers getting banned after chunks are removed from storage

    I have been testing this library using an in-memory lru cache with a small readahead time. One of the issues I have observed is that when chunks get evicted from the cache and the piece completion state changes, if I then seek back to try to re-download those chunks, in a lot of cases the peers end up getting banned, and the download seems to hang for a long time. I see a bunch of messages like this in the logs:

    2020-01-06 00:50:54 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:07 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:10 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:12 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:18 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:19 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:20 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:21 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:22 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:24 client.go:1222: banning ip 5.39.78.105
    2020-01-06 00:51:26 client.go:1222: banning ip 99.242.55.224
    2020-01-06 00:51:28 client.go:1222: banning ip 185.149.90.102
    2020-01-06 00:51:48 client.go:1222: banning ip 195.154.176.126
    2020-01-06 00:52:25 client.go:1222: banning ip 84.94.62.90
    2020-01-06 00:52:27 client.go:1222: banning ip 185.149.90.32
    2020-01-06 00:53:47 client.go:1222: banning ip 2.44.118.238
    2020-01-06 00:54:09 client.go:1222: banning ip 216.244.83.187
    2020-01-06 00:54:41 client.go:1222: banning ip 195.154.225.54
    

    I mentioned this to you over email and your reply you said:

    My theory is that chunks arriving after piece is marked for hashing are added to the dirty list (after it's already cleared in preparation to be hashed). Later when the pieces are evicted from the cache, a piece check fails and those peers that sent late, overlapping chunks are being banned (despite being innocent). If your cache was small enough, and chunks were redundant, and hashes took a while, this would occur quite a lot. I think the solution is to disallow writing chunks while piece checks are pending or active.

  • Hashing is very slow at 16-32 MB/s

    Hashing is very slow at 16-32 MB/s

    Hello,

    I want to use the torrent library in a project that will distribute files across a number of heterogenous storage nodes. I wrote a very simple client, the source code is here: https://gist.github.com/ambientsound/bbc30b258bdd253d5fbaa6ce339e2ff1

    Now, after adding a torrent, the client starts hashing. The hash speed is very slow, however, stuck between 16-32 MB/s. The filesystem can handle around 250 MB/s when doing sha1sum from the command line.

    I expect 10x the performance I can see from the torrent library, and thus assume that I'm doing something wrong. Can you provide some help?

  • Torrent not available after a while when using WebTorrent

    Torrent not available after a while when using WebTorrent

    I used torrent download -seed 'magnet:?xt=urn:btih:...' to download and then seed the torrent via WebTorrent.

    If I try to download the torrent (using instant.io or btorrent.xyz) just after download completes, so after

    downloading "...": 288 MB/288 MB, 2197/2197 pieces completed (0 partial)
    

    is printed to the logs, then everything is alright.

    But then, after waiting for a while I see the following in the logs:

    2020-06-23T11:19:49+0300 INFO  tracker_client.go:100: tracker client for "wss://tracker.btorrent.xyz": websocket instance ended: read message error: websocket: close 1006 (abnormal closure): unexpected EOF
    2020-06-23T11:20:32+0300 INFO  tracker_client.go:100: tracker client for "wss://tracker.openwebtorrent.com": websocket instance ended: read message error: websocket: close 1006 (abnormal closure): unexpected EOF
    

    And immediately after those logs, I am unable to download the seeded file via WebTorrent using the websites mentioned above.

  • Redundancy of loading

    Redundancy of loading

    When viewing a movie in an Elementum or in my program (similar to an Elementum https://github.com/YouROK/TorrServe), downloading useful data (BytesReadUsefulData) is ~20 times smaller than BytesReadData Torrent 7.7 GB In stat: BytesRead ~9.57 GB BytesReadData ~9.55 GB BytesReadUsefulData ~564 MB

    Therefore, the download of the network channel is very large

    Sorry for my english, this is not my native language

  • UDP errors on Windows

    UDP errors on Windows

    When running on Windows, after 1-2 minute of downloading, I get non stop error messages that keep scrolling infinitely. When I restart torrent, it works ok, but after 1 minute the same happens again.

    Screenshot

    When I checked the network activity of the torrent process after the error kicks in, I find out that it "loses" all UDP connections and only TCP connections remain active.

    Screenshot

    This might be an error in UDP socket implementation for Windows in the network libraries you're using. Or something else.

  • Why Can't download use custom tracker server?

    Why Can't download use custom tracker server?

    I built a custom tracker server,and create torrent file and create magnt uri,example:

    magnet:?xt=urn:btih:ac3be1065c824d1ff01ecc795dce7b966f5516e2&dn=nginx-1.12.2.tar.gz&tr=http%3A%2F%2F192.168.0.110%3A6969

    so I tried to download it,But I didn't get anything,The code seems to stop at t.Gotinfo ()

    My english is very poor , sorry about that .

  • API cleanup suggestions

    API cleanup suggestions

    as discussed in #218, the API is a little hard to follow and use for certain use cases. The goal here is to discuss and suggest usability improvements to the API. I believe these changes could also be used to help resolve #238, #168 in a clean fashion.

    • remove torrent creation methods from the client. there are just want too many of them. poorly documented, and its unclear which one should be used and when.
    func (cl *Client) AddMagnet(uri string) (T *Torrent, err error) {}
    func (cl *Client) AddTorrentFromFile(filename string) (T *Torrent, err error) {}
    func (cl *Client) AddTorrent(mi *metainfo.MetaInfo) (T *Torrent, err error) {}
    func (cl *Client) AddTorrentInfoHash(infoHash metainfo.Hash) (t *Torrent, new bool) {}
    func (cl *Client) AddTorrentInfoHashWithStorage(infoHash metainfo.Hash, specStorage storage.ClientImpl) (t *Torrent, new bool) {}
    func (cl *Client) AddTorrentSpec(spec *TorrentSpec) (t *Torrent, new bool, err error) {}
    
    • Create new standalone methods for the creation of torrent specifications. these methods have no concept of the client and just know how to create torrent specs.
    type TorrentSpecOption func(*TorrentSpec)
    // TorrentSpecData provide the source data to the torrent, nil can represent no local data.
    type TorrentSpecData(d TorrentImpl) TorrentSpecOption {
      return func(t *TorrentSpec) {
        t.TorrentImpl = d
      }
    }
    
    // New create a torrent from the metainfo.Info and any additional options.
    func New(mi metainfo.Info, options ...TorrentSpecOption) (*TorrentSpec, error) {}
    
    // NewFromData creates a torrent from the raw data the torrent will represent.
    func NewFromData(r io.Reader, options ...TorrentSpecOption) (*TorrentSpec, error) {}
    
    // NewFromFile convience method to create a torrent from a file. see NewFromData for
    // more information.
    func NewFromFile(path string, options ...TorrentSpecOption) (*TorrentSpec, err error) {}
    
    // NewFromMetadata creates a torrent from metadata stored in a file based format.
    func NewFromMetadata(r io.ReadCloser, options ...TorrentSpecOption) (*TorrentSpec, error) {}
    
    // NewFromMagnet create a torrent from a magnet URL.
    func NewFromMagnet(s string, options ...TorrentSpecOption) (*TorrentSpec, error) {}
    
    • Add two new methods to the client that just deal with torrent specs.
    func (cl *Client) AddTorrent(t *TorrentSpec) (new bool, T *Torrent, err error) {}
    func (cl *Client) DropTorrent(t *TorrentSpec) error {}
    
    • possible add a third method to the client to wait for a specific torrent to complete. I'm still undecided on this one, think it might be better on the torrent struct itself.
    func (cl *Client) AwaitCompletion(c context.Context, t *TorrentSpec) (chan error) {}
    

    as an aside, I'm willing to help submit PRs for this work

  • Prioritization issue in torrent

    Prioritization issue in torrent

    @anacrolix, we used torrent in our web server to stream high bitrate videos from memory. There was possibility to prioritize further blocks with setPriority and they were downloaded in such order: (A|N)-Actual/Next, (R)-Readahead, (H)-High Priority and (N)-Normal. With latest builds for example H and R blocks loaded faster then N and even A - and there is video streaming issue because A block must be completed before play cursor. Last version TorrServer loaded blocks as expected was probably 1.34.0 (not sure). Is there a way to implement piece load order in current torrent code? https://github.com/YouROK/TorrServer/blob/d4744e2e4751449ba1551bf2c219a62125233d33/server/torr/storage/torrstor/cache.go#L255-L278 https://github.com/YouROK/TorrServer/blob/d4744e2e4751449ba1551bf2c219a62125233d33/server/torr/storage/torrstor/cache.go#L353-L365 L1 L2

  • No seeding activity

    No seeding activity

    I downloaded two test torrents with exatorrent, which is based on this library, and in both cases I see no activity after the initial download is complete. The torrents are not stopped, I'm allowing all incoming TCP and UDP traffic to port 42069, outgoing traffic to any address/port, and I even tried setting globalseedratio to 1 in the engine config. I did see chunks uploading while the torrents were incomplete so I don't think it is a network issue. Is there anything else I should try?

    I've opened an issue on the exatorrent repo also, the author wanted me to open an issue here also.

  • to change btree lib

    to change btree lib

    change github.com/ajwerner/btree (seems experimental and unpopular) for example to https://github.com/tidwall/btree (also has Set implementation, generics and seems more popular)

    But, be careful - latest version did dropped support of go1.18, can use: github.com/tidwall/[email protected]

  • panic: insufficient write buffer

    panic: insufficient write buffer

    Torrent: here

    panic: insufficient write buffer
    
    goroutine 355603 [running]:
    github.com/anacrolix/torrent.(*Peer).applyRequestState(0xc0141a5200, {{{0xc000f9e000, 0xf8a, 0x1000}, 0xc0141a5200, {0xc001a46000, 0x4ecd8, 0x4ecd8}}, 0x1})
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/requesting.go:269 +0x678
    github.com/anacrolix/torrent.(*Peer).maybeUpdateActualRequestState.func1({0x1e98990?, 0xc01d567860?})
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/requesting.go:259 +0xe5
    runtime/pprof.Do({0x1e98920?, 0xc000112000?}, {{0xc012a1b8c0?, 0x0?, 0x0?}}, 0xc01052caf0)
            /opt/hostedtoolcache/go/1.19.4/arm64/src/runtime/pprof/runtime.go:40 +0xa3
    github.com/anacrolix/torrent.(*Peer).maybeUpdateActualRequestState(0xc0141a5200)
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/requesting.go:254 +0x286
    github.com/anacrolix/torrent.(*PeerConn).fillWriteBuffer(0xc0141a5200)
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/peerconn.go:707 +0x2b
    github.com/anacrolix/torrent.(*PeerConn).initMessageWriter.func1()
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/peer-conn-msg-writer.go:24 +0xa6
    github.com/anacrolix/torrent.(*peerConnMsgWriter).run(0xc0141a5640, 0xdf8475800)
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/peer-conn-msg-writer.go:75 +0xe2
    github.com/anacrolix/torrent.(*PeerConn).messageWriterRunner(0xc014281980?)
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/peer-conn-msg-writer.go:47 +0xd8
    created by github.com/anacrolix/torrent.(*PeerConn).startMessageWriter
            /root/go/pkg/mod/github.com/anacrolix/[email protected]/peer-conn-msg-writer.go:40 +0x5b
    
  • Error getting repository, there is a dependency that has replaced the address

    Error getting repository, there is a dependency that has replaced the address

    go get github.com/anacrolix/torrent@master go: downloading github.com/anacrolix/torrent v1.47.1-0.20221211042123-f75989863cfc panic: internal error: can't find reason for requirement on github.com/willf/[email protected]

    goroutine 1 [running]: cmd/go/internal/modget.(*resolver).updateBuildList.func1({{0xc0003ff6f8?, 0xc000425e90?}, {0xc000028f86?, 0xc0002df020?}}) /usr/local/go/src/cmd/go/internal/modget/get.go:1760 +0x114 cmd/go/internal/modget.(*resolver).updateBuildList(0xc00045a300, {0xb2e5f0, 0xc000028088}, {0x0, 0x0, 0x0}) /usr/local/go/src/cmd/go/internal/modget/get.go:1765 +0x597 cmd/go/internal/modget.(*resolver).resolveQueries(0xc00045a300, {0xb2e5f0, 0xc000028088}, {0xc000014060, 0x1, 0x472445?}) /usr/local/go/src/cmd/go/internal/modget/get.go:1243 +0x1e5 cmd/go/internal/modget.runGet({0xb2e5f0, 0xc000028088}, 0xc0000265b8?, {0xc0000241a0, 0x1, 0x1}) /usr/local/go/src/cmd/go/internal/modget/get.go:314 +0x40b main.invoke(0xe28fa0, {0xc000024190, 0x2, 0x2}) /usr/local/go/src/cmd/go/main.go:225 +0x34e main.main() /usr/local/go/src/cmd/go/main.go:179 +0x7d1


    github.com/willf/bitset has been replaced with https://github.com/bits-and-blooms/bitset

  • Conform to spec for BEP 12 Multitracker Metadata Extension

    Conform to spec for BEP 12 Multitracker Metadata Extension

    https://www.bittorrent.org/beps/bep_0012.html

    This will allow load-balancing between trackers that share peer information, within tiers. It's some of the oldest code in the repo, and could take intelligently handle Client rate-limiting per URL and other things if done correctly.

  • Sounds like that i can't download all of it

    Sounds like that i can't download all of it

    I have got some torrent's file from here:https://archive.org/ But sounds like that all of these torrent can't be downloaded.

    There are some logs below:

    2022-11-06T19:09:57+0800 NIL [torrent 55e5f8c36e7cb3208b164f31d3e0b28b0e687d04 github.com/anacrolix/torrent.(*webseedPeer).requestResultHandler:169]: "alice_in_wonderland_librivox": webseed peer for "/8/items/": Request {0 {49152 16384}} rejected: reading "/8/items/alice_in_wonderland_librivox/AliceInWonderland_librivox.m4b" at "bytes=49152-65535": Get "/8/items/alice_in_wonderland_librivox/AliceInWonderland_librivox.m4b": unsupported protocol scheme ""
    2022-11-06T19:09:57+0800 NIL [github.com/anacrolix/torrent.(*webseedPeer).requestResultHandler:174]: closing webseed peer for "/8/items/"
    2022-11-06T19:09:57+0800 NIL [github.com/anacrolix/torrent.(*webseedPeer).requester.func1:97]: requester 3: error doing webseed request {0 {49152 16384}}: reading "/8/items/alice_in_wonderland_librivox/AliceInWonderland_librivox.m4b" at "bytes=49152-65535": Get "/8/items/alice_in_wonderland_librivox/AliceInWonderland_librivox.m4b": unsupported protocol scheme ""
    

    It shows 'unsupported protocol scheme ""'. I see your internal examples had this case,and this library support webseed. But why all my case from here(https://archive.org/) is failed? BTW, magnet or torrent file from other origins works well.Thanks.

Private BitTorrent tracker generator

Private BitTorrent tracker for everyone PrivTracker allows to share torrent files just with your fiends, nobody else. Unlike public trackers, it share

Jan 6, 2023
This library contains utilities that are useful for building distributed services.

Grafana Dskit This library contains utilities that are useful for building distributed services. Current state This library is still in development. D

Jan 2, 2023
Golang client library for adding support for interacting and monitoring Celery workers, tasks and events.

Celeriac Golang client library for adding support for interacting and monitoring Celery workers and tasks. It provides functionality to place tasks on

Oct 28, 2022
A simple go implementation of json rpc 2.0 client over http

JSON-RPC 2.0 Client for golang A go implementation of an rpc client using json as data format over http. The implementation is based on the JSON-RPC 2

Dec 15, 2022
Flowgraph package for scalable asynchronous system development

flowgraph Getting Started go get -u github.com/vectaport/flowgraph go test Links Wiki Slides from Minneapolis Golang Meetup, May 22nd 2019 Overview F

Dec 22, 2022
The jsonrpc package helps implement of JSON-RPC 2.0

jsonrpc About Simple, Poetic, Pithy. No reflect package. But reflect package is used only when invoke the debug handler. Support GAE/Go Standard Envir

Dec 17, 2022
dht is used by anacrolix/torrent, and is intended for use as a library in other projects both torrent related and otherwise

dht Installation Install the library package with go get github.com/anacrolix/dht, or the provided cmds with go get github.com/anacrolix/dht/cmd/....

Dec 28, 2022
Dec 27, 2022
Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC.
Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC.

Semaphore Chat: Discord Documentation: Github pages Go package documentation: GoDev Take control of your data, connect with anything, and expose it an

Sep 26, 2022
More effective network communication, two-way calling, notify and broadcast supported.

ARPC - More Effective Network Communication Contents ARPC - More Effective Network Communication Contents Features Performance Header Layout Installat

Dec 22, 2022
A feature complete and high performance multi-group Raft library in Go.
A feature complete and high performance multi-group Raft library in Go.

Dragonboat - A Multi-Group Raft library in Go / 中文版 News 2021-01-20 Dragonboat v3.3 has been released, please check CHANGELOG for all changes. 2020-03

Dec 30, 2022
High performance, distributed and low latency publish-subscribe platform.
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

Jan 2, 2023
Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly.

Gleam Gleam is a high performance and efficient distributed execution system, and also simple, generic, flexible and easy to customize. Gleam is built

Jan 1, 2023
Simple, fast and scalable golang rpc library for high load

gorpc Simple, fast and scalable golang RPC library for high load and microservices. Gorpc provides the following features useful for highly loaded pro

Dec 19, 2022
A Go library for master-less peer-to-peer autodiscovery and RPC between HTTP services

sleuth sleuth is a Go library that provides master-less peer-to-peer autodiscovery and RPC between HTTP services that reside on the same network. It w

Dec 28, 2022
Go Open Source, Distributed, Simple and efficient Search Engine

Go Open Source, Distributed, Simple and efficient full text search engine.

Dec 31, 2022
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.

Dapr is a portable, serverless, event-driven runtime that makes it easy for developers to build resilient, stateless and stateful microservices that run on the cloud and edge and embraces the diversity of languages and developer frameworks.

Jan 5, 2023