In principal, publishing a Gopher site should be easy. And it is easy, assuming you are willing to put in some effort. At minimum, you need to find someone who is already operating a Gopher server, find out how to get access to the server, and then create, organize, and upload your content.

At most, you need to set up a gopher server – not just the daemon, but set up a server or VPS with the appropriate operating system. This could be a Raspberry Pi or Beaglebone Black on your home network, or a VPS at Digital Ocean, Vultr, Lightsail, or any number of VPS providers.

Neither of these are as easy as setting up a blog at WordPress.com, but you’re here to set up a gopher hole, right? I won’t cover how to set up a VPS or some other incarnation of a server. I also won’t cover how to choose, install, and configure a gopher server. Aside from that, there’s really only three things you need to do:

  • Create your content
  • Organize your content
  • Upload your content

Assuming all goes to plan, you will have a gopher hole that anyone willing to fire up a gopher client can see.

Creating Content

If content is king on the web, on Gopher it’s… the only thing. The good news is that just about every device has a text editor on it. Don’t use anything with formatting in it (e.g. Microsoft Word), that’s not plain text. Some of the fancier word processing programs can output plain text if you tell them to. Beyond that, what content you choose to share is up to you. You could write :

  • a gopher log, or phlog, with regular posts on any topic you like
  • short stories
  • instructions on how to do things
  • poetry or song lyrics
  • screenplays or librettos
  • your own dictionary
  • research articles
  • book reviews
  • class notes
  • ASCII art
  • a mix of all of the above

You could also collect documents from around the internet and share them. Most Gopher clients only display plain text files. They can also handle downloading files, but not viewing them. That means that someone can download a PDF, for example, from your gopher hole, but they will need a PDF viewer to see it. The same applies to images.

Organize Your Content

Content in a gopher hole is organized through the gophermap. A gophermap is a plain text file that contains selectors for other files, including gophermaps, in your gopher hole or, indeed, anywhere in gopherspace. A selector is the location of a file on a gopher server. So, a gophermap is a list of the locations of other files on the server.

Creating a gophermap is one of the more technical challenges in creating a gopher hole because of the specific formatting requirements for gophermaps. Each line in a gophermap begins with an item type indicator. An item type indicator is a single character that tells the gopher client how it should handle the rest of the line. To set up a very basic gopher hole, you only need three items types: i, 1, and 0.

Item Type Function
i Tells the gopher client to display the rest of the line unaltered. This type is used to add information to a gophermap to help explain, for example, one or more selectors.
1 Indicates that the selector refers to another gophermap. Multiple gophermaps can be used to give your gopher hole some structure.
0 Indicates a selector that refers to a text file. This tells the gopher client that the file referred to in the selector is a plain text file.

For example, you could create a top-level gopher map that points to an About Me file, and to other gophermaps for Books, Movies, and Knitting Projects. The item type for the About Me file would be 0 since it is pointing to a text file. The item type for Books, Movies, and Knitting Projects would be 1 because they point to folders that contain other gophermaps. A gophermap can also include lines that use type i to provide inline information. This lets you give visitors context around the selectors in your gophermap. Lines that use type 1 and 0 require a specific format:

Tlabel<tab>path<tab>host<tab>port

Here’s a breakdown of what this means:

Element Function
T The item type code (e.g. 1, 0, i)
label a human-readable label for this item (e.g. Books, Movies)
path the relative path to the target file
host the hostname of the target gopher server
port the port that the gopher server is listening on (usually 70).
<tab> a literal tab character (ASCII character 9)

Depending on the gopher server, you may be able to omit the server and port fields if your selectors are on the same server as the gophermap. I’m going to omit these fields from the examples below for readability.

Let’s assume we have folders called books, movies, and knitting, and a text file named about.txt. Our folder structure would look like this:

-home
 +books/
 +movies/
 +knitting/
  about.txt

Our hypothetical gophermap looks like this:

0About Me<tab>about.txt
1Books<tab>books
1Movies<tab>movies
1Knitting Projects<tab>knitting

We can add some i type lines to this to give some context.

iWelcome to my gopher hole!
i
0About Me<tab>about.txt
i
iHere are some books that I've read.
1Books<tab>books
i
iI also like to write about movies.
1Movies<tab>movies
i
iI collect knitting projects.
1Knitting Projects<tab>knitting

Let’s put this main gophermap in our home folder.

-home
 +books/
 +movies/
 +knitting/
  about.txt
  gophermap

Uploading Content

Once your work has been edited, spell-checked, and formatted, you will want to put it up on a gopher server where other people can read it. There are many tools that will help you transfer your content to your host, and I’m not going to cover them here. The process of uploading your content will depend heavily on the machine and operating system you are using. It’s most likely that you will be required by your host to use a secure file transfer protocol such as SFTP or SCP. Your host should be able to provide you with information about how they expect you to transfer files to their system. To find a suitable client, your best bet is to use your favorite search engine. Your system administrator may be able to provide some advice.

After you’ve uploaded your content, it’s time to test your gopher hole! Be sure to test your gopher hole each time you upload content. I can’t tell you how many mistakes I’ve caught only after uploading my content. Spelling mistakes, gophermap format errors, missing files… all of it. Make sure you achieved the intended outcome.

Finally, be sure to make a backup of your work. Writing takes time and effort. Don’t lose all that work because your hard drive fails or you fall victim to malicious software. Here, again, there are many ways to do this. I recommend doing a little research to find a method that will work in your particular circumstances. Make sure you back up your work regularly.

It Gets Easier

When I think about the work that goes into putting a simple web page or text file on the internet, I realize how inaccessible the internet is for most people. As I write this, there is no commercial interest in Gopher. Many, myself included, hope it stays that way. This means that there’s no one trying to make all of this push-button-simple so that they can make a buck off of you on the back end. I think that if more regular folks feel like they own a piece of the internet, they will be more likely to resist policies and practices that aim to disenfranchise them.