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.
The self-replicating seedbox is a cool idea. Some places offer interest on stable coin deposits. I wonder if there could be a way to set up an account for AI use that would be self-replenishing so long as a budget is maintained.
> 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.
I wish someone would revisit the idea of a single, global, P2P file search mesh like Gnutella/Gnutella2 but using a modern P2P stack (or WebRTC) instead of raw TCP/UDP like the old days.
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.
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.
iroh is different and more than just a vpn, where you use a bunch of tools together, you can do it all in iroh with one identity, the tunnel, the file transfer, the ssh access, and others. Look at tunnet for example https://github.com/tunnetio/Tunnet to get a better idea.
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.
the tl;dr seems to be simply that it wasn't implemented yet
i've been pretty interested in this as well and got this snippet from chatgpt:
`So could Iroh add direct browser-to-native connections without a proxy?
Yes, by adding WebRTC support to the native side as well. Iroh’s own browser roadmap describes that approach and identifies the additional native WebRTC stack as a significant dependency cost. It does not describe a fundamental impossibility.`
i may take a stab at adding this functionality soon
Looks very interesting, I have been building few things on top of iroh past few weeks and I love it, from the ability to run it on some iot all the way to be rf agnostic (almost, can’t use LoRa with iroh due to its datagram limit), and best part, MoQ runs natively on iroh where on wireguard you will need to encrypt twice so more cpu, but i found kernel wireguard performs better at bulk throughput, and layer 3 isn’t by default unless you have TUN like added.
Mind sharing the bit about IOT? I'm also looking for a way to get iroh working on something like esp32 for audio streaming. Was wondering if moq can be used here
I've also been using Iroh lately, it's pretty neat. I use it to create a connection between my Mac and a pi that I shoved in a closet on an isolated network. The pi reads my house's electric and water meters with an rtl sdr device, and the Mac connects to it every 30 minutes or so to grab and record the latest readings. The pi doesn't have a stable ip (or, I didn't set it up with one), so the Mac uses an Iroh ticket to connect to the pi.
It's much overengineered for what it's doing, and there are definitely less complicated ways to just connect to the pi, but half the fun is playing with new tech.
"Because Microsoft hates the world, they will show a "Windows protected your PC" warning when you try.
Because Apple hates the world even more, I can't publish it for iOS."
Gold
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.
The self-replicating seedbox is a cool idea. Some places offer interest on stable coin deposits. I wonder if there could be a way to set up an account for AI use that would be self-replenishing so long as a budget is maintained.
> 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.
I wish someone would revisit the idea of a single, global, P2P file search mesh like Gnutella/Gnutella2 but using a modern P2P stack (or WebRTC) instead of raw TCP/UDP like the old days.
It’s something I’ve thought about a lot recently.
I decided not to build it because I think open, decentralized, and encrypted file sharing with good search is something of a Pandora’s box.
IPFS?
Loosely related list of browser based and CLI tools to send files p2p https://gist.github.com/SMUsamaShah/fd6e275e44009b72f64d0570...
Big list, without much description. Does anyone have any suggestion for something like a private Napster for a friend group?
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).
Keeping the tunnel available between sends is the nice part. Once it's set up with someone, you can just use it.
How do you get 50 contributors on a project with 116 stars that's 3 months old? There are no PR's? Only one issue?
Cool! I'll have to look deeper to see if I could use it as a base for porting https://github.com/akavel/catation to Rust+Iroh! (EDIT: related, do you maybe have plans to merge flipflop with https://github.com/andunieee/my-beloved-rubble ?)
May I ask, was it vibed/LLM-assisted to some extent, or is it purely human-made?
Doesn’t Iroh rely on relays? If so, is it possible to run my own?
Yes, it's even encouraged. You can either pay for the company behind iroh to host one for you or host your own one.
Iroh released something similar awhile back
https://www.iroh.computer/sendme
Ok nice find! Did you try it?
Can you talk a bit about the performance characteristics? What's the max throughput? How does that change with latency and jitter?
cool project. slint looks nice
> filesharing for the meatspace era
serious question: what does this mean lol
I assume individuals have to meet in order to become peers.
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.
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.
iroh is different and more than just a vpn, where you use a bunch of tools together, you can do it all in iroh with one identity, the tunnel, the file transfer, the ssh access, and others. Look at tunnet for example https://github.com/tunnetio/Tunnet to get a better idea.
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.
I also use Syncthing, been using it for many years, it is great
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
What are discussions?
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.
the tl;dr seems to be simply that it wasn't implemented yet
i've been pretty interested in this as well and got this snippet from chatgpt: `So could Iroh add direct browser-to-native connections without a proxy? Yes, by adding WebRTC support to the native side as well. Iroh’s own browser roadmap describes that approach and identifies the additional native WebRTC stack as a significant dependency cost. It does not describe a fundamental impossibility.`
i may take a stab at adding this functionality soon
Looks very interesting, I have been building few things on top of iroh past few weeks and I love it, from the ability to run it on some iot all the way to be rf agnostic (almost, can’t use LoRa with iroh due to its datagram limit), and best part, MoQ runs natively on iroh where on wireguard you will need to encrypt twice so more cpu, but i found kernel wireguard performs better at bulk throughput, and layer 3 isn’t by default unless you have TUN like added.
A list of iroh based tools are also found here https://github.com/n0-computer/awesome-iroh
Mind sharing the bit about IOT? I'm also looking for a way to get iroh working on something like esp32 for audio streaming. Was wondering if moq can be used here
I've also been using Iroh lately, it's pretty neat. I use it to create a connection between my Mac and a pi that I shoved in a closet on an isolated network. The pi reads my house's electric and water meters with an rtl sdr device, and the Mac connects to it every 30 minutes or so to grab and record the latest readings. The pi doesn't have a stable ip (or, I didn't set it up with one), so the Mac uses an Iroh ticket to connect to the pi.
It's much overengineered for what it's doing, and there are definitely less complicated ways to just connect to the pi, but half the fun is playing with new tech.