:IF: Friends - the messenger you'll never want to move away from


Talking to your Friends directly and without any middlemen. No artificial intermediaries; no overhead; just p2p communication - you and your friends.

The low level p2p library is planned to be released for rust, nodejs and python and can be used for other purposes too. The chat itself is meant to become a Webcomponent that can be included by any app that want’s it.


why this is special

This might not look like a big deal and sound like something totally possible in the classic web too but it’s not.

Sure p2p communication/networks are nothing new. But in the end it always boils down to “how do I exchange my contact info with my peers?!” … and then we’re quickly in server-land again. All messengers out there are dead without their discovery servers being reachable … or at least some exposed hosts enabling the rendezvous info to be exchanged … (feel free to correct me if you think this statement is too bold and you know of anything that doesn’t rely on at least some publicly reachable exposed hosts)

With Autonomi there finally is a place where we can just put our peer connection info so both communication partners can reach out and see if they can connect in intervals/timeslots (yes :smiley: so basically autonomi acts as the exposed host where data can be stored to/retrieved from … but it’s a pretty hard to take down host; especially since the peer info of different communication channels will be spread out the network and hard to locate). This enables a Message exchange service impossible to take down.

current state of development

Together with a couple of other smaller design changes I’ve already modified a encrypted reliable udp hole-punching library to work with all OSes (previously it was only windows and linux - now MacOS too)

next step will be to hole-punch/communicate to multiple peers instead of only having 1:1 communication

once the protocol is tested and proven I plan to translate it to rust and nodejs to have the ability enable live-signaling (in a easy to use manner) in as many applications as possible with a common standard.

to test the protocol and to implement something immediately useful I’ll write a chat-app that loads the peer info from scratchpads from autonomi - every peer just updates their own connection info and the people he shared it with can reach out to him creating a mesh network of live comms.

GitHub - rid-dim/friends <<< the previous version was running with a self written hole-punching logic this is now being replaced by the tested algorithm I’m building upon.


the vision

In terms of Features I’m planning to enable themes as plugins (css loaded from autonomi links) as well as stuff like live-translations, moderation, bot-analysis, sentiment-analysis, fact-checking, … as “message-modifiers” (Javascript Web Components with Standardized Interface) that can be simply imported from autonomi addresses as well … as many as you want … and the smartest/dumbest you want.
Adding additional controls to the chat-window (gifs, custom emojis, weather info, location-sharing, …) can also be implemented as importable WebComponents directly from Autonomi.

So an immutable, unstoppable chat where everyone is free to add his styling/plugins/features and nobody can take it down or a feature away again. Ever.


oh well and the live-communication libraries can ofc be used by other apps too for random purposes (status sharing, push-notifications, live-streaming of temporary data, settling a deal that then get’s written to autonomi as immutable data, …)

… I’ve additional plans with exposed hosts as “gates” that can enable connections even when hole-punching fails (for others too), relayed connections with signed messages for less parallel connections in large chats, … but first things first …

26 Likes

Can’t wait to try this out finally a secure message service with no servers :slight_smile:

9 Likes

I fantasize about using Matrix network or Simplex here… is this possible?

:heart_eyes:

Do you plan group chats? video conferences?

6 Likes

Well - it would require a specialised client that connects to the other protocol on one side and the other side to connect to a chat room when wanting to bridge the two - anybody would be free to write this bridge - but for just offering a gate simply relaying messages without switching the protocol (maybe going through a secure websocket on port 443 to not even get blocked by outgoing filters in company firewalls) would be simpler I’d think

Absolutely - the next task I’m tackling since 1:1 is working

Audio/Video mid to long term probably - it always is more work and the path longer than I expect/hope

11 Likes

Nice one @riddim definitely a top contender for me!!

8 Likes

thanks man!

since it didn’t seem obvious to everybody maybe worth stating here clearly :smiley:

“Yes - this is the birth of a fully decentralized discord that cannot ever be taken down”

just without the nitro stuff because there are no servers/domains/companies/… that need to be paid :smiley: - everyone is on nitro :fire:


