Wormhole-gui is a cross-platform application that lets you easily share files, folders and text between devices.

wormhole-gui

Wormhole-gui is a cross-platform application 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 also compatible with sending to and receiving from other wormhole clients, such as the cli applications from both wormhole-william and magic-wormhole.

Built using the following Go modules:

The initial version was built in less than one day to show how quick and easy it is to use fyne for developing applications.

Sponsoring

Wormhole-gui an open source project that is provided free of charge and that will continue to be the case forever. If you use wormhole-gui and appreciate the work being put into it, please consider supporting the development through GitHub Sponsors. This is in no way a requirement, but would be greatly appreciated and would allow for even more improvements to come further down the road.

Requirements

Wormhole-gui compiles into a statically linked binary with no runtime dependencies. Compiling requires a Go compiler (1.14 or later) and the prerequisites for Fyne.

Downloads

Please visit the release page for downloading the latest releases. Pre-built binaries are available for FreeBSD, Linux, MacOS (x86-64 and arm64) and Windows (x86-64).

Building

Systems with the compile-time requirements satisfied can build the project using go build in the project root:

go build

The project is available in the Fyne Apps Listing and can be installed either using the fyne get command or using the Fyne Apps Installer. It can also be built and installed using GNU Make (installing is currently only supported on Linux and BSD):

make
sudo make install

Contributing

Contributions are strongly appreciated. Everything from creating bug reports to contributing code will help the project a lot, so please feel free to help in any way, shape or form that you feel comfortable doing.

License

  • Wormhole-gui is licensed under GNU GENERAL PUBLIC LICENSE Version 3.
