GOPHER BROWSER EXTENSION
A browser extension that makes gopher:// URLs work again.
THE IDEA
User types gopher://lingenic.com/design/ in the address bar. The extension intercepts, rewrites to HTTPS, adds the Accept header, fetches, and renders the gopher menu. The user sees gopher. The transport is HTTPS.
Gopher returns to the browser without returning to port 70.
HOW IT WORKS
1. Extension registers as handler for gopher:// URL scheme
2. gopher://host/path becomes https://host/path
3. Fetch with Accept: text/gopher header
4. Parse tab-separated response
5. Render as interactive menu
The user never sees the rewrite. They type gopher://, they see gopher.
URL REWRITING
gopher://lingenic.com/
→ https://lingenic.com/
→ Accept: text/gopher
→ Gopher menu response
gopher://lingenic.com/design/terminal/
→ https://lingenic.com/design/terminal/
→ Accept: text/gopher
→ Gopher menu response
gopher://lingenic.com/design/terminal/readme.txt
→ https://lingenic.com/design/terminal/readme.txt
→ Accept: text/gopher
→ Text file response
The path transfers directly. No translation needed.
RENDERING
Directory (type 1):
┌─────────────────────────────────────────┐
│ │
│ TERMINAL │
│ │
│ [dir] src │
│ [dir] docs │
│ [txt] readme.txt │
│ [bin] terminal.tar.xz │
│ │
│ ───────────────────────────────────── │
│ lingenic.com │
│ │
└─────────────────────────────────────────┘
Click a line, follow the link. Arrow keys navigate. Enter selects. Backspace goes back. The interaction model is gopher.
TEXT FILES
Text files (type 0) render as plain text in the same frame. Monospace. No styling. A back button returns to the menu.
CONTENT DETECTION
The extension can also detect text/gopher responses from regular HTTPS navigation:
1. User clicks https://lingenic.com/design/
2. Server responds with Content-Type: text/gopher
3. Extension intercepts response
4. Renders as gopher menu
No gopher:// URL needed. Any server returning text/gopher gets gopher rendering. The format triggers the renderer, not the URL scheme.
IMPLEMENTATION
Manifest (Chrome/Firefox WebExtension):
{
"manifest_version": 3,
"name": "Gopher",
"permissions": ["webRequest", "webRequestBlocking"],
"protocol_handlers": [{
"protocol": "gopher",
"name": "Gopher over HTTPS",
"uriTemplate": "https://%s"
}]
}
Background script:
- Intercept gopher:// navigations
- Rewrite to https://
- Add Accept: text/gopher header
- Pass to content script for rendering
Content script:
- Detect text/gopher responses
- Parse gopher menu format
- Render interactive UI
- Handle navigation
Total: ~200 lines of JavaScript.
SAFARI
Safari uses a different extension model (App Extensions). Same logic, different packaging:
- Swift/JavaScript hybrid
- Safari Web Extension format
- Distributed via App Store or direct install
The core is identical. The packaging differs.
WHAT THIS COMPLETES
Three ways to access gopher over HTTPS:
1. **Browser extension**: gopher:// URLs work, gopher rendering
2. **TUI client**: terminal users, ncurses interface
3. **curl**: Accept: text/gopher header, raw output
The server is done. The extension brings it to browsers. The TUI brings it to terminals. Gopher is back.
---
Lingenic LLC
2026