You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jaeha Choi 893d2322ad
Add more log
3 months ago
desktop_app Bug fix 3 months ago
encryption Unique ID is copied to clipboard 4 months ago
mobile_app Bug fix, add support for multiple files 4 months ago
server Bug fix 3 months ago
test Catch more exceptions 4 months ago
utility Add more log 3 months ago added track 4 months ago




Github repo:


  • Share files between devices easily.
  • Sends the clipboard content. (Only in LAN unless using heartbeat packets. Mobile devices may not support heartbeat too well)
  • End-to-end encryption setting for enhanced security.
  • Optional: Support all functionalities in WAN
  • Optional: Tcp hole punching or uses central server if user desires (for enhancing privacy)

Desired User Experience:

Desired user experience is to have a cross platform application to send files and clipboard data to the user's various devices.

Supported Operating Systems

  • Desktop: Windows/macOS/Linux
  • Mobile: Android/iOS


  • Python: Base language for server / desktop clients
  • Flutter: Used for android/iOS apps
  • PyQt==5.15.4: Used for client GUI
  • pyperclip==1.8.2: Used for clipboard
  • qdarkstyle==3.0.2: Used for dark mode on desktop client
  • xrange: Used for cycling through list widget

GUI Requirements

All Versions

  1. "Clipboard send" button: Clicking the button will broadcast the clipboard content to all devices
  2. "File picker" button: Picks a file. Should support multiple file selection
  3. "Send" button: Sends the file.
  4. "Host" field: A text field to enter host (or unique ID)
  5. "Host" label: A distinctive label that shows current device's host (or unique ID) A. Optional: Support dark mode + button to trigger it


  • A. Optional: Drag and drop support
  • B. Optional: Key binding (aka shortcut) support


  1. "Select Images" button: Picks images and videos by opening the gallery.


Functional Requirements


  1. When the app opens, initial packet will be sent to the server for hole punching
  2. If hole punching is successful (need to decide how to determine successful state), standby and send heartbeat every few min
  3. If hole punching is unsuccessful, notify user that central server is going to be used for transferring data.


  1. Relay Server: Stores basic information about the host including the following:
    - UUID (some portion will be used by the peer to connect)
    - Public IP
    - Port
    - Private IP (could be unnecessary)
  1. Central Server: Transfer data via central server if hole punching was unsuccessful.

Future Work:

  • Fix mobile application
  • Add a connection box for Desktop
  • Fix button layout for Desktop