agregore-browser
agregore-browser copied to clipboard
Experimental Reticulum Support
Hello! I'm a contributor over at the Reticulum Network Stack, and I just stumbled upon this project and I thought the two would work really well together.
Why?
- RNS would enable Agregore users to browse static content over a mesh network of LoRa/HAM packet radio nodes, that are optionally bridged to internet-connected nodes using TCP/UDP, LAN, I2P, and soon :tm: tor. RNS allows for communities to build their own long-standing networking systems without relying on ISP's or even traditional internet infrastructure.
- RNS also has a USENET-style p2p sync library built on top of it, that allows for sneakernet-style communication networks to integrate seamlessly with the previously mentioned packet-radio and internet connections.
- The added side effect of allowing users to host content on I2P/tor nodes.
How?
RNS already has a text-based browser/server, in NomadNet. With this browser we are working on a Gemini-based protocol called Reticulum Resource Transfer Protocol. I haven't dug too deep into this project's codebase, but I believe supporting RNS will require a javascript implementation of this resource transfer API. RNS is entirely written in python right now, but I am currently working on a system to allow outside processes to send and receive data from a Reticulum daemon.
Generally I'm imagining that to use RNS as an experimental feature with Agregore, the user would need to first start a RNS daemon on their machine, before making rrtp://
requests. Maybe a full node.js implementation of RNS could be written down the line.
If there is interest, I'd be happy to start spending some of my free time towards making this happen. Also, if there are any questions about RNS feel free to ask here or over at the RNS Discussion page.
RNS Manual: https://markqvist.github.io/Reticulum/manual/
Quick comment
RNS has no real path forward for creating some kind of decentralizing naming system, and links take the form of a 20-character string that represents a hash of the destination's public key, some sort of local "address book" system might need to be implemented. Additionally, users are able to "hear" announcements of new or existing sites on their mesh network, which is a really cool way of discovering new content, but different from many other network protocols. Not sure how these features would fit in to the UI/UX of a possible Agregore-with-RNS browser.
Thank you for reaching out! This sounds like a super exciting project and I'd love to help get a PR for something like rrtp into Agregore.
The best way to get it in would be to look at how other protocols are implemented in "fetch" interfaces like gemini-fetch or hypercore-fetch.
Do you think you could link me to examples of rrtp URLs and what they can do? If it's close to gemini, it might be straightforward to adapt gemini-fetch.
Regarding addressing, a bunch of other protocols in Agregore like bittorrent and IPFS mostly uses hashes for URL hostnams, so it should fit right in. An address book system might be cool to figure out in an extension (once those are fixed up next month).
Regarding automatically discovering content, it seems like Reticulum has a way to subscribe to and publish data, in which case I've had a lot of luck abstracting that sort of thing behind and EventSource driven API.
If you'd like I'd be down to have a call to talk about details / give you a rundown of how the other protocols have been integrated. Feel free to email me: [email protected]
Awesome that you're interested!
Thanks for the reference fetch implementations, there's a good chance that the fetch implementation will resemble the gemini-fetch interface.
Do you think you could link me to examples of rrtp URLs and what they can do?
Currently the best way to test out requests and responses on reticulum is to use NomadNet. Nomadnet is not currently up to the full RRTP spec (for example the link format is going to change to the RFC url standard), but it's fairly close right now.
One you install it you can follow these steps:
- In your favorite text editor, open up
.reticulum/config
and paste this at the bottom:
[[RNS Testnet Frankfurt]]
type = TCPClientInterface
interface_enabled = yes
outgoing = True
target_host = frankfurt.rns.unsigned.io
target_port = 4965
If you want to obscure your IP address for some added privacy, you can connect via I2P by running i2prouter or i2pd and pasting the following node information instead:
[[RNS Testnet I2P Node A]]
type = I2PInterface
interface_enabled = yes
peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p
- Run NomadNet
- Click anywhere in the "Known Nodes" section to focus the UI, then press
Ctrl+u
to bring up the URL bar. You can directly connect to my test node:99621623b50f046a7fdc:/page/weather.py
. I have it set to announce every 15min so you can just wait if you don't want to type that manually. To view the announcements of all peers and nodes on the testnet you can do the following: - Click on the [Network] tab, then click anywhere in the "Known Nodes" section, then press
Ctrl + l
- Now you are viewing the Announcement stream, you'll start seeing nodes and peers start showing up.
- You can click on announcements to connect to nodes to view their static content.
Another node you can try is 94bcadf1c024735ea796:/page/index.mu
An address book system might be cool to figure out in an extension
Agreed, an address book sounds like a great extension idea.
Are you reachable on Matrix? I just joined the Agregore matrix group.