(imaginary future scenario)

  • with a jams plugin you can show others which songs you’re currently listening to and others can listen to your song right from your jams-enhanced status that comes with a play button :exploding_head:

  • with a colony plugin you can search + drag&drop things from your data collection in the chat and share it without re-uploading (and possibly failing due to file size limits…)

  • and with the [annoying-gif-to-short-description]-plugin all incoming gifs are being sent to a vision AI that captures the content/meaning of them and converts them to e.g. [hugs] - [laughing] - [explosion] - [gif showing a foot dipping its toe into water]

  • oh and a shared screen will not be shared from 1 server to anybody else (causing a breakdown when too many people are listening/viewing) but it will be shared from the presenter to e.g. 5 others - those stream it further to the next 5 each - from where it gets streamed to the next group. 5-25-125-625-… Adding a super short lag on hops but making screen share scale instead of break :sweat_smile:

…it’s not just “another p2p solution nobody will use” it’s connecting to people live … on steroids

12 Likes

another plugin:

learn a new language easily in your daily conversations.

I really like that one :smiley: I think I need to write that plugin for real now xD - I want to speak spanish!

5 Likes

My request : an SDK for writing plugins :slight_smile:

3 Likes

you can get that - we’ll see how much of a real sdk is really needed - for starters a Template (+ some examples) and a description how it’s done should be sufficient for a JS dev to get started.

we’re talking about simple to use standardized Javascript WebComponents loaded as dynamic imports from Autonomi :slight_smile:

e.g. Message-Modifiers will at first just get the whole Message Element as input argument and return the modified Message (changed content/changed styling/…) maybe some additional metadata like username, timestamp, context-stuff (since it all runs client-side adding context that is not being processed by the plugin isn’t a real issue … but it’s annoying if you want to enable a plugin just for certain context to not be able to do it …)

2 Likes

I love the way you keep rolling loose balls into the penalty box for me :slight_smile:

Any excuse… https://www.youtube.com/watch?v=1A_4t9xsnmg

1 Like

:smiley: you are just way too smart for me my friend :smiley: I’m not sure what you want to tell me here xD

but another day another friends plugin idea :smiley:

(for those of us who aren’t as smart as @Southside but want to say something smart once in a while - just like me :smiley: )

3 Likes

okay - in the light of symmetric NAT seeming to be more a thing than I hoped it was

I’ll move up the message-relaying in the priority list. The changes I made to the 1:1 hole-punching library already include an additional layer that is there to inject relayed messages to reduce the needed connection count.

I happen to have ordered a mikrotik router and plan to start using it somewhere within the next week … so for this development I’ll configure it to use the annoying symmetric NAT I’ve personally not experienced in my tests so far … and will therefore be able to implement and test

to break open difficult to establish NAT communications within a few seconds (and to not need for any symmetric nat to try and break open the connection to another symmetric nat the multi-chat will already in its first version be using message-relaying and gossiping to create the network communications)

and messaging DMs via asymmetric encryption through a multi-user room will be prioritized over 1:1 communication where possible to 1. lower connection count 2. decrease the possibility of 2 symmetric NATs needing to talk to each other … breaking symmetric nat <> symmetric nat open does take up to ~30 minutes … which is really not what we want to do unless we need to …

We’ll see how important additional GATEs will be on top of this. I’ll most certainly have them go through wss (secure websocket communication) on port 443 which is open even in company networks and on airports and stuff where outgoing udp might be blocked …

3 Likes

Simply that you never spoke Spanish to me

Y estoy tan decepcionado :frowning:

1 Like

Yo soy not very good at español :frowning:

Das ist kein Problem

Zwei San Miguel bitte!!!

1 Like

haha - I actually order that every time I see it on the menu xD

Like Efes, its a beer that does better in the sun.
I much prefer it poolside than standing at a bar.

1 Like

another day another friends plugin

2 Likes

Very nice! Can I request a file-sharing feature? Maybe with a separate interface to allow to easy keep track of files that have been shared with you (as opposed to sharing a file link in a message thread and then having to scroll for miles to find it again).

Cheers

4 Likes

hmhmmm - in telegram you have a separate view where you can see shared pictures / links / files in a chat

i assume you’re right and that would indeed be something useful … i used that one pretty often to get to a picture fast :thinking: good idea

5 Likes