Hi everyone. Today, I am very excited to be sharing one of my projects with all of you. Wormhole-gui has been developed entirely on Solus, so I figured that it deserved a little announcement here šŸ™‚

The goal of the project is to make transferring data between devices, fast, secure and easy. It supports sending and receiving of files, directories and text between devices on different networks (and on the same network as well, of course). The application is built entirely in Go, using the Fyne gui-toolkit and, for the backend, it uses the Go implementation (I have never really been a fan of Python) of magic-wormhole, called wormhole-william. The result is a cross-platform application with good performance, that compiles into static binaries without any runtime dependencies.

The project can be found here: https://github.com/Jacalz/wormhole-gui
wormhole-gui

I hope that some of you might find this tool useful as well. I was tired of using multiple USB sticks for transferring files between my computers, but I have now switched to almost exclusively use this tool. Iā€™m eager to hear what you all think about it šŸ™‚

    Jacalz I don't know if it's any different with Fyne in the mix, but your makefile won't churn out static binaries as it's written. You need to set CGO_ENABLED=0 to force go build to not use libc/pthread and use netgo instead.

      DataDrake Thanks, I think I should have worded that differently. Binaries are static and without dependencies for the most part. Fyne needs CGO in order to build (as it relies on GLFW for rendering) but it is statically linked and resulting binaries does not need it installed. All binaries are possible to just install and run on every platform without installing anything extra (does rely on glibc and lower parts of the Linux stack though, but nothing that you shouldnā€™t already have on the system). The only real issue is that release binaries have to link against an older version of glibc (built in a debian-buster cross-compilation docker container). Iā€™m sorry if what I said before isnā€™t technically correct, but it is more than static enough for my needs šŸ™‚

        Well, I have some questions šŸ™‚

        • How is it different from NitroShare? How is the transfer speed over the local network?
        • Is it suited for the large files (>10 GB) transfers over the local network?
        • Is there a some file checking?
        • Flatpak version?
        • Mobile version?

          Jacalz Just wanted to point it out since it's not technically a static binary and some folks will grumble about that. I forgot that fyne needs glfw. You should still be able to rely on netgo with -tags netgo if you want to avoid relying on the C net resolver at least.

          Solarmass I have unfortunately not used nitroshare and canā€™t comment a whole lot on comparisons. One major difference though is that wormhole-gui is actively developed while nitroshare is dead and hasnā€™t seen any release in three years.

          I havenā€™t transferred 10 GB files, but 2GB files have transferred pretty fast in my tests.
          Would you mind sharing what you mean with ā€œfile checkingā€?

          I have started work on a mobile version. It just requires solving some issues around file managing and waiting for some new features and fixes in the upstream Fyne toolkit. I want to have flatpak versions some time soon, but I donā€™t have much knowledge of the package format there unfortunately.

            Jacalz nitroshare is dead and hasnā€™t seen any release in three years.

            I don't use either of these, so I don't have a dog in this fight. That said, however, isn't it possible that nitroshare simply works well, does what it should do, and hasn't needed any updates in three years?

            I've seen the same argument applied to other applications, and I've always wondered about it.

              Jacalz have unfortunately not used nitroshare and canā€™t comment a whole lot on comparisons. One major difference though is that wormhole-gui is actively developed while nitroshare is dead and hasnā€™t seen any release in three years.

              Yeah, that's why I am looking for an alternatives, especially tools that have mobile version. Nitroshare works great for me, except mobile version (updated 2 years ago)

              Would you mind sharing what you mean with ā€œfile checkingā€?

              There was a feature VerifyCopiedFiles in the FreeFileSync

              VerifyCopiedFiles:
              If active, FreeFileSync will binary-compare source and target files after copying and report verification errors. Note that this may double file copy times and is no guarantee that data has not already been corrupted prior to copying. Additionally, corruption may be hidden by deceptively reading valid data from various buffers in the application and hardware stack:

              https://freefilesync.org/manual.php?topic=expert-settings

              I have started work on a mobile version. It just requires solving some issues around file managing and waiting for some new features and fixes in the upstream Fyne toolkit.

              Nice!

                Solarmass Ah, thanks for the link. I donā€™t think wormhole-william does that check, but it probably does some sort of verification to make sure that the correct data has been sent. Youā€™d have to check with that project.

                Iā€™ll try to get mobile support and Flatpak support working as soon as possible. One problem holding up the mobile support currently is the lack of sponsors covering the costs of distribution to mobile app stores. Itā€™s rather expensive unfortunately. Flatpak should be fairly simple though, just a matter of time. That combined with that thereā€™s been a lot to do lately, means that I canā€™t quite give any ETA on these things yet.

                  Jacalz Iā€™ll try to get mobile support and Flatpak support working as soon as possible.

                  I will test them when available.

                    WetGeek That said, however, isn't it possible that nitroshare simply works well, does what it should do, and hasn't needed any updates in three years?

                    Well, there aren't many good alternatives. And 3 years without updates is a bad sign I guess. I won't be surprised if it will be removed from Solus repo someday.

                    Solarmass Great. In the meantime, you should be able to just grab the Linux .tar.gz files on the latest release and install using sudo make install and uninstall using sudo make uninstall. Should roughly be somewhere between a 10-15MB installation šŸ™‚

                    Hey @Jacalz , have you got a package.yml for this somewhere?

                    EDIT: A first draft

                    name       : wormhole-gui
                    version    : 2.2.0
                    release    : 1
                    source     :
                        - https://github.com/Jacalz/wormhole-gui/archive/refs/tags/v2.2.0.tar.gz : 3f81b045dd8804f610395f028a91ea4eab0fb743ae40c4a82421792424a9c7c1
                    license    : GPL-3.0-or-later
                    homepage   : https://github.com/Jacalz/wormhole-gui
                    component  : network.clients
                    summary    : Wormhole-gui is a cross-platform graphical interface for magic-wormhole
                    description: |
                        Wormhole-gui is a cross-platform graphical interface for magic-wormhole that lets you easily share files, folders and text between devices. It uses the Go implementation of magic-wormhole, called wormhole-william, and compiles statically into a single binary. Wormhole-gui is compatible with the cli applications from both wormhole-william and magic-wormhole.
                    networking : yes
                    builddeps  :
                        - pkgconfig(gl)
                        - pkgconfig(x11)
                        - pkgconfig(xcursor)
                        - pkgconfig(xi)
                        - pkgconfig32(xinerama)
                        - pkgconfig(xrandr)
                        - pkgconfig(xxf86vm)
                        - golang
                    build      : |
                        %make
                    install    : |
                        %make_install