MediaLinker-cli
ml shares files and text through a MediaLinker
server. Every share gets a 5-character code that works until it expires.
Install
macOS and Linux:
|
Windows (PowerShell):
powershell -ExecutionPolicy Bypass -c "irm https://github.com/marxnoe/MediaLinker-cli/releases/latest/download/medialinker-cli-installer.ps1 | iex"
With Cargo:
Prebuilt archives for Linux (x86_64, ARM64), macOS (Intel, Apple Silicon) and Windows are on the releases page.
Server
ml talks to https://medialinker.noecore.com by default. To use another MediaLinker server, save it once:
--server <URL> or the ML_SERVER environment variable override the saved server.
Usage
| |
ml get never overwrites an existing file unless you pass --force.
In a terminal, ml send also prints a QR code and a link to the receive page, so a phone can open the
share straight away. --no-qr leaves the QR code out; nothing extra is printed when stderr is not a
terminal, so CODE=$(ml send file) stays clean.
End-to-end encryption
Encryption is off unless you ask for it. With --encrypt (-e), ml encrypts the share locally
with AES-256-GCM and a fresh key before uploading, so the server stores only ciphertext and never
sees the key, the file name or whether it is text. ml send -e prints CODE.KEY instead of the
bare code, and its link and QR code carry the key after the #, which browsers never send.
Shares encrypted on the web page open with ml get, and the other way round. The code alone can't
open an encrypted share.
Shell completions
ml completions <shell> prints a completion script for bash, zsh, fish, powershell or elvish:
Releasing
Releases are built by cargo-dist. Bump version in
Cargo.toml, merge it, then push a matching tag:
&&
The release workflow builds every target, publishes the archives and installers to a GitHub release,
then publishes the crate to crates.io (needs the CARGO_REGISTRY_TOKEN repo secret).
License
MIT, see LICENSE.