/qrsync

Utility to copy files over WiFi to/from mobile devices inside a terminal.

Primary LanguageRustMIT LicenseMIT

QrSync

Release Ci Crates.io Docs.rs Crates.io License

Utility to copy files over WiFi to/from mobile devices inside a terminal.

When I built QrSync, it was only meant to send files from a terminal to a mobile device, then I found the amazing qrcp and I took some ideas from it and implemented also the possibility to copy file from the mobile device to the computer running QrSync.

Install

Github Actions releases binaries for various architectures when a new tag is pushed:

  • x84-64 Linux GNU
  • x86-64 Darwin
  • aarch64 Linux GNU
  • armv7 Linux GNU

Alternatively you can install the latest tag directly from crates.io:

❯❯❯ cargo install qrsync

Rust version

QrSync builds against stable Rust >= 1.60.

Platforms support

QrSync has been tested on Linux and MacOSX.

It currently also build against Windows, but it has not being tested. On *nix it uses pnet to auto discover the primary interface and its IP address and bind against it. Pnet have a some complex dependencies to build against Windows (see here for more info), so on this platform QrSync makes the --ip-address command-line option mandatory and pnet is not built at all.

Operational modes

QrSync can run in two modes, depending on command line options:

  • Send mode: this mode is selected when a file is passed to the command line. QrSync will generate a QR code on the terminal and start the HTTP server in send mode. Example:
    ❯❯❯ qrsync my_document.pdf
     INFO  qrsync::http > Send mode enabled for file /home/bigo/my_document.pdf
     INFO  qrsync::http > Scan this QR code with a QR code reader app to open the URL http://192.168.1.11:5566/Q2FyZ28udG9tbA
  • Receive mode: this mode is selected if no file is passed to the command line. QrSync will generate a QR code on the terminal and start the HTTP server in receive mode from the current folder. A specific folder to save received files can be specified with --root-dir command line option. Example:
    ❯❯❯ qrsync
     INFO  qrsync::http > Receive mode enabled inside directory /home/bigo
     INFO  qrsync::http > Scan this QR code with a QR code reader app to open the URL http://192.168.1.11:5566/receive

IPv6 support

QrSync tries to guess which interface to use and which address to bind on the selected interface. In case you want to use IPv6, ensure you have a valid non link-local address and specify --ipv6 command line argument. Remember, the IP address can be always overridden using --ip-address command line argument.

Command line options

USAGE:
    qrsync [FLAGS] [OPTIONS] [filename]

ARGS:
    <filename>    File to be send to the mobile device

FLAGS:
    -d, --debug           Enable QrSync debug
    -h, --help            Prints help information
    -6, --ipv6            Prefer IPv6 over IPv4
    -l, --light-term      Draw QR in a terminal with light background
    -v, --version         Prints version information

OPTIONS:
    -i, --ip-address <ip-address>    IP address to bind the HTTP server to. Default to primary interface
    -p, --port <port>                Port to bind the HTTP server to [default: 5566]
    -r, --root-dir <root-dir>        Root directory to store files in receive mode

Acknowledgement

  • qrcp: I took many ideas from this amazing project and "stole" most of the HTML Bootstrap based UI.
  • axum: A great HTTP framework for Rust, very expandable and simple to use.
  • qr2term: Terminal based QR rendering library.

License

See LICENSE file.