Skip to content

nimona/go-nimona

Repository files navigation

nimona

a new internet stack; or something like it.

⚠️ Note: Nimona's architecture is getting an ovehaul based on the findings of the first version and more information should be popping up in the v1/main branch soon.


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.18+ 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 LookupByDigest(hash tilde.Digest) LookupOption { ... }
func LookupByDID(id did.DID) LookupOption { ... }