Announcing: Mælstrøm, a Magic Wormhole client

Hello everyone!

There are three Big Unsolved Problems in computing:

  1. Naming Things
  2. Printing
  3. Getting a File From One Computer To The Other.

Of those, the last one is being tackled by a technology called Magic Wormhole.

Wormhole allows secure, encrypted, peer-to-peer, private[1] file transfer from one device to the next. It doesn’t require an account or registering with any kind of service.

You can read about Magic Wormhole here.


I am developing a native client for Sailfish OS:

Mælstrøm

a Magic Wormhole client for Sailfish OS

Based on QML and the upstream Python library, you can now leverage the power of the Wormhole on your Sailfish OS phone.

Supported Features: (at the time of this post)

  • Sending Text messages
  • Sending Files
  • Receiving Text messages
  • Receiving Files
  • Sailfish Share integration
  • QR Code creation and scanning

See Releases for change logs and updates.

Planned Features:

  • Sailfish OS-only mode: only share files between users of Mælstrøm
  • Allow usage of alternative or self-hosted server instances

Watch the Milestones for updates.

Feel free to request more.

Bugs/Issues:

Plenty, probably. Do create some of your own!!

Hacking:

Pull requests of any kind are always welcome.

Especially in the Python space, I am not a Parselmouth and hitting problems all the time with Async IO/Twisted/React, in combination with PyOtherSide.
This results in rather fragile, clueless, clumsy implementation efforts.

Also, if someone has a good way of trimming down the python dependencies while staying harbour-compatible, please come forward!

More information:


  • Packages: will be available in Harbour (Jolla Store) once released.
  • Alpha-grade packages for testing on OBS.
  • Source Code: at Codeberg. Languages used: very bad QML, very bad Javascript, terrible Python

  1. Please see the upstream docs for details on privacy and which services receive which information ↩︎

39 Likes

This post is just to get the message out there and maybe a discussion and contributions started.

The app is in very very buggy Alpha state currently, but I’m working on improving things.

Once ready, this will go to Harbour.

2 Likes

Thank you nephros. This is really great.

Ah, something like croc from Zack Scholz croc | Infinite Digits croc is a cli client for fast peer to peer encrypted direct transfers (or via proxies).

EDIT, sigh. Going to translate from go to c++ :slight_smile:

1 Like

Haven’t heard of that one.

But you can use magic wormhole from CLI, like:
pip install --user magic-wormhole==0.17.0 && wormhole send "Hello World"

There are also various implementations, among them rust, haskell, and go, and of course a couple of desktop and Android/iOS apps.

And then there’s something totally weird: GitHub - meejah/fowl: Forward over Wormhole: streams over magic-wormhole Dilation connections

I had tried magic wormhole, but it’s python dependency hell :slight_smile: I know zack through hardware, and he made croc to be able to do fast copies over whole folders n stuff. It’s nice. Faster than magic wormhole, too. But it is in go.

2 Likes

Yeah - In Maelstrom I currently have to ship ~40MB of python libs.

Do you have a strategy to reduce that, better than this?

Heh, I have a 13year old cookie monster :slight_smile: I don’t think it can be done any better than you’ve already done it :slight_smile:

Since I know croc (and it’s used by a lot of people) I’m looking at using that. There are of course build dependencies, but it can be turned into a very small single file library. the question is how best to build it with cgo … Not sure it’s worth it, BUT, croc can transfer directories which I don’t believe magic wormhole can?

1 Like

Yes and no. The protocol can only do single files, but some clients do a zip or tarball for transferring and transparently pack and unpack it.

Just to clarify, this requires a Magic Wormhole client on both ends, but does NOT require a central server, yes?

Is that an (established) open protocol supported by various softwares?

1 Like

Well, it is Open Source, there are various clientlibraries, and applications developed using it:

How “established” that makes it I’m not sure, but I have seen it recommended in various places as a better alternative to Email, especially PGP/GPG encyption (which many regard as fundamentally and unfixably broken), and to things like Signal.

Erm. Well.

There are two “central” services involved: the “Rendezvouz” or “Mailbox” server, and the “Transit Relay”.
Both are Open Source, and self-hostable. The author of Magic Wormhole currently runs the “default” instances of these two.

The “Rendezvouz” server is required to enable two clients to find each other and exchange “appllication layer” messages. Basically it is used to deal out the Codes which identify an exchange between two clients:

Once two clients have agreed to exchange data (a file), they need to connect to each other. If both have routable IP addressed that can reach each other (e.g. they are in the same LAN, or have valid IPv6 addresses), they establish the connection peer-to-peer.

If not, e.g. because of NAT, or other reasons, they both connect to the “Relay” server, which forwards packages between them:

They can also route their communication via Tor, but I haven’t looked into that.

3 Likes

And so it is with croc, as well. You either default or specify your own. Can also use turn/stun. Or a socks5 proxy. EDIT: and direct via ipv6.

I think socat is still the best answer :slight_smile:

Thanks, that was verbose!

It sounds complex and hasn’t seen all that much activity in the 6 years it was on github. If that is how old that project is.

There are so many solutions to this particular problem…

If you’re asking for opinions, I don’t think I’d be using this unless it allows for simply sending a link to somebody and them not having to install anything.

1 Like

You mean something like the way you share files/directories on nextcloud? Or cryptopad ?

IDK. I just know that the line “just install this app so that I can share a file with you” won’t work on about 100% of my folks.

And since I’ve been self-hosting for a long while now I never run into the problem anyhow. If others want to share a large file with me they have their own methods - usually guggle or onedive.

Ok, shure.

So, I have nextcloud and shared folders and all that. Works great. Just have to make sure I don’t run out of space :slight_smile: I can actually share to a particular folder from SFOS as it is, it’s just not very usable. I would like to be able to have an interface where I select a number of files or directories and share them without copying them anywhere.

But you’re right. Probably not for most people.

1 Like

I might be totally wrong but this looks/feels a lot like Linux Mint’s Warpinator. :grinning_face:

1 Like

That’s only for a local area network. So, not quite.

1 Like

Yes, I know it’s LAN exclusive. I just had that feeling that it could be the same protocol? And if so, maybe it could be Warpinator compatible?

Me daydreaming, nothing else. :wink:

Edit:

I think I have asked before, for a Sailfish Warpinator client. Since I am a dedicated Mint user.

What seems to be the problem? I just built croc directly on device and successfully sent a file to my laptop.