Interesting project, towards a decentralized Internet!
The heavy lifting is done in this function, pairing. You link your personal devices together, solid idea [0].
This Flipflop project relies on the Iroh library for NAT/Firewall puncturing, external address discovery and overlay networking. Connecting two 5G devices, without a coordinating central server is possible, but very hard. Iroh simply relies on a server which you could self-host. Cool stuff, we stress tested it a while ago and it somewhat worked.
NAT connectivity is unsolved. My university lab conducted one of the bigger puncturing studies a decade ago [1]. Recently, we also bought 40+ or something 4G and 5G SIM cards in Europe for puncturing [2]. My master student traveled Europe by bus to get these local SIM cards. He worked day-and-night to connect these weird symmetric 5G NAT filter boxes and got it working. Simple sync collision and birthday paradox brute force... It all works sometimes, but insufficiently reliable for mass-adoption. You can't build a decentralized social media ecosystem on top. Like Iroh, best to use a central server. So then you have legal liability for your users. Unless an AI agent buys the server fully autonomously using Bitcoin, next years students got that working[3] :-)
We (iroh) don't do birthday paradox hole punching yet. There is some internal debate whether it is worth it.
So if you are in an extremely weird NAT you will fall back to a relay, either our public relays, your own relays rented from us via iroh services, or a self-hosted relay.
But I would argue that a p2p social application that occasionally uses a relay is very much preferable to a centralised app.
The relay is generic internet infrastructure. It just forwards end to end encrypted connections. It can not learn anything about the content.
A relay that is hosted on a non KYC server rented via ZCash would be interesting though if you are super paranoid.
Yeah, we need "generic Internet infrastructure" for linking devices.
By 2030 we hopefully understand the mathematics-of-trust and can link all the billions of citizens together in a single overlay.
> non KYC server rented via ZCash would be interesting though if you are super paranoid.
What will happen if a decentralized Internet emerged and presented an existential threat to existing profit margins? Company lawyer would start to attack you, correct?
>What will happen if a decentralized Internet emerged and presented an existential threat to existing profit margins? Company lawyer would start to attack you, correct?
I think it's very misplaced concern. Commercially-viable internet will not be decentralized because of legal restrictions. If whatever engineering solution will be found to weaken them, governments will step in to curtail it. FWIW any moderately successful decentralization effort is more likely to be attacked from exactly this side: some countries will hate it for uncontrolled information dissemination, others for fiscal reasons.
> You can't build a decentralized social media ecosystem on top. Like Iroh, best to use a central server. So then you have legal liability for your users.
You can, ATProto has the example schematics for how, but it's has a federated rather than distributed architecture, but I don't think "federation" is a hard constraint of the design, more like an implementation detail, and as long as you can do the signalling centrally, to connect the peers, you can do the rest P2P. So sure, legal liability for the connection of peers, but all data transfers would still be directly P2P. AFAIK, Iroh also does "Centralized signaling > P2P data transfers", even when NAT is in the way.
Better, who knows. Seems different in that Flipflop uses P2P connections directly to the peer, alternatively via other available peers (and initial connection might use central signaling server), while taildrop seems to depend on a tailnet, which is typically hosted by Tailscale (unless you run that yourself).
I guess it's a bit like comparing WeTransfer with Airdrop, one tries to use the network they're on already (internet) where the other favors local-local connections.
This actually looks good and uses the established Iroh.
Nice idea with the browser link to share with devices that dont have flipflop on the same LAN. This would be a killer if this would also work via internet!
Not sure if Iroh can run in the browser though.
Nice idea, but for personal sharing between my devices, I have a syncthing folder that's synced between my laptop, phone and media center/NAS, and I've been finding that most of my day to day files have been migrating into it, and I hardly ever use things outside of it.
Iroh networking isn’t available in browser, and presents some cool ways to link things together - i suspect the connection by using iroh is more robust and solid than webrtc, but i’m just guessing.
But iroh is designed bare metal first, we currently support the browser via WASM, but only with relay mode.
We will solve browser eventually, but I think it is a mistake to build peer to peer tech browser first. We think it is better to make it extremely efficient on bare metal first, and then grow into the restricted browser ecosystem where possible.
WebRTC only works in very specific conditions, most of the time you'll need a TURN server anyway, so it's probably better to just use an Iroh relay (you can run your own)
That is strictly true but there are work arounds. For example you can talk to an Iroh relay server from inside of a browser. You can also get round this with extensions. Unfortunately Google whitelist who can do this but it can be done on Safari.
Interesting project, towards a decentralized Internet!
The heavy lifting is done in this function, pairing. You link your personal devices together, solid idea [0].
This Flipflop project relies on the Iroh library for NAT/Firewall puncturing, external address discovery and overlay networking. Connecting two 5G devices, without a coordinating central server is possible, but very hard. Iroh simply relies on a server which you could self-host. Cool stuff, we stress tested it a while ago and it somewhat worked.
NAT connectivity is unsolved. My university lab conducted one of the bigger puncturing studies a decade ago [1]. Recently, we also bought 40+ or something 4G and 5G SIM cards in Europe for puncturing [2]. My master student traveled Europe by bus to get these local SIM cards. He worked day-and-night to connect these weird symmetric 5G NAT filter boxes and got it working. Simple sync collision and birthday paradox brute force... It all works sometimes, but insufficiently reliable for mass-adoption. You can't build a decentralized social media ecosystem on top. Like Iroh, best to use a central server. So then you have legal liability for your users. Unless an AI agent buys the server fully autonomously using Bitcoin, next years students got that working[3] :-)
[0] https://github.com/andunieee/flipflop/blob/62bb498520aacb60e...
[1] UDP NAT and Firewall Puncturing in the Wild, https://inria.hal.science/hal-01597969v1/document
[2] Mass Adoption of NATs: Survey and experiments on carrier-grade NATs, https://arxiv.org/html/2311.04658v2
[3] Self-replicating seedbox servers using programmable money, https://arxiv.org/abs/2609.05431
We (iroh) don't do birthday paradox hole punching yet. There is some internal debate whether it is worth it.
So if you are in an extremely weird NAT you will fall back to a relay, either our public relays, your own relays rented from us via iroh services, or a self-hosted relay.
But I would argue that a p2p social application that occasionally uses a relay is very much preferable to a centralised app.
The relay is generic internet infrastructure. It just forwards end to end encrypted connections. It can not learn anything about the content.
A relay that is hosted on a non KYC server rented via ZCash would be interesting though if you are super paranoid.
Yeah, we need "generic Internet infrastructure" for linking devices.
By 2030 we hopefully understand the mathematics-of-trust and can link all the billions of citizens together in a single overlay.
> non KYC server rented via ZCash would be interesting though if you are super paranoid.
What will happen if a decentralized Internet emerged and presented an existential threat to existing profit margins? Company lawyer would start to attack you, correct?
>What will happen if a decentralized Internet emerged and presented an existential threat to existing profit margins? Company lawyer would start to attack you, correct?
I think it's very misplaced concern. Commercially-viable internet will not be decentralized because of legal restrictions. If whatever engineering solution will be found to weaken them, governments will step in to curtail it. FWIW any moderately successful decentralization effort is more likely to be attacked from exactly this side: some countries will hate it for uncontrolled information dissemination, others for fiscal reasons.
> You can't build a decentralized social media ecosystem on top. Like Iroh, best to use a central server. So then you have legal liability for your users.
You can, ATProto has the example schematics for how, but it's has a federated rather than distributed architecture, but I don't think "federation" is a hard constraint of the design, more like an implementation detail, and as long as you can do the signalling centrally, to connect the peers, you can do the rest P2P. So sure, legal liability for the connection of peers, but all data transfers would still be directly P2P. AFAIK, Iroh also does "Centralized signaling > P2P data transfers", even when NAT is in the way.
Is it better/different than https://tailscale.com/docs/features/taildrop ?
Taildrop looks good, I didn't know about it.
But it's more for when you already use Tailscale, which relies on a central server and someone who "owns" that network.
In Flipflop you don't need anything besides the app, and each two peers form a "network" of their own, with no owner and no management.
It is better in one way: Taildrop supports iOS.
I agree with this
Better, who knows. Seems different in that Flipflop uses P2P connections directly to the peer, alternatively via other available peers (and initial connection might use central signaling server), while taildrop seems to depend on a tailnet, which is typically hosted by Tailscale (unless you run that yourself).
I guess it's a bit like comparing WeTransfer with Airdrop, one tries to use the network they're on already (internet) where the other favors local-local connections.
tailscale does P2P too, it only fails back relays to when it cannot do P2P.
This actually looks good and uses the established Iroh.
Nice idea with the browser link to share with devices that dont have flipflop on the same LAN. This would be a killer if this would also work via internet! Not sure if Iroh can run in the browser though.
This is a pretty good idea, it didn't occur to me, I'll try to implement it.
I never tried Iroh in the browser, but supposedly it works (by always using a relay).
I'm working on something similar, could you please turn on discussions so we can chat directly?
I've turned discussions on, although we could chat here too
Keeping the tunnel available between sends is the nice part. Once it's set up with someone, you can just use it.
Can you talk a bit about the performance characteristics? What's the max throughput? How does that change with latency and jitter?
Nice idea, but for personal sharing between my devices, I have a syncthing folder that's synced between my laptop, phone and media center/NAS, and I've been finding that most of my day to day files have been migrating into it, and I hardly ever use things outside of it.
I have a similar setup. I have my git repos as headless repos in my syncthing folder and use it instead of github.
Why native code?
I would think this could be done completely in the browser using WebRTC?
Iroh networking isn’t available in browser, and presents some cool ways to link things together - i suspect the connection by using iroh is more robust and solid than webrtc, but i’m just guessing.
There are some projects that implement an iroh webrtc custom transport that works in the browser. E.g. https://iroh-webrtc-demo.datei.jetzt/#?addpeer=fd4341f14b4eb...
But iroh is designed bare metal first, we currently support the browser via WASM, but only with relay mode.
We will solve browser eventually, but I think it is a mistake to build peer to peer tech browser first. We think it is better to make it extremely efficient on bare metal first, and then grow into the restricted browser ecosystem where possible.
Browsers are very restricted environments.
WebRTC only works in very specific conditions, most of the time you'll need a TURN server anyway, so it's probably better to just use an Iroh relay (you can run your own)
That is strictly true but there are work arounds. For example you can talk to an Iroh relay server from inside of a browser. You can also get round this with extensions. Unfortunately Google whitelist who can do this but it can be done on Safari.