All notable changes to ii are documented here. The default Chinese version is CHANGELOG.md.
- Fixed CONNECT half-close cleanup in
ii socks5: after either direction closes, the other gets at most 5 seconds to finish, preventing targets that keep connections alive or do not send FIN from retaining sockets and connection slots.
- Domain
CONNECTrequests inii socks5now concurrently try every DNS address within one 30-second deadline. When full, new TCP connections remain in the listener backlog until capacity is available instead of being immediately closed by the application. ii socks5now explicitly warns on non-loopback listeners that SOCKS5 traffic and RFC 1929 username/password authentication are plaintext. A bare public SOCKS5 listener can be scanned or disrupted by the network path; useii proxy --tls, a VPN, or an SSH tunnel for encrypted public proxy access.
- Added
ii socks5options--max,--handshake-timeout, and--idle-timeout. Defaults cap active connections at 100, require SOCKS5 handshakes within 10 seconds, and close CONNECT tunnels after 5 minutes without traffic, preventing public half-open and permanently idle connections from exhausting service resources.
ii testnow reports target access as successful only after it reads target response body data through the proxy; header-only empty responses now fail explicitly.
- Added
ii testproxy connectivity diagnostics for SOCKS5, HTTP, and TLS-wrapped HTTP proxies. It tests the proxy connection, HTTP(S) target access through the proxy, and connection latency, with optional username/password authentication. ii proxynow supports HTTPS:--tlsgenerates a temporary self-signed certificate, while--domain,--cert, and--keysupport custom DNS names and PEM certificates.
- Added the
ii ftp [directory]FTP server: it shares the current directory by default with active-only mode, anonymous login, 100 control connections, and all file operations enabled. It supports credentials, one shared rate limit, a connection limit, individual operation permissions, and active plus passive mode when--passive-portsis supplied. - Added required explicit FTPS with
ii ftp --tlsand legacy implicit FTPS with--implicit, which defaults to port990; both accept temporary self-signed certificates or PEM--certand--keyfiles.
- Added the
ii httpread-only directory site,ii pastetext sharing,ii dropresumable upload drop box,ii pacPAC hosting, andii speedbidirectional HTTP chunked throughput tests. They reuse LAN URLs, QR codes, tokens, and discovery. - Added the
ii proxyHTTP forward proxy,ii tcp/ii udpfixed-target forwarders,ii pingTCP connect latency probe,ii portconcurrent port checker,ii healthHTTP(S)/TCP health check, andii wakeWake-on-LAN sender.
ii recv --tracenow reports Iroh's selected LAN, direct, or relay path and RTT.ii send,ii watch, andii queueaccept repeated--relay; multiple explicit relays are probed for reachability and latency, while default n0 relay behavior is unchanged.ii send --webandii web --uploadsupport resumable browser uploads; reselecting the same file after a disconnect or refresh continues it.- Added
ii socks5, an ordinary SOCKS5 proxy withCONNECT,UDP ASSOCIATE,BIND, IPv4, IPv6, domain targets, and optional username/password authentication.
ii sendandii recvsupport--checksum md5|sha256; checksums are calculated and printed locally only, never stored in tickets or compared automatically.ii send <file> --preserve-metadatauses the existing tar payload to retain single-file mtime, permissions, and read-only metadata; directory and multi-path archives support--symlinks follow|preserve|reject.- Added process-local FIFO
ii queueand pollingii watch, including delay, repeat, stability detection, and existing sending backends. ii send,ii recv,ii watch, andii queuesupport--quic-portto fix the P2P Iroh UDP port;ii doctor --natreports a short-lived UDP, NAT, and relay probe.ii web --onceexits after the first complete ordinary-file download; directory pages, HEAD, Range, uploads, and failed requests do not stop it.
ii send --webnow exits after its first completed download by default; add-tto keep serving. Page visits, uploads, and failed downloads do not end the service.
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
install.shfor Linux x86_64 and Apple Silicon macOS. It downloads the latest Release, verifies SHA-256, and installs to~/.local/binorII_INSTALL_DIR.
- Release assets now include
checksums.txt, and Linux CI verifies the installed version through the installer.
- 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.