The text-only edition of jws.dev
telnet.jws.dev
jws.dev in a terminal: the same experience, résumé, travel, projects and posts, rebuilt from the site’s public JSON API and served over telnet by one Node.js process with no dependencies.


Getting there
How to connect
Any telnet client will do. Connect, press Enter, and type the number of whatever you want to read.
telnet telnet.jws.devGetting a telnet client
- macOS
Apple stopped shipping telnet with macOS High Sierra. Homebrew puts it back:
brew install telnet- Windows
Turn on the Telnet Client feature from a command prompt run as administrator, then use the command above in Command Prompt or Windows Terminal. PuTTY works too, with Telnet as the connection type.
dism /online /Enable-Feature /FeatureName:TelnetClient- Linux
Most distributions package it as telnet; on Debian and Ubuntu:
sudo apt install telnet- No telnet at all
Netcat, which most systems already have, gets you in too. It skips the negotiation, so you get plain line mode and perhaps a few stray characters at the top.
nc telnet.jws.dev 23
Finding your way around
| Keys | Action |
|---|---|
| 1–999 + Enter | Open a numbered entry |
| B + Enter | Go back |
| M + Enter | Return to the main menu |
| Space | Page through a long screen (the arrow keys work too) |
| any word + Enter | Search the whole site |
| T + Enter | Switch between colour with line drawing, plain colour, and plain ASCII |
| H + Enter | Show every command |
| Q + Enter | Disconnect |
Telnet is not encrypted. That is fine for reading a public website, which is all this is: there is no login, and nothing you type goes anywhere but this server.
At a glance
Project statistics
- API collections it reads
- 7
- Runtime dependencies
- 0
- Display modes
- 3
- Travel destinations
- 112
- Technologies documented
- 84
- Uptime
- 100%Over the last 30 days, measured by UptimeRobot.
- Days since last change
- 41
Purpose and direction
The goal
telnet.jws.dev is jws.dev rebuilt from nothing but its public JSON API, for a client about as far from a web browser as a client gets: a telnet session in any terminal, browsed by typing numbers. It holds the whole site in memory and checks the API’s manifest every five minutes, downloading only the collections whose content has changed, so whatever is published on jws.dev turns up in the terminal without anyone touching the server. It is one Node.js process with no dependencies — the telnet negotiation, the text layout and the PNG decoder that draws the portrait are all written against the standard library — and it runs on the same server as jws.dev, as an unprivileged, locked-down service that is built to shrug off the bots that scan port 23 all day. It is published in English only.
Changelog
Recent changes
The last few things I have documented about telnet.jws.dev.
Posts, changelogs, and a harder shell
The telnet site now carries the posts written for jws.dev and each project’s changelog, letters wait for Enter, and the server is stricter with abusive clients.
A portrait in the banner
The welcome screen now draws my portrait from the site’s icon: greyscale half blocks on a modern terminal, ASCII shading on anything else.
jws.dev, over telnet
A telnet server that rebuilds jws.dev from its public JSON API, with experience, résumé, travel and projects as numbered menus in any terminal.
Connected to my experience
Technologies used
Select a technology to read more about my experience with it and how I use it.
