Skip to content

Repository files navigation

Build Status

Decentstack

UPDATE 2020-08

I have for now managed to answer my questions regarding kappa/multifeed design pattern. What I was fascinated by is known as the "spaghetti-consensus" / "DAG-consensus" which I believe can be built on kappa/multifeed architecture by introducing logic to selectively replicate feeds.

Seeing other projects progressing down this road has made me realize that I hold no interest in working with a global-consensus algorithm.

I have since moved my focus to offline-first technology and will most likely transform decentstack into an entry level starter kit once I have positive results.

If you wish to say hi then send me a PM somehwere or find my dev-log in hyperspace. 👍

/telamohn

P.S. If you are working with hyper-tech and is reading this because you're haunted by the net-spooks, check out hyper-simulator it's a solid artifact that came out of this research.

Welcome!

Decentstack is a framework for building decentralized applications

(primarily those that utilize kappa-architecture )

If you're brave enough, there are some pre-release docs available:

Documentation (Still being written & revised)

The quickstart instructions are not available yet, but I would recommend you to start with the excellent kappa-workshop. It's a great introduction to building decentralized applications and a "must read" prequel to the issues which Decentstack attempts to address.

Overview

Overview Image

Usage

constRAM=require('random-access-memory')constmultifeed=require('multifeed')constkappa=require('kappa-core')const{ Decentstack }=require('decentstack')classMyApplication{mounted(stack){this.storage=multifeed(RAM,stack.key)// TODO: get rid of this workaroundthis.kappa=kappa(null,{multifeed: this.storage})stack.use(this.storage)}// Expose feed lengthsasyncdescribe({ resolve },next){try{constfeed=awaitresolve()next(null,{seq: feed.length})}catch(err){next(err)}}// prevent zero-length feeds from being sharedhold({ meta },next){next(null,!!meta.seq)}// prevent zero-length feeds from being acceptedreject({ meta },next){next(null,!!meta.seq)}}// Setup an exchange-keyconstexchangeKey=Buffer.alloc(32)exchangeKey.write('communication-encryption-key')// Create stack and register our applicationconststack=newDecentstack(exchangeKey,{live: true})stack.use(newMyApplication())// Replicate as usualconststream=stack.replicate(true)stream.pipe(remoteStream).pipe(stream)

License

This project is licensed under GNU AGPLv3

If you have any concerns or conflicts with this license, then please open an issue and state your case.

About

Decent decentralized application framework

Resources

Stars

35 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages