gopher-proxy: proxy gopher over http

[ gpl, network, program ] [ Propose Tags ]

gopher-proxy allows to proxy gopher over HTTP, which is mainly useful for HTTP-ifying a specific gopher space.

A simple invocation looks like this:

gopher-proxy --host --http-port 8080

In this particular example gopher-proxy does the following things:

  • Takes HTTP requests on (to be used by a proxying web server, like nginx), converts those to gopher requests to and returns the gopher responses as HTTP responses

  • Links menu items pointing to external servers to gopher:// URLs (this ensures that only one gopher server is proxied) and recognizes URL links which are converted to normal HTML links

  • Tries to guess the correct mime-type for every gopher-served file (as it is not included in the response) and wraps text files in a HTML container.

  • And generally works hard to offer the best HTTP equivalent of a given gopher space :)

To learn about the other parameters for tweaking the behavior of gopher-proxy see the readme.

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS],,,,,,
Change log
Dependencies attoparsec (>=0.14), base (>=4.9 && <5), bytestring, directory, errors, http-types, lucid, mime-types, network, optparse-applicative, text, wai, warp [details]
License GPL-3.0-only
Author sternenseemann
Category Network
Home page
Bug tracker
Source repo head: git clone git://
Uploaded by sternenseemann at 2021-10-25T21:48:22Z
Distributions LTSHaskell:, NixOS:, Stackage:
Reverse Dependencies 1 direct, 0 indirect [details]
Executables gopher-proxy
Downloads 4055 total (26 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2021-10-26 [all 1 reports]

Readme for gopher-proxy-

[back to package description]


gopher-proxy is a tiny wai application running on top of warp. It acts as a gopher-over-http proxy for a specific server, e. g. to http-ify a gopher space.


Example usage:

gopher-proxy --host --http-port 8080

In this particular example, gopher-proxy would proxy the gopher server and bind its http service on (to be proxied to by another web server like nginx).

These are all optional flags which allow to change default behavior:

  • --port: The port of the gopher server, defaults to 70
  • --css-path: Use some specific css file instead of the default one.
  • --css-url: The http path of the css file, defaults to /gopher-proxy.css (should be changed, if your gopher server has a file with the same name
  • --base-url: The path of the directory which will appear as root directory of gopher-proxy to the user, defaults to /. Should be changed if you configured your proxying web server to expose gopher-proxy as, say /gopher-space/.
  • --listen-public: If this flag is set, gopher-proxy will accept connections on its public IP address(es).
  • --default-mime-type: Mime type to use if gopher-proxy can't guess it, defaults to "application/octet-stream"
  • --timeout: connection timeout in milliseconds, defaults to 10 seconds.
  • --server-name: The server name of the server to proxy, defaults to the host name. This value is used to detect wether a menu item is pointing to another gopher server than the proxied one. This is particularly useful, if you use e. g. instead of the public host name.
  • --title: Sets the first part of the HTML title-tag, defaults to gopher-proxy.

Things to keep in mind

  • Your gopher server must send UTF-8-encoded gopher responses
  • gopher-proxy might misinterpret certain content, because of the context-sensitive nature of gopher
  • gopher-proxy does not support Gopher+


  • Add Logging