John Floren

Home | Blog | Uses | Links
Back to blog archive

Posted 2023/8/8

Introducing the Mercury Protocol

If there’s one thing all right-minded people are agreed upon, it’s that HTTP is over-complicated and bloated. PUT? PATCH? What do those even mean? Headers? Sheer bloat, in my day we set bits in an 8-bit field and were happy to have it! Even Gemini is too featureful – they suggest you can achieve enlightment by just implementing HTTP GET with 2-digit status codes, but they’ll never escape samsara that way!

I’m determined to keep at the forefront of Internet simplicity, and to that end I’m pleased to announce the Mercury protocol. If you’ve ever thought “URIs? More like UTIs, because they’re a pain in the genitals,” well, Mercury is for you. You can read the spec here or just watch the video below for a demonstration:

I can hear your pathetic mewling complaints: “What about hyperlinks?” Mercury supports linking to other Mercury sites, of course: just include the hostname and port of the target in your Mercury document, allowing the user to copy-and-paste it into their client. “What if I want to host more than one file?” You start another instance of the server on another port, dummy!

The reference implementation is implemented using only the Go standard library. Fetch it and try it yourself; the spec document is hosted at mercury://building-m.net:1958

$ go install github.com/floren/mercury/mercury-client@master
$ mercury-client
Mercury host (q to quit)> building-m.net:1958

You can also check out the source code on github. Pull requests are welcome, but I probably won’t merge them because Mercury is already the perfect protocol.