The main differences as I (Daniel Stenberg) see them. Please consider my bias towards curl since after all, curl is my baby - but I contribute to Wget as well.

Please let me know if you have other thoughts or comments on this document.

File issues or pull-requests if you find problems or have improvements.

library. curl is powered by libcurl - a cross-platform library with a stable API that can be used by each and everyone. This difference is major since it creates a completely different attitude on how to do things internally. It is also slightly harder to make a library than a "mere" command line tool.

pipes. curl works more like the traditional unix cat command, it sends more stuff to stdout, and reads more from stdin in a "everything is a pipe" manner. Wget is more like cp, using the same analogue.

Single shot. curl is basically made to do single-shot transfers of data. It transfers just the URLs that the user specifies, and does not contain any recursive downloading logic nor any sort of HTML parser.

More protocols. curl supports FTP, FTPS, Gopher, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, MQTT, FILE, POP3, IMAP, SMB/CIFS, SMTP, RTMP and RTSP. Wget supports HTTP, HTTPS and FTP.

More portable. curl builds and runs on lots of more platforms than wget. For example: OS/400, TPF and other more "exotic" platforms that aren't straight-forward unix clones.

More SSL libraries and SSL support. curl can be built with one out of thirteen (13!) different SSL/TLS libraries, and it offers more control and wider support for protocol details.

HTTP auth. curl supports more HTTP authentication methods, especially over HTTP proxies: Basic, Digest, NTLM and Negotiate

SOCKS. curl supports SOCKS4 and SOCKS5 for proxy access. With local or proxy base name resolving.

Bidirectional. curl offers upload and sending capabilities. Wget only offers plain HTTP POST support.

HTTP multipart/form-data sending, which allows users to do HTTP "upload" and in general emulate browsers and do HTTP automation to a wider extent

curl supports gzip, brotli and deflate Content-Encoding and does automatic decompression

curl offers and performs decompression of Transfer-Encoded HTTP, wget doesn't

curl supports HTTP/2, HTTP/3, alt-svc and it does dual-stack connects using Happy Eyeballs

curl can do many transfers in parallel ( -Z )

Much more developer activity. While this can be debated, I consider three metrics here: mailing list activity, source code commit frequency and release frequency. Anyone following these two projects can see that the curl project has a lot higher pace in all these areas, and it has been so for 10+ years. Compare on openhub