Hello from WeGit!

Hi Radicle community,

Recently I came across your project. And by then I realized I’ve been working on something very similar.

I’ve been building distributed Git Hosting Network, but it is a different angle from yours. It’s experimental app which works straight in the browser & p2p network is built on WebRTC. It’s proof of concept and realistically I don’t know where it can lead. But I thought this could be an interesting approach, since it can run on many devices which have browsers, and it is pretty easy to write new applications& additions in JS, which could bring more devs to P2P.

There is an introductionary video on youtube Introducing WeGit — Serverless P2P Github - YouTube . I must note it’s not that distributed per se, yet, since the protocols are naive. It’s more a way to elaborate an idea fttb.

And a few keypoints from the video:

  • Can manage repository. Works with regular git CLI commands i.e. push/pull/clone
  • Has minimal CI/CD for testing & building apps
  • Runs in the browser, so it could work on your computer, phone & may be microwave
  • Doesn’t need server, and can work from single html file
  • Doesn’t require internet connection if used on local network
  • Can run different apps, not only git
  • Easy to develop new p2p apps, it’s all JS
  • Doesn’t require signalling server but can be used with one to automate connection
  • PWA

Thank you!

3 Likes

Hi @welldan97

Nice to meet you and great work!

A few questions:

  • What’s the current trust model and role of the “signalling server”?
  • Also curious on how did you approach the CI/CD component?
  • Is the code already open-source?

Thank you.

2 Likes

Hi @lftherios
Thank you very much, and thank you for the questions.

What’s the current trust model and role of the “signalling server”?

Not sure what do you mean by trust model. Correct me if I got your question wrong.

Basically, the idea goes like this. There are 3 entities: data, apps & network. Once you establish network you can run different apps using it. Data is stored in browser, and I want apps to be sandboxed, so they would be asking for the access to certain data & features & network. This way one can run different apps, and they could use same data. Then let’s say distributed facebook would compete with distributed myspace as apps, not like the one who has the data wins.
Sandboxed sounds strange for webapp, but actually there were a lot of develepompent by browsers lately. I believe it can be achieved via iframes, new windows or service workers.

The network for the time being is not very smart, it’s a full mesh topology. So it’s not ready yet to support huge community, but I hope we could get better protocols, and if apps are abstracted enough from the network implementation, one can evolve & be developed independently from another.

The signaling server needed in WebRTC for finding peers across the network, and if network gets broken/changed it is needed to reestablish the connection. As you can see in the video, one doesn’t even need signalling server to use WeGit. If they send offer/answers manually, i.e. via any messenger, or QR codes. At the same it’s very annoying, so it’s better to have one.
WeGit already support signalling via HTTPS server, and via Firebase, more protocols coming soon™. Free firebase account should cover enough needs for midsize team. Hybrid times call for hybrid measures haha.

Also curious on how did you approach the CI/CD component?

CI/CD is pretty simple, it runs Mocha.js(https://mochajs.org/) for running tests. Building is just a simple script for the time beeing. Would be great to have something like WebPack running in browser. Yeah for now it can be only js apps. For other languages it would be tricky for the nearest time. The should be some magic done with WebAssembly - code compilation to JS.

Is the code already open-source?

Yes, it is GitHub - welldan97/WeGit: Distributed P2P Git Hosting Provider Network . Yeah, that’s on github :\ but soon we’ll get it on Radicle or WeGet, right?

Kind Regards

1 Like

Yeah for now it can be only js apps. For other languages it would be tricky for the nearest time

I just thought that, to make something big enough, we’d need to use Node.js backbones connected for the network anyway, at least for better data perseverance. And it’s already supported, that’s how user pushes from git. But then one can go really hybrid and build apps serverside and share artifacts back via WebRTC. Then again, I see how it’s not really an answer for large-scale protocol, it’s more an answer for closed teams.