If you want to contribute please join us on Slack!
The Nile’s framework
Neilos is an infrastructure that you can use to build safe, modular, decentralized and scalable applications, like Nile.
Neilos offers a safer way to browse the web in which there is no risk of running malicious code on our devices: we are inspired by the concepts of the first World Wide Web, there is no need to run arbitrary code if we have powerful components!
Today the big web monopolies convinced us that we need to pay with commissions or our data in order to buy stuff or make new friends online, we should pay for their infrastructure that is hosting our communication. Neilos uses a decentralized and federated architecture, so we can speak directly to each other, for free!
Neilos doesn’t depends on “complicated” technologies such as the blockchain, if you are a web developer you can easily start writing your first application!
A Neilos application has to describe the following three entities:
- Clients: are the tool that you can use to browse a Neilos application. They can parse data into predefined components and send / receive messages
- Nodes: are the endpoints. They define a set of properties that the clients are able to parse into components; they can also reply to requests. Nodes are like servers in a client/server architecture.
- Instances: one instance groups multiple nodes and orchestrate them so they can communicate together. A Neilos application can have multiple instances creating a federation.
The instance is in the core of each Neilos application. Each time a new node or a new client joins the network the information is propagated by the instance. When a client needs to communicate with a node, the communication occurs in a secure channel. This operation only works if the node is online; if not, the client can store the encrypted message on the instance, it will be delivered by the instance once the node gets online.
A Neilos application can run even if the instance is offline because all the information about nodes and instances are stored on IPFS, clients browse IPFS files in which are contained links to other IPFS files in which are contained more specific information about every entity. Go and take a look at merkle trees!
The communication between nodes, clients and instances is protocol agnostic, it means that in the same network a node can listen requests using a HTTP server and another one using WebSockets. We created a library that handles this for you; so, in order to send a message to a node on HTTP or a node on WebSockets, you use the same API. The communication protocol is inspired by PubSub, entities can subscribe and publish messages to channels.
In the following image you can see an instance publishing a message to a generic channel, from the instance point of view, it is as simple as toAllEntities(“hello!”) but under the hood the message is being listened by entities from different protocols, you can visualize each protocol as every single pipe inside the big pipe that groups them all.