Skip to content
main
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
cmd
 
 
 
 
 
 
 
 
 
 
pkg
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

nimona

a new internet stack; or something like it.

Actions Status Coverage GitHub last commit GitHub issues GitHub pull requests License Status


WARNING: Nimona is still in its very early stages of design and development and will stay like this for a while.
Documentation is slowly starting to pop up, but everything is still pretty much in flux.


Nimona

Nimona’s main goal is to provide a number of layers/components to help with the challenges presented when dealing with decentralized and peer to peer applications.

Development

Requirements

  • Go 1.16+ with modules enabled
  • Make

Getting Started

git clone https://github.com/nimona/go-nimona.git go-nimona
cd go-nimona
make deps

Process / Workflow

Nimona is developed using Git Common-Flow, which is essentially GitHub Flow with the addition of versioned releases, and optional release branches.

In addition to the Common-Flow spec, contributors are also highly encouraged to sign commits.

Library Architecture

Library Architecture

Network

Package exchange is responsible for a number of things around connections and object exchange, as well as relaying objects to inaccessible peers.

type Network interface {
    Subscribe(
        filters ...EnvelopeFilter,
    ) EnvelopeSubscription
    Send(
        ctx context.Context,
        object object.Object,
        recipient *peer.ConnectionInfo,
    ) error
    Listen(
        ctx context.Context,
        bindAddress string,
    ) (Listener, error)
}

Resolver

Package resolver is responsible for looking up peers on the network that fulfill specific requirements.

type Resolver interface {
    Lookup(
        ctx context.Context,
        opts ...LookupOption,
    ) (<-chan *peer.ConnectionInfo, error)
}

The currently available LookupOption are the following, and can be used on their own or in groups.

func LookupByHash(hash object.CID) LookupOption { ... }
func LookupByContentType(contentType string) LookupOption { ... }
func LookupByIdentity(key crypto.PublicKey) LookupOption { ... }
func LookupByCertificateSigner(key crypto.PublicKey) LookupOption { ... }