Gopher is a plain-text based network protocol which was widely popular before the HTTP-based web came into existance; de facto, it is the direct predecessor of modern HTTP servers, but with a simpler screen layout due to its simpler markup standard. It supports informational text and hyperlinks as well as up- and download of files of several types, search queries, host-side scripting, and a few other things like Telnet sessions and automated access to and updates from other server types (SQL databases, whois/wais servers, finger servers, and much more). Like HTTP, it is a server-client protocol; there are several dozen gopher clients for almost all platforms and of different ability and quality.

Gopher’s directory structure is centered around so-called “gophermaps”. These are files alike to an index.html which basically are combined explanatory text files and directory indices, and containing hyperlinks and script calls.

One of the nice features of Gopher is its flexibility in terms of connectability; with many gopher servers, you can use telnet to connect (on port :70 instead of telnet’s port, :23) instead of using a full-blown gopher client, send a “selector” and a newline, and the server sends back the according gophermap or file as plain-text.

For more information, see (or gopher:// and gopher://

Gemini is a similar project, but newer: it makes many changes to bring non-HTTP and non-HTML but decentralized hypertext to the masses:

Implementations in Emacs Lisp

Emacs has at least two Gopher client implementations:

Elpher is also a Gemini client.

And some customization examples:


I recommend Elpher. – Alex Schroeder

Both of them are merely rudimentary implementations which do only support very limited subsets of Gopher link types. Yet, Elpher is the better one — technically, ie., seen from lisp coding standards. But gopher.el is much faster and more easily extendable to add the missing link types (and the type hints in the buffer display), yet misses customization options. Elpher takes several seconds or longer to retrieve a single item, which ought to take place within tenths of a second. —mangledmind

Just a quick hint for those interested in setting up their own Gopher server: I recommend either Geomyidae or Gophernicus, since they are written in C and thus more secure and stable than any script based ones (because they’re independant from any libraries and script bases). In addidion, I am slightly biased towards Gophernicus because of its better/easier gophermap structure, more supported link types, and flexibility. — mangledmind