yet another Raft implementation
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
project
riff-akka/src/main/scala/riff/akka/http
riff-core
riff-fs2/src/main/scala/riff/fs2
riff-json
riff-monix
riff-web/src
src/main/paradox
travis
.gitignore
.sbtopts
.scalafmt.conf
.travis.yml
LICENSE
README.md
build.sbt
build.sc
dockerBuild.sh
makeDoc.sh
package.sh
test.sh
version.sbt

README.md

Riff

Build Status

A Raft implementation written in scala which cleanly separates the Raft logic from any particular transport/framework.

Check out the project documentation here

API docs

Reasoning

The core project only has a dependency on eie (a tiny IO library), and then offers support for akka,monix,fs2,http4s,etc in separate sub-projects.

The outer-most representation clearly takes its inputs (requests, responses and timer messages) and produces addressed messages which can then be used by the sub-projects to send REST requests, put messages on queues, pipe them through a stream, etc.

From the outside, the Raft node takes requests, responses and timer messages as inputs and produces requests/responses as outputs.

Internally, the Raft log or ephemeral node state can also easily implement a reactive streams Publisher so that clients of this library can e.g. observe the log, state transitions, etc.

Building

It is currently built using sbt, though I hope to add Mill (and fury?) support shortly Mill certainly looks really promising!

sbt clean coverage test coverageReport