Cross-platform application for easy encrypted sharing of 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.
sops is an editor of encrypted files that supports YAML, JSON, ENV, INI and BINARY formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault, age, and PGP
sops is an editor of encrypted files that supports YAML, JSON, ENV, INI and BINARY formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault, age, and PGP

sops is an editor of encrypted files that supports YAML, JSON, ENV, INI and BINARY formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault, age, and PGP. (demo)

Jan 9, 2023
ThanosDecryptor is an project to decrypt files encrypted by Thanos ransomware.

Prometheus-Decryptor Prometheus-Decryptor is an project to decrypt files encrypted by Prometheus ransomware. Command Arguments Usage of ./bin/promethe

Dec 16, 2022
Cross commerce challenge - Cross Commerce Store Challenge With Golang
Cross commerce challenge - Cross Commerce Store Challenge With Golang

Cross Commerce Store Desafio Simples Aplicação ETL Todo o código fonte está cont

Feb 13, 2022
The Bhojpur Wallet is a platform-as-a-service product used as a Wallet Engine based on the Bhojpur.NET Platform for application delivery.

Bhojpur Wallet - Data Processing Engine The Bhojpur Wallet is a platform-as-a-service used as a Service Engine based on the Bhojpur.NET Platform. It l

Sep 26, 2022
Simple, fast and safe cross-platform linear binary stream communication protocol. AES key exchange based on ecc secp256k1

FFAX Protocol 2 dev 简体中文 Welcome to FFAX Protocol v2 Quick start go get github.com/RealFax/FFAX func example() { listener, err := net.Listen("tcp",

Mar 21, 2022
A simple and lightweight encrypted password manager written in Go.
A simple and lightweight encrypted password manager written in Go.

Osiris Password Manager A simple and lightweight encrypted password manager written in Go

Jun 16, 2022
go seof: Simple Encrypted os.File

Encrypted implementation of golang' os.File. It handles WriteAt, Seek, Truncate, etc. Can deal with huge files, random access, etc.

Jan 8, 2023
LightRPC Encrypted reliable components RPC

light LightRPC Multi-protocol encryption RPC Multi-protocol TCP KCP UNIX HTTP MQTT QUIC Encoding JSON MessagePack Protobuf Compress RawData Snappy GZI

Dec 7, 2022
🔐 Share end-to-end encrypted secrets with others via a one-time URL
🔐 Share end-to-end encrypted secrets with others via a one-time URL

If you use this repo, star it ✨ ?? Share end-to-end encrypted secrets with others via a one-time URL Use to securely share API Keys, Signing secrets,

Dec 26, 2022
🔐 Share end-to-end encrypted secrets with others via a one-time URL
🔐 Share end-to-end encrypted secrets with others via a one-time URL

If you use this repo, star it ✨ ?? Share end-to-end encrypted secrets with others via a one-time URL Use to securely share API Keys, Signing secrets,

Dec 26, 2022
ddlcpad, *Doki Doki Literature Club Plus Asset Decrypter*, is a tool to decrypt the encrypted asset file on the Doki Doki Literature Club Plus. Writing in golang.

ddlcpad 简体中文 What is this ddlcpad is short of Doki Doki Literature Club Plus Asset Decrypter You can decrypt the *.cy file from Doki Doki Literature C

Nov 27, 2022
Bare Bones Encrypted File Uploading Service

eggnog Basic file uploading service in Go. Files are XOR encrypted server side, and are only accessible with the key. It's not perfect encryption, but

Nov 15, 2021
minimal implementation of secured encrypted tcp/ip connection without tls / ssl.

go-secure-transport Demo implementation of secured encrypted TCP connection without TLS / SSL. See ./example for server & client using the transport t

Dec 15, 2021
An end-to-end encrypted secret messaging service.

Nimie An End-to-end encrypted Anonymous Messaging Service. In a nutshell This service basically empowers you to have short anonymous conversations wit

Dec 17, 2021
Peer-to-peer encrypted message exchange

Constellation Constellation is a self-managing, peer-to-peer system in which each node: Hosts a number of NaCl (Curve25519) public/private key pairs.

Nov 11, 2022
Arche - Smart Hybrid Workforce Manager: A system that aims to provide companies an easy to use platform for managing company resources by allowing employees to book company spaces and resources.
Arche - Smart Hybrid Workforce Manager: A system that aims to provide companies an easy to use platform for managing company resources by allowing employees to book company spaces and resources.

Description Smart Hybrid Workforce Manager is a system that aims to provide companies an easy to use system for managing company resources by allowing

Dec 8, 2022
Build a circular sector polygon feature spanning the angle between two given bearings, a center point and a radius. A pizza piece! 🍕
Build a circular sector polygon feature spanning the angle between two given bearings, a center point and a radius. A pizza piece! 🍕

sectr ?? Build a circular sector polygon feature (pizza piece ?? ) spanning the angle between two given bearings, a radius and a center point. install

Oct 1, 2022
Ethereum 2.0 node multiplexer between consensus and execution

The Minority Client Run the minority client! ~Danny Ryan and/or Tim Beiko As of writing, Ethereum has multiple client implementations, but Geth / go-e

Dec 23, 2022
Akroma GO client - Akroma is an EVM based application development platform (smart-contracts).

Akroma Akroma is an EVM based application development platform (smart-contracts). Akroma will utilize a Masternode system, and build out an Oracle pla

Dec 11, 2022