Owner
Jacob
Open source philanthropist, privacy advocate, Linux user and amateur photographer. Computer Science student.
Jacob
Comments
  • program is starting but gui doesnt consistently show up

    program is starting but gui doesnt consistently show up

    Description:

    #21 seems to be fixed - program is starting but gui doesnt consistently show up it just hangs in the background.

    Steps to Reproduce:

    I tried pausing kaspersky and malwarebytes but I didn't see a difference. It did start with the GUI a couple times but I'm not sure what was different.

    Screenshots:

    notice I can't switch to the window in Process Explorer :

    image

    Device (please complete the following information):

    • OS: windows 10
    • Version: 19043.1165
    • Go version:
    • Wormhole-gui version: 2.3.1
  • Windows build fails when using scoop

    Windows build fails when using scoop

    Description:

    Error when I try to build it in Win10:

    $ go build
    # github.com/go-gl/gl/v3.2-core/gl
    gcc.exe: fatal error: cannot execute 'as': CreateProcess: No such file or directory
    compilation terminated.
    # github.com/go-gl/glfw/v3.3/glfw
    gcc.exe: fatal error: cannot execute 'as': CreateProcess: No such file or directory
    compilation terminated.
    

    Are that gl and glfw issues?

    Also, go and gcc installed with scoop

    Device (please complete the following information):

    • OS: Windows
    • Version: 10
    • Go version: 1.17.5
    • Wormhole-gui version: https://github.com/Jacalz/wormhole-gui/commit/6cc27e7e0c225f05d8a2a60ddefc4591614d81f8
  • Windows defender is saying it contains virus or potentially unwanted software

    Windows defender is saying it contains virus or potentially unwanted software

    Description:

    Steps to Reproduce:

    1. This is triggered when extracting the file.

    Screenshots:

    Device (please complete the following information):

    • OS:
    • Version:
    • Go version:
    • Wormhole-gui version:
  • Support changing server endpoints

    Support changing server endpoints

    Is your feature request related to a problem? Please describe:

    Magic Wormhole has a main server and relay server that can be self-hosted. If users have privacy concerns, or just want to host it all themselves, so as not to use the official Magic Wormhole servers run by the project maintainers, they can do so...

    Describe the solution you'd like to see:

    ... but there is no apparent way to connect to custom/self-hosted Magic Wormhole servers in the GUI/settings for this project. Would it be possible to add "Custom Server Address" under Settings >> Wormhole Options?

  • Add ClusterfuzzLite

    Add ClusterfuzzLite

    Signed-off-by: AdamKorcz [email protected]

    Description:

    This PR adds ClusterfuzzLite and a fuzzer for the code validation.

    ClusterfuzzLite will run fuzzers in the CI when PRs are made. It can be extended beyond this PR with code coverage and batch fuzzing: https://google.github.io/clusterfuzzlite/running-clusterfuzzlite/github-actions/

    Checklist:

    • [ ] Tests included.
    • [ ] Lint and formatter run with no errors.
    • [ ] Tests all pass.
  • Make available through Brew

    Make available through Brew

    Is your feature request related to a problem? Please describe:

    Yes, currently the update process must be done manually by checking the GitHub release page.

    Describe the solution you'd like to see:

    Please make wormhole-gui installable with the Brew package manager.

  • Add better design wayfinding, basic explanation of features.

    Add better design wayfinding, basic explanation of features.

    Is your feature request related to a problem? Please describe:

    Congrats! You've probably made the best tool out there to solve the problem "I want to be able to share files with someone without expertish computer skill, and I want to do it directly, cheaply, securely, and without having to sign up for a bunch of random stuff." In my opinion, anyway :grin:. magic-wormhole could be an amazing tool for this, but trying to talk someone through setting up a CLI client and using it is a non-starter, given the "your users aren't experts" qualification.

    I mentioned wayfinding in the title. Designing for good wayfinding in a physical space (like a building) involves using cues, signs, sightlines, etc. to make it easier for people in the space to figure out how to do what they need to do. (Here's a fun podcast on that, if that's your wont.) Obviously some of these ideas extend just fine to UIs. So I'm going to tell a little story about trying to send some files with wormhole-gui. Bear in mind that this person has general basic computer literacy and is most of the way through a Master's degree--already probably above the mean when it comes to their ability to figure this all out.

    So, say I'm on the phone with someone (in reality, we were sitting in the same room, but I'm asking questions like I would a user talking to another user over the phone) and we need to move some files around. I say "hey, get a Magic Wormhole client, I'll send the file that way." So they google "magic wormhole," and get a Github page. There's no "download" button, and the best thing they're going to hear will be something like "go install a Python distribution for your system, set up pip, and pip install the package." Now, that works great for hackers, but it works terribly for users.

    So I say "oh, there's this thing called wormhole-gui, try that" over the phone. This user then googles wormhole gooey and gets a page full of creepy kids youtube videos and other useless stuff. So I say "oh it's gee you eye, and it has like a dash in the name?" and they search that instead and find this Github repo.

    Great. And then they glance at the page and don't actually immediately know what to do. If they scroll down a little on a typical system, they might see the "Download" section in the readme: that's good! What actually happened this time, though, was that they:

    1. tried clicking the "Code" dropdown, which is helpfully bright green, as it's a very important button for developers to be able to press, and got some more confusing text
    2. tried clicking "Go To File" in hopes of finding some downloads there (no dice)
    3. took my advice of "oh, try clicking the 'Releases' thing in the sidebar on the right," which I understand as the usual convention for this sort of thing, which I just knew because I'm a developer.

    Next, they see this big page full of various Stuff, and aren't sure what to do next. I say that they want the file in the list that says it's for "Windows on amd64," which I know because I'm a developer. They download it, click the zip, click the .exe, see a Windows SmartScreen popup, close it, try to run the .exe again, think about it for a second, listen to me saying "yeah, I can vouch, this program is safe," click the little "More info" button, and "Run Anyway." And it's running fine without any other messing-around or install steps! That's great!

    Next, they immediately try to send me some random file. They pick some PDF sitting on their drive, click Send, and... can't figure out what to do next. (The filename is long enough that it doesn't show the wormhole code or progress bar, see #24.) So I say "try sending me a text message instead." They write and attempt to send one easily, and then say "I can't figure out who this was sent to." I say "oh, there's a three-word code." They read it off, and I receive the text a few seconds later. Great.

    Now it's my turn to send something. I pick a file, click send, and then read off my code. They easily find where to type the code in, do so, and then say "It says that was an invalid code." I say "oh, there's dashes between the words, try that." They receive the file, no problem.

    I say "Okay, now go open that file." They click on the file's entry inside wormhole-gui, and just get popups asking if they want to remove the file from the list. I say "okay, where else can you look?" and they check their system's Downloads folder, and could then open the file without issue.

    Describe the solution you'd like to see:

    wormhole-gui is an excellent, descriptive name if you're a hacker. It's a weird one for an end user. A name that's simple, uses plain English, and still gets the message "I can use this to send/get files through 'Magic Wormhole'" across might be better. (I think this is part of why wormhole-william is a pretty good name, actually: I can tell someone to google it and they're not going to get mixed up with anything else.)

    It'd be a good idea to have a basic landing site (with a short name!) that explains what wormhole-gui is ("Quickly and easily send and receive files through the Magic Wormhole"), has immediate visual download buttons for each supported platform, and then other further detail. You could make a simple static site with Github Pages, and give it a snappy name by creating an organization on Github, resulting in a simple URL like wormhole-gui.github.io that would be easy to read off over the phone. Two or three birds with one stone. That sort of page doesn't need to be complicated. (You could add a note under the Windows link with something like "You might get a Windows SmartScreen warning when you try to run wormhole-gui for the first time: this is because wormhole-gui doesn't have massive numbers of users, not because it's unsafe.")

    There should be some further wayfinding inside wormhole-gui itself. For instance, when you're on the Send pane, you might include some text that says "Choose a file, then give the person you want to send it to its wormhole code, alongside a three-column top bar in the list that reads something like Filename | Wormhole code | Progress.

    In the receiving section, there should be some text explaining what it is, e.g. "Ask the person sending you a file for its wormhole code, and type it here." The box for inputting wormhole codes should be able to "correct" spaces into dashes. It may be nice to add something like magic-wormhole's tab-autocomplete: the rest of the suggested word could appear in grey, and you could put a little tab icon to offer to complete the word. (I could break that last part into its own suggestion if you like.) When you click on a file in the list, it should offer to open in/navigate to it.

  • Create a flatpak and publish on flathub

    Create a flatpak and publish on flathub

    Description:

    This is a kind of progress report issue on trying to get wormhole-gui working as a flatpak. I have a manifest below that manages to build it without complaining too much.

    Further work

    • [x] Switch the app-id and all relevant files to "io.github.jacalz.wormhole_gui".
    • [x] Use module vendor to comply with stricter build configs without network support.
    • [x] Make the file system access a bit less strict (more than just the documents folder).
    • [x] Add access to the fyne settings files.
    • [x] Make the notifications work (some kind of dbus issue or might need to use the portal: https://flatpak.github.io/xdg-desktop-portal/portal-docs.html#gdbus-org.freedesktop.portal.Notification).
    • [ ] Work upstream with Fyne on potentially better flatpak support (if needed).

    Manifest

    app-id: io.github.jacalz.rymdport
    runtime: org.freedesktop.Platform
    runtime-version: '21.08'
    sdk: org.freedesktop.Sdk
    sdk-extensions:
        - org.freedesktop.Sdk.Extension.golang
    command: rymdport
    
    finish-args:
        - --share=ipc # Share IPC namespace with the host (necessary for X11).
        - --share=network
        - --socket=x11
        - --device=dri # OpenGL rendering support.
    
        # The below are commented out until there is out of the box support for wayland.
        #- --socket=fallback-x11 # Only create the x11 socket if wayland isn't avaliable.
        #- --socket=wayland
    
        # Needed to support desktop notifications.
        - --talk-name=org.freedesktop.Notifications
    
        # Support only the most common directories.
        - --filesystem=xdg-desktop
        - --filesystem=xdg-documents
        - --filesystem=xdg-download
        - --filesystem=xdg-music
        - --filesystem=xdg-pictures
        - --filesystem=xdg-videos
    
    build-options:
      env:
        - GOBIN=/app/bin
        - GOROOT=/usr/lib/sdk/golang
    
    modules:
        - name: rymdport
          buildsystem: simple
          build-commands:
            - $GOROOT/bin/go build -ldflags="-s -w" -o rymdport
            - install -Dm00755 rymdport $FLATPAK_DEST/bin/rymdport
            - install -Dm00644 internal/assets/icon/icon-512.png $FLATPAK_DEST/share/icons/hicolor/512x512/apps/$FLATPAK_ID.png
            - install -Dm00644 internal/assets/svg/icon.svg $FLATPAK_DEST/share/icons/hicolor/scalable/apps/$FLATPAK_ID.png
            - install -Dm00644 internal/assets/unix/$FLATPAK_ID.desktop $FLATPAK_DEST/share/applications/$FLATPAK_ID.desktop
            - install -Dm00644 internal/assets/unix/$FLATPAK_ID.appdata.xml $FLATPAK_DEST/share/appdata/$FLATPAK_ID.appdata.xml
          sources:
            - type: archive
              url: "https://github.com/Jacalz/rymdport/releases/download/v3.0.1/rymdport-v3.0.1.tar.xz"
              sha256: 7fcc0d7dce44a590796aa446bdb8a6c9365c453dde64e46477f041b6a48b37a7
    
  • [Suggestion] Use

    [Suggestion] Use "copy" button instead of right-click menu for copying the magic code

    Thanks for solving #2 so quickly, great work! I was just trying out v1.3.0 and I like the "Copy to clipboard" and "Save to file" options after receiving a text message a lot. And that reminded me of a minor quibble I had with your app:

    • The magic wormhole code that's displayed after sending is not copyable. Or so I thought :)
    • Looking at the code, I noticed we can use a right-click to copy the code to the clipboard.
    • Because there is no visual indication that the code is copyable this way and because you don't use a right-click menu anywhere else in the app afaik, maybe put a little widget next to the code instead of the right-click menu, like you do here ? Thanks!
  • Cannot resize file picker dialog

    Cannot resize file picker dialog

    The file picker window cannot be resized. I'm aware of https://github.com/Jacalz/rymdport/issues/16, however I think not being able to resize goes against user's expectations. Also being forced to close the picker, resize the main window, then reopen the picker is cumbersome imho.

  • See file extensions in dialog box

    See file extensions in dialog box

    When choosing files to send, it would be nice to be able to see not only the hidden files (for which an option exists), but also the full file names with extensions.

  • Changes for v3.3.0 release

    Changes for v3.3.0 release

    Description:

    Work in progress. This will include user facing changes to pictures and README, which should only be pushed when the new release is about to go live.

    Checklist:

    • [ ] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
  • Press enter in the custom code entry

    Press enter in the custom code entry

    Is your feature request related to a problem? Please describe:

    It would make sense to be able to press enter inside the custom code entry to automatically get the code selected and confirmed. Without this, the user has to press tab twice to focus the button.

  • Option to not extract directory sends

    Option to not extract directory sends

    Is your feature request related to a problem? Please describe:

    We are currently extracting the zip files from directories sends automatically. This works well when we have full file system access but makes it hard if we want to go through mobile file pickers or Flatpak portals (just giving access to the file that the user asks to create).

    This should also allow us to implement the option to ask where to safe files, hence solving #45.

    Describe the solution you'd like to see:

    A setting to not extract files. This should be forced to on (there is currently no other option for directory sends) if the user enables asking where to save files.

  • Adopt new button error and warning importance

    Adopt new button error and warning importance

    Describe the solution you'd like to see:

    Fyne v2.30 will have new importance levels for buttons when released. This could make sense for example in the "Do you want to enable overwriting files?" dialog. Lets open this issues to remember to adopt this when possible. image

  • Make it more clear what happens when a file is downloaded

    Make it more clear what happens when a file is downloaded

    Is your feature request related to a problem? Please describe:

    I got some feedback from a user that it is not clear what has happened when the transfer reaches 100%. The result should be more clear to the user to avoid confusion.

    Describe the solution you'd like to see:

    Some ideas of how this can be improved:

    • Include where the file was saved in the notification for receiving a file.
    • Add an option to ask the user where to save the file.
  • Add keyboard shortcuts for changing tabs

    Add keyboard shortcuts for changing tabs

    Description:

    This adds support for cycling through the tabs using Alt + Tab like in browsers. Blocked until https://github.com/fyne-io/fyne/issues/3087 is fixed.

    Checklist:

    • [ ] Tests included.
    • [x] Lint and formatter run with no errors.
    • [x] Tests all pass.
๐Ÿ‘ Share files at once

?? share Share files at once Getting started Step 1. Install go install Step 2. Set your account Create these environment variables. export CH

Nov 9, 2022
Personal tool used for transfer files between servers.

transfer Personal tool used for transfer files between servers. Usage: transfer [global options] <verb> [verb options] Global options: -h, --

Jan 5, 2022
oDrop, a fast efficient cross-platform file transfer software for server and home environments

oDrop is a cross-platform LAN file transfer software to efficiently transfer files between computers, oDrop is useful in environments where GUI is not available.

Jun 4, 2022
Handshake Query is a cross-platform library to trustlessly resolve and verify Handshake names using a p2p light client

Handshake Query โš ๏ธ Usage of this library is not currently recommended in your application as the API will likely change. Handshake Query is a cross-pl

Dec 22, 2022
proxyd proxies data between TCP, TLS, and unix sockets

proxyd proxyd proxies data between TCP, TLS, and unix sockets TLS termination: Connecting to a remote application's unix socket: +---------+

Nov 9, 2022
๐Ÿ–ฅ Securely transfer and send anything between computers with TUI.
๐Ÿ–ฅ Securely transfer and send anything between computers with TUI.

??๏ธ Securely transfer and send anything between computers with TUI. Installation ways

Dec 21, 2022
Transfer - A simple go application for uploading, downloading and checksumming of files

Transfer This project holds a simple go application for uploading, downloading a

Aug 18, 2022
An experimental project to build a framework for naming and sharing files and other data securely
An experimental project to build a framework for naming and sharing files and other data securely

Upspin Documentation: upspin.io About the project Upspin is an experimental project to build a framework for naming and sharing files and other data s

Oct 20, 2021
Distributed File Store Application Consist of API Server to handle file operations and command line tool to do operations

Filestore Distributed File Store Application Consist of API Server to handle file operations and command line tool to do operations (store named binar

Nov 7, 2021
Simple temporary file upload and transfer web application coding with Go language.

Temp File Transfer Web Application Simple temporary file upload and transfer web application coding with Go language. Explore the Golang ยป Live Demo T

Dec 2, 2022
A web based drag and drop file transfer tool for sending files across the internet.

DnD A file transfer tool. Demo Usage Get go get github.com/0xcaff/dnd or download the latest release (you don't need go to run it) Run dnd Now navig

Dec 16, 2022
Send and receive files securely through Tor.
Send and receive files securely through Tor.

onionbox A basic implementation of OnionShare in Go. Mostly built as a fun project, onionbox is still a WIP so usage is not guaranteed secure, yet. Ke

Nov 22, 2022
wholeaked is a file-sharing tool that allows you to find the responsible person in case of a leakage
wholeaked is a file-sharing tool that allows you to find the responsible person in case of a leakage

wholeaked is a file-sharing tool that allows you to find the responsible person in case of a leakage

Dec 25, 2022
Subspace - File sharing application for golang

subspace File sharing application. Supported Platforms OS 386 amd64 arm6 arm64 L

Jan 29, 2022
Transfer your local .ENV files for another developer

Zip/Unzip local .env file Transfer your local .ENV files for another developer. for Zip: run in root where .env files ./ziper_local_env created "resu

Oct 20, 2021
๐ŸŒง BitTorrent client and library in Go
๐ŸŒง BitTorrent client and library in Go

rain BitTorrent client and library in Go. Running in production at put.io. Features Core protocol Fast extension Magnet links Multiple trackers UDP tr

Jan 5, 2023
JuiceFS is a distributed POSIX file system built on top of Redis and S3.
JuiceFS is a distributed POSIX file system built on top of Redis and S3.

JuiceFS is an open-source POSIX file system built on top of Redis and object storage

Jan 5, 2023
transfer.sh - Easy and fast file sharing from the command-line.

Easy and fast file sharing from the command-line. This code contains the server with everything you need to create your own instance.

Jan 2, 2023
Easy and fast file sharing from the command-line.

Easy and fast file sharing from the command-line. This code contains the server with everything you need to create your own instance.

Jan 2, 2023