Agregore

A minimal web browser for the distributed web

Protocols WebExtensions Theming Open Source Download

What is the distributed web?

The current web works by having companies set up servers which host people's websites and data. This means that if a company goes down, or if a person doesn't have access to their server (say they're offline, behind a firewall, or can't afford a decent connection) they can't access it. This also means that not everybody can publish things since it takes a lot of technical know-how to host things that they can have full control over.

The distributed web works by removing central web servers and instead using Peer to Peer connections directly between people to load data. If you want to create something, you serve it directly from your computer, and when somebody downloads their content they will also re-share it. The more people load some data, the more resilient it is and the faster it can be downloaded.

As well, once you've loaded some data over the distributed web, you no longer need to be connected to the internet to access it. In fact, if you have a bunch of people connected to a wifi router in the middle of nowhere, your peer to peer apps will all keep working.

How does it work?

Agregore works by letting you load web pages and content from peer to peer protocols the same way you would load them from a website.

In the same way as you can navigate to http://example.com, you can navigate to hyper://blog.mauve.moe and have it load from anybody on the network that has a copy. This can be done via the different protocols that Agregore supports like BitTorrent, IPFS, and Hypercore Protocol. The web contents are rendered via Chromium using the Electron framework. Electron is useful since it's what allows us to publish Agregore on Windows, MacOS, and Linux.

How do I share stuff?

Agregore not only supports loading data through custom protocols, but it also provides APIs for uploading data into peer to peer protocols. This is done via the browser's fetch() API which is what web developers use to talk to web servers over HTTP or HTTPS.

You can create your own peer to peer website using this simple code snippet:

// Upload your website page
await fetch('hyper://example/index.html', {
  method: 'post',
  body: `<h1>Hello World!</h1>`
})
// Navigate to the website
window.location.href = 'hyper://example/'

For more details and demos, check out the the Videos page, or read the Fetch API Docs.