All Projects → weaveworks → Mesh

weaveworks / Mesh

Licence: apache-2.0
A tool for building distributed applications.

Programming Languages

go
31211 projects - #10 most used programming language

Labels

Projects that are alternatives of or similar to Mesh

graph-crdt
Commutative graphs made for real-time, offline-tolerant replication
Stars: ✭ 47 (-93.68%)
Mutual labels:  crdt
sucredb
Distributed KV database with causality tracking
Stars: ✭ 51 (-93.15%)
Mutual labels:  crdt
Berty
Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network
Stars: ✭ 5,101 (+585.62%)
Mutual labels:  crdt
c-crdtlib
The Concordant Conflict-Free Replicated Datatypes (CRDT) library.
Stars: ✭ 21 (-97.18%)
Mutual labels:  crdt
hyperhyperspace-core
A library to create p2p applications, using the browser as a full peer.
Stars: ✭ 112 (-84.95%)
Mutual labels:  crdt
Fluidframework
Library for building distributed, real-time collaborative web applications
Stars: ✭ 3,592 (+382.8%)
Mutual labels:  crdt
sworm
A user-friendly distributed process registry and process supervisor
Stars: ✭ 20 (-97.31%)
Mutual labels:  crdt
Teletype Crdt
String-wise sequence CRDT powering peer-to-peer collaborative editing in Teletype for Atom.
Stars: ✭ 637 (-14.38%)
Mutual labels:  crdt
credt
CRDT-like data structures for building distributed, offline-first applications
Stars: ✭ 32 (-95.7%)
Mutual labels:  crdt
Delta crdt ex
Use DeltaCrdt to build distributed applications in Elixir
Stars: ✭ 312 (-58.06%)
Mutual labels:  crdt
yorkie-rust-sdk
Yorkie Rust SDK
Stars: ✭ 13 (-98.25%)
Mutual labels:  crdt
mute-structs
MUTE-structs is a Typescript library that provides an implementation of the LogootSplit CRDT algorithm.
Stars: ✭ 14 (-98.12%)
Mutual labels:  crdt
Crjdt
A conflict-free replicated JSON datatype (CRDT) in Scala
Stars: ✭ 271 (-63.58%)
Mutual labels:  crdt
bloomfilter
Bloomfilter written in Golang, includes rotation and RPC
Stars: ✭ 61 (-91.8%)
Mutual labels:  crdt
Peer Pad
📝 Online editor providing collaborative editing in really real-time using CRDTs and IPFS.
Stars: ✭ 564 (-24.19%)
Mutual labels:  crdt
crdt
Dart implementation of Conflict-free Replicated Data Types (CRDTs)
Stars: ✭ 55 (-92.61%)
Mutual labels:  crdt
Ipfs Log
Append-only log CRDT on IPFS
Stars: ✭ 269 (-63.84%)
Mutual labels:  crdt
Orbit Db
Peer-to-Peer Databases for the Decentralized Web
Stars: ✭ 6,381 (+757.66%)
Mutual labels:  crdt
Antidote
A planet scale, highly available, transactional database built on CRDT technology
Stars: ✭ 574 (-22.85%)
Mutual labels:  crdt
Yjs
Shared data types for building collaborative software
Stars: ✭ 5,894 (+692.2%)
Mutual labels:  crdt

mesh GoDoc Circle CI

Mesh is a tool for building distributed applications.

Mesh implements a gossip protocol that provide membership, unicast, and broadcast functionality with eventually-consistent semantics. In CAP terms, it is AP: highly-available and partition-tolerant.

Mesh works in a wide variety of network setups, including thru NAT and firewalls, and across clouds and datacenters. It works in situations where there is only partial connectivity, i.e. data is transparently routed across multiple hops when there is no direct connection between peers. It copes with partitions and partial network failure. It can be easily bootstrapped, typically only requiring knowledge of a single existing peer in the mesh to join. It has built-in shared-secret authentication and encryption. It scales to on the order of 100 peers, and has no dependencies.

Using

Mesh is currently distributed as a Go package. See the API documentation.

We plan to offer Mesh as a standalone service + an easy-to-use API. We will support multiple deployment scenarios, including as a standalone binary, as a container, as an ambassador or sidecar component to an existing container, and as an infrastructure service in popular platforms.

Developing

Mesh builds with the standard Go tooling. You will need to put the repository in Go's expected directory structure; i.e., $GOPATH/src/github.com/weaveworks/mesh.

Building

If necessary, you may fetch the latest version of all of the dependencies into your GOPATH via

go get -d -u -t ./...

Build the code with the usual

go install ./...

Testing

Assuming you've fetched dependencies as above,

go test ./...

Dependencies

Mesh is a library, designed to be imported into a binary package. Vendoring is currently the best way for binary package authors to ensure reliable, reproducible builds. Therefore, we strongly recommend our users use vendoring for all of their dependencies, including Mesh. To avoid compatibility and availability issues, Mesh doesn't vendor its own dependencies, and doesn't recommend use of third-party import proxies.

There are several tools to make vendoring easier, including gb, gvt, glide, and govendor.

Workflow

Mesh follows a typical PR workflow. All contributions should be made as pull requests that satisfy the guidelines, below.

Guidelines

  • All code must abide Go Code Review Comments
  • Names should abide What's in a name
  • Code must build on both Linux and Darwin, via plain go build
  • Code should have appropriate test coverage, invoked via plain go test

In addition, several mechanical checks are enforced. See the lint script for details.

Getting Help

If you have any questions about, feedback for or problems with mesh:

Your feedback is always welcome!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].