tmux for Your BBS: Phosphor Sessions Now Survive Disconnects
August 29, 2026
If you’ve used tmux or screen, you already understand what we just shipped for Phosphor BBS: the ability to walk away. Close the laptop. Lose the train tunnel Wi-Fi. Kill the app by accident. Come back — and everything is exactly where you left it.
That’s now how sessions work on a Phosphor DTP server. And it changes what kind of place your community server can be.
The problem: a socket is not a person
Traditional BBS software — and, honestly, most modern chat infrastructure — ties a user’s session to a network connection. The socket closes, the connection dies, and everything the user was doing evaporates. You were halfway through writing a long post, three screens deep into a file area, mid-conversation in a chat channel. Gone. Reconnect and you’re back at the login prompt, starting over.
That model made sense when a “session” was a single phone call. It makes no sense now. People move between a desktop terminal, a phone, a tablet, a web browser. The connection is the least persistent thing about them.
So we decoupled the two.
How it works
Under the hood, Phosphor now keeps a PersistentSession for every logged-in user: the current screen, the cursor position, in-flight input state. It lives in a PersistentSessionStore on the server, independent of any socket. When your connection drops, the session doesn’t close — it detaches.
When you reconnect — telnet, SSH, web terminal, console, any of them — the session factory checks the store first. If you have a live persistent session, it re-attaches your new connection to it and re-renders the current screen straight onto your new socket. Same screen, same cursor, same half-finished input. You don’t log back into a fresh session; you pick up the one you were holding.
You can also detach on purpose. There’s a Detach Session item on the main menu: it closes the socket but preserves the session for re-attach. Think of it as Ctrl-b d for your BBS.
Stealing the terminal, honestly
Multi-device users will hit the tmux-culture question quickly: what happens when I attach from a second machine while the first is still connected?
Phosphor answers the way tmux does — the newest attach wins — but it tells the truth about it. Before the streams are swapped, the displaced client gets a notice down its old socket: “Session attached from another connection. This terminal has been disconnected.” No silent yanking, no mysterious freeze. The old connection knows why it’s gone.
The server side is just as explicit: the session registry fires a stolen event carrying the stealer’s IP, listeners hear about it in real time, and the connection log flags the entry as ATTACHED · STOLEN by <ip>. As a sysop you can see exactly who attached from where. That matters when a “community server” is a place you’re responsible for.
Sessions with a lifespan
Persistent state is only a feature if it eventually cleans up after itself. Detached sessions carry a last-access timestamp, and a background cleanup daemon evicts them after a configurable TTL — 24 hours by default, tunable with the bbs.session.ttl.minutes system property. Logging out releases the session immediately. A week-long vacation won’t leave a zombie holding your screen state.
For the sysops watching the room
The monitoring surfaces got the upgrade too. The Session Log screen now shows STATUS (ATTACHED or DETACHED) and TTL per session, and sysops can force-terminate a detached session right from the monitor. Presence counts only attached sessions — the Who’s Online list reflects who’s actually in the room, not who’s got a ghost parked somewhere — and DETACH and REATTACH flow through as live events. Stats screens split attached and detached counts, including session memory.
Why this matters for a third place
Here’s the thing about the places people actually like: they don’t reset when you step outside. A good café holds your table for a few minutes. A neighborhood bar remembers your drink. Most software behaves like a turnstile — every visit is a fresh transaction, no memory, no continuity, because memory costs the platform something and continuity serves you, not their ad metrics.
Session persistence is Phosphor saying: this is a place, not a page. You can put your terminal down and pick it back up. Your community’s common room doesn’t throw your chair out into the street when your phone switches towers.
It’s also the plumbing for what’s coming next on DTP servers — token-based quick re-attach from mobile, and push notifications that land you back on exactly the screen that paged you. Detach-and-return is the foundation. That foundation is now committed, tested, and running.
Your community. Your terminal. Your rules.
Come kick the tires: point your browser at bbs.phosphorbbs.net:8088/terminal and feel what a re-attachable social terminal is like — connect, detach, reconnect, and find your screen exactly as you left it. And follow #dtp (with #digitalthirdplace and #socialterminal) for what’s shipping next. I run a DTP server. You can too.