@node Why
@unnumbered Why I created it?

@itemize

@item I am tired that various HTTPS clients (like browsers and feed
aggregators) use TLS libraries with different feature set. NSS, GnuTLS,
OpenSSL... All of them sucks, comparing to Go's @code{crypto/tls}.

@item I am tired that everyone provides very limited certificates trust
management capabilities, like either certificate or SPKI
@url{https://en.wikipedia.org/wiki/Certificate_pinning, pinning} with
@url{https://en.wikipedia.org/wiki/Trust_on_first_use, TOFU}.

@item I am tired that many clients provides very few information about
certificates and connections at all.

@item I hate that hardly anyone can control (no automatic silent
transparent following) HTTP redirections. Although Firefox (I used many
ears ago) had proper extensions for that.

@item I am sick of tiny control on URLs. The best you can is to use some
kind of @url{https://en.wikipedia.org/wiki/Privoxy, Privoxy}, but it is
not friendly with TLS connections, obviously. Or use yet another
browser-specific plugin.

@item Hardly anyone does
@url{https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities, DANE}
checks.

@item And there is insanity of fonts downloading.
Why the hell people just do not send PostScript documents instead!?

@item And wonderful @url{http://jpegxl.info/, JPEG XL} image format is
not supported by all browsers. Even pretty old
@url{https://developers.google.com/speed/webp, WebP}, is not supported
everywhere, especially on old browsers.

@item None of web browsers has ability to view web archives
(@url{https://en.wikipedia.org/wiki/Web_ARChive, WARC}s). And most of
WARC-related software is written on Python, that nowadays is close to be
impossible to install and use with all its broken dependencies system.

@item And yet another piece of software is needed for browsing the
@url{https://en.wikipedia.org/wiki/Gemini_(protocol), geminispace}?
Too many bicycles already!

@end itemize

That is why I wrote @command{tofuproxy} -- pure Go HTTP proxy, MitMing
all HTTPS connections on the fly. It is written for my personal needs
exclusively, so many features are just directly hard-coded, instead of
creating some kind of complex configuration framework.
