All notable changes to ii are documented here. The default Chinese version is CHANGELOG.md.
ii davnow supports HTTP Basic Auth;--usernameand--passwordmust be supplied together.ii davnow supports HTTPS:--tlsgenerates a temporary self-signed certificate, while--domain,--cert, and--keysupport custom DNS names and PEM certificates.
- Added
ii send --r2with separate Cloudflare R2 profiles, andii send --azurefor Azure Block Blob with Shared Key or Container SAS authentication.
ii send --s3now means generic S3-compatible object storage only, and first-run setup collects endpoint, region, bucket, credentials, and path-style mode.- Legacy
provider = "cloudflare-r2"entries under[storage.s3.<name>]are no longer migrated; move them to[storage.r2.<name>]and use--r2. Existing signed object URL tickets remain receivable.
ii sendnow supports mixed file/folder sends,--include/--excludefilters, a global--ratecap, and JSON Lines events with--json.- Added
ii discoverLAN discovery and--bindIPv4/IPv6 listeners forii web,ii dav, andii send --web. - Added a read-write
ii davLAN WebDAV service with desktop-client methods, Range, chunked PUT, and process-local locks.
ii send -tnow runs up to 16 concurrent receive tasks with up to 1,000 FIFO queued connections; one disconnected or timed-out receiver no longer blocks a resumed transfer in another free slot.
ii relaynow starts an HTTP relay without arguments on a random port and supports--portfor a fixed port; it prints reachable IPv4 URLs and other interface URLs.--tlsis now an optional self-signed HTTPS switch,--domainselects the TLS name, and--certplus--keyreplace the generated certificate;--publicand-Hwere removed.ii send --relayandii tunnel -s --relayaccept HTTP or HTTPS URLs;-kis HTTPS-only.
- Web uploads for
ii send ... --webandii webare disabled by default; only--uploadrenders controls and opens the upload endpoint, while--pathwithout it is ignored. - Bare
--tokenforii send ... --web,ii web, andii webrtcnow generates and prints a 32-character path access token;--token <value>and--token=<value>remain supported.
ii send ... --web,ii web, andii webrtcsupport--port <port>to select the HTTP listener port; omitting it keeps random port selection.- Added
ii help [command]for root or command-specific help.
- Fixed the missing
PathBufimport when compiling tests on Unix platforms.
- Split the CLI core into focused command, service, transport, backend, web, ticket, storage, and relay modules while preserving CLI behavior, the GUI facade, ticket encoding, and network protocols.
ii webrtcnow sends text to the selected device; long text is split into UTF-8 byte chunks no larger than 1 MiB, reassembled as one received message, and can be copied without storing chat history.
- Added
ii tunnel -s <target-host:port>andii tunnel -c <ticket>for temporary TCP forwarding over existing Iroh direct or relay paths; tickets carry an access key and any explicit relay TLS trust policy.
- Added HTTP single-range,
HEAD, and common media/PDF/image MIME responses for normalii webfiles, enabling native browser playback and resumable downloads.
- Added
ii webrtc [--token <value>]for temporary LAN browser-to-browser WebRTC file transfer rooms; it prints a QR code and all IPv4 LAN URLs, keeps file bytes out of theiiprocess, and uses no public STUN/TURN.
- Fixed
ii webrtcDataChannel setup between mobile browsers when mDNS host candidates could not be resolved or ICE gathering did not finish; signalling now uses the client's LAN IPv4 and trickles candidates immediately. ii webrtcnow verifies an ICE host candidate before joining; browsers with disabled or blocked WebRTC receive an explicit message instead of only discovering peers without being able to transfer.
- Added webrtc.md covering LAN scope, browser requirements, memory limits, the path token, and unsupported capabilities.
- Added
ii web [directory]for temporary LAN recursive directory browsing, normal file responses, and multi-file uploads; it supports--tokenand--path, and prints a QR code plus all IPv4 LAN URLs in the terminal. - Added
ii send ... --web --path <dir>to write web uploads directly into a chosen directory; relative paths are based on the startup directory, while the default remains./ii/.
- Added multi-file uploads to the
--webpage, streaming files into./ii/under the startup directory and overwriting same-name files. - Added the
ii send ... --web --token <value>path access token; page, download, upload, terminal URLs, and QR codes use the path, while missing or incorrect paths return404.
- Updated the Chinese and English READMEs and command manual for web uploads and
--tokenusage and limits.
- Added
ii send <file-or-folder> --webfor a temporary LAN HTTP sharing page; terminal and page QR codes are included, and folders download as.tararchives. - Print the primary LAN URL and remaining physical and virtual adapter IPv4 URLs, with a responsive phone layout.
- Fixed platform-specific UPX release handling: clear a stale Windows extraction directory, and pass
--force-macoswhen compressing macOS Mach-O binaries.
- The release workflow continues to report UPX-compressed CLI sizes for all targets, without blocking publication on a size limit.
- Restricted the release workflow to the three CLI artifacts; fixed Linux and macOS UPX path handling, which had overwritten UPX's reserved environment variable.
- Added
ii send --ftpandii send --sftpfor FTP and SFTP transfer backends supporting files, stdin, and folders. - Added FTP/SFTP profiles, portable tickets, receiver-side remote-object deletion, and
ii doctorconfiguration checks. - Added the Slint-based
ii-guidesktop client with sending, receiving, S3/WebDAV/TLS relay profile management, a transfer queue, and diagnostics.
- Added Windows GUI executables, Linux AppImages, and macOS
.app.zipartifacts to the release workflow. - Pruned relay, S3, WebDAV, FTP, and logging dependencies while retaining current CLI, configuration, and transfer-protocol compatibility; added UPX integrity checks and a 1 MiB CLI size gate for all release targets.
- Added FTP and SFTP backend guides and synchronized the English README and full command manual.
- Updated release version metadata.
- Added
ii relay --public <https-url>to generate and persist a self-signed HTTPS relay certificate. - Added
ii send --relay <https-url> -kto trust a self-signed relay and carry that policy in the ticket for receivers.
- Made explicit
--relaysends and receives relay-only, without UDP, LAN discovery, or direct paths. - Kept normal system TLS verification for manual TLS relays; first use of a self-signed relay can still be replaced by a man-in-the-middle.
- Updated self-signed relay, manual TLS, port, state-file, and security-boundary guidance.
- Added
ii relay --tls <domain> --cert <path> --key <path>for HTTPS relays using operator-provided PEM certificate and key files. - TLS mode no longer exposes a public HTTP relay; certificate files and the domain are owned by the operator.
- Removed ACME certificate issuance, certificate renewal, and QUIC address discovery while retaining the HTTP-only default relay.
- Made
ii doctorcheck3340/tcpby default.
- Updated manual-certificate HTTPS and relay port guidance.
- Made
ii relaystart an HTTP-only relay on3340/tcpwithout requiring a domain or certificate.
- Made TLS, QUIC address discovery, and metrics opt-in through the relay configuration.
- Removed default DNS peer discovery and unused CLI dependencies to reduce the release dependency tree.
- Updated relay startup, HTTPS/QUIC configuration, and reverse-proxy guidance.
- Fixed the Windows config path unit test so it passes on Linux/macOS runners without relying on backslash path parsing.
- Enabled release LTO, strip,
opt-level = "z", andpanic = "abort"to further reduce binary size. - Made
ii doctorreport metrics as disabled when therelay-metricsfeature is not enabled.
- Fixed S3/WebDAV default profile selection so the old shared
[storage].profilefield no longer crosses backend boundaries. - Kept compatibility migration from the old
[storage.s3.cloudflare]profile while standardizing the default S3 profile ondefault.
- Added an
ii send --s3S3/R2 transfer example to the advanced README usage section.
- Added
ii send --webdavfor sending files, stdin, and folders through a WebDAV transfer backend. - Added
ii send --webdav -pto create portable tickets containing the WebDAV URL, username, and password for receivers without local config. - Added
ii send --webdav -dso the receiver can try deleting the remote WebDAV object after a successful receive. - Added
ii send --profile <name>for selecting an S3 or WebDAV backend profile. - Added WebDAV config checks to
ii doctor.
- Changed Windows Release compression to use the bundled UPX 5.1.0 binary from the repository instead of downloading UPX during GitHub Actions runs.
- Added live
ii recvtransfer progress and speed display for interactive terminals. - Added explicit
ii send -cclipboard copy for the printedii recv ...command. - Added
ii send -o <path>to write the printedii recv ...command to a file. - Added elapsed time and average speed to the final
ii recvcompletion line.
- Added the official
iilogo assets. - Added the logo to the README header.
- Embedded
logo.icointo the Windows executable during builds.
- Changed GitHub Actions Release assets to publish raw binaries instead of zip or tar.gz archives.
- Kept UPX compression for the Windows Release executable.
- Added README screenshots for the temporary coworker file transfer flow.
- Added the
iiCLI withsend,recv,relay,doctor, andversion. - Added file, folder, and stdin transfer support.
- Added default one-shot
ii send; use-tto keep the sender alive for multiple receivers. - Added automatic resume, overwrite, and identical-file skip for file/stdin receives.
- Added relay management through
ii relaywith config generation and port overrides. - Added
ii recv --tracefor connection and transfer timing diagnostics.
- Changed directory receive behavior so a sent folder extracts as one top-level folder, not a duplicated nested folder.
- Changed receive connection strategy to fall back to relay-only after a short direct-address window.
- Fixed incomplete transfer handling by waiting for connection close after payload finish.
- Fixed sender timeout noise after successful receives.
- Removed
ii send --once; one-shot send is now the default. - Added
ii send -tfor the old keep-alive behavior.