a new internet stack; or something like it.
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.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
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 { ... }