ARK-Builders / ARK-Builders/Drop-Desktop

Add Support for `iroh-net` to Enable Hole Punching

Open
#4 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Svelte
Stars
15
Forks
2
PR merge metrics
No merged PRs in 30d

Description

Description
I noticed we are currently using `iroh-blobs` alone. `iroh-blobs` implements a simple request-response protocol. From what I've seen in `iroh` examples, the standard approach is to use `iroh-blobs` together with `iroh-net` for networking support. `iroh-net` is built on direct peer-to-peer [QUIC](https://en.wikipedia.org/wiki/QUIC) connections that use relays and hole punching.

Since our implementation does not use [`iroh-net::Endpoint`](https://docs.rs/iroh/latest/iroh/net/struct.Endpoint.html), it does not support hole punching and will only work locally or between two processes with public IP addresses. This is not the end goal for Ark Drop.

[`sendme`](https://github.com/n0-computer/sendme) is a good example that achieves a similar goal to what we have in mind. It uses [iroh-bytes](https://crates.io/crates/iroh-bytes) and [iroh-net](https://crates.io/crates/iroh-net) to send files and directories over the internet.

For this, we should integrate `iroh-net` into Ark Drop to support hole punching. This will allow the application to work even when the devices are behind NATs or firewalls.

## Testing
Not really sure how this will turn out, but we should have some tests to verify that hole punching works. We should add basic GitHub CI workflows that run with each push/PR.

### Potential solutions
- [`docker-nat-simulate`](https://github.com/zzJinux/docker-nat-simulate): handmade scripts for simulating NAT using Docker containers

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing the current iroh-blobs integration and comparing it with sendme's use of iroh-net and iroh-bytes. Define tests that verify hole punching through NATs or firewalls, using docker-nat-simulate as a possible test environment, and add GitHub CI workflows that run on pushes and pull requests. Done means the application supports the intended non-local connections and the tests run in CI.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, github-actions, rust
Domain
ci-cd, infrastructure, networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.