mpiorowski/late-sh
mpiorowski/late-sh has 1,526 GitHub stars and 101 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-06 07:15 UTC. Last push 2026-11-02.
A cozy terminal clubhouse for computer people. Lofi, games, chat, artboard, and tech news, all via SSH.
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Originallate.sh
A cozy command-line clubhouse for computer people. Chat, music, games, art, coding, and tech news. Connect with any SSH client!
ssh late.sh
late.sh is a terminal-first social app: real-time chat, music, games, news, profiles, and a shared always-on space you can enter from any SSH client.
Status
This repository is the main codebase for late.sh.
- The project is open for source reading, local development, audits, and contributions.
- The public hosted
late.shservice remains the canonical deployment. - The code is source-available, not OSI open source, during the FSL protection period.
Read the details in LICENSE, the plain-English policy in LICENSING.md, and contribution rules in CONTRIBUTING.md.
What It Includes
- SSH TUI with dashboard, chat, profile, news, and arcade screens
- Mouse controls on Profiles (screen 5): click people, jobs, links, and form controls; wheel scrolls the hovered pane
- The events board on
7: anyone posts an event, everyone sees it,isays I'm in; your own events sit beside it, private - Real-time global chat and shared activity feed
- Audio streaming via Icecast/Liquidsoap, played by the paired CLI or the public
/listenpage - Animated ASCII scenes in Home tiles and away screensavers, with random and five-minute randomer modes
- Terminal games including 2048, Sudoku, Nonograms, Minesweeper, and Solitaire
- Zork Trilogy door with an autosave and a manual save per edition
- Web frontend for landing, profiles, and the token-less
/listenpage - Companion CLI for local audio playback and synced visualizer data
IRC uses #name for public rooms and ##name for private rooms. /LIST
shows both when you belong to the private room; /join ##name opens that
private room using your existing late.sh membership. Create private rooms
and invite members from the TUI. IRC JOIN only opens existing rooms.
IRC clients with draft/chathistory can retrieve joined-channel and existing
DM history, including missed conversations through CHATHISTORY TARGETS.
Requests support message IDs and timestamps, up to 300 stored messages per
page. Clients with batch and server-time that do not request
draft/chathistory receive the latest 25 messages after joining a channel.
Private membership and room bans apply to history as well as live chat.
Workspace
The Rust workspace contains the main apps and standalone door hosts:
| Crate | Role |
|---|---|
late-cli |
Companion CLI for local audio playback, paired controls, and visualizer sync |
late-core |
Shared domain code, database layer, migrations, and infrastructure helpers |
late-ssh |
SSH server and terminal UI application |
late-web |
Web server, landing page, profiles/gallery, stream proxy, and the public /listen page |
late-webview |
Helper process hosting the official YouTube IFrame Player for the CLI |
late-zork |
Private SSH/PTY host for the separately executed Frotz interpreter and Zork trilogy |
The other standalone door hosts are late-bashquest, late-brogue,
late-codekeep, late-dcss, late-dopewars, late-nethack, and late-usurper.
The stack is backed by PostgreSQL, Icecast, and Liquidsoap.
Quick Start
Try the live service:
ssh late.sh
The SSH login name is discarded rather than used as a public handle. On the first connection, a new account receives a random modifier-and-noun username; the username can still be changed later in Settings.
Run it yourself (requires Docker):
git clone https://github.com/mpiorowski/late-sh
cd late-sh
make start
Then connect to your local instance:
ssh localhost -p 2222
That's it. Postgres, Icecast, and Liquidsoap all come up automatically.
Companion CLI
Install the companion CLI for local audio playback and synced visualizer:
macOS / Linux / Termux:
curl -fsSL https://cli.late.sh/install.sh | bash
On Termux, the installer fetches the Android CLI build instead of the GNU/Linux one.
Windows PowerShell (x64):
irm https://cli.late.sh/install.ps1 | iex
mise (from the GitHub Release archives):
mise use -g github:mpiorowski/late-sh
Nix / NixOS:
nix run github:mpiorowski/late-sh#late
Or build it from source:
mise install # optional — sets up the expected Rust toolchain
cargo build --release --bin late
Local Development
Everything runs in Docker Compose: the development profiles point at the
compose service names (postgres, icecast), so late-ssh and late-web
do not run outside it.
mise install # rust, mold (Linux only) and cargo-nextest, as pinned in .mise.toml
make start # copies .env.dev to .env and starts the stack
ssh localhost -p 2222
Personal keys (an AI key, a YouTube key) go in the gitignored .env.local,
which wins over .env. make start-instance2 runs a second instance from
.env.dev2.
late-ssh runs the way production runs it, as a pod behind a copy of the
production SSH edge. A saved change that rebuilds the binary rolls out like a
deploy: a new pod starts, and once it is ready the old one drains. Your open
session stays on the old code behind the update banner until you reconnect
(the native CLI, scripts/run_local_cli_native.sh, moves it on its own after
30 s without input), and a change that does not compile leaves the old pod
serving.
make fleet-rollout rolls out by hand, make fleet-ps lists the pods, and
make fleet-logs follows them.
The Zork door is enabled in the development profile. Build its vendored asset image once before building the Compose services (the door base images target amd64):
docker build --platform linux/amd64 -f docker/doors/zork.Dockerfile \
-t ghcr.io/mpiorowski/late-sh/door-zork:2.56pre-r1 .
make start
Fixtures for manual testing, each described in its domain's CONTEXT.md:
make seed-artboard (gallery pieces, applause and staff accounts),
make seed-calendar (the events board), make seed-paper (a long edition of
The Late Edition), make seed-irc-history USERNAME=<you> (IRC history for
Halloy and other clients), and make seed-leaderboard. The development
profile grants admin to every session; set force_admin to false in
late-ssh/src/config.rs to test role-based permissions.
Verification
Run the local gate before opening a PR:
make check
This runs cargo fmt --check, then cargo clippy and cargo nextest across the
whole workspace with --features otel. It is the full pre-merge sweep and the
only place the otel (telemetry) build is exercised, since CI skips otel to stay
fast; otel breakage is caught here or at the release build, never in prod.
The local check starts a dedicated Compose Postgres project (late-check) on
port 55433 and points DB-backed tests at it via TEST_DATABASE_URL.
Override CHECK_INSTANCE or CHECK_PG_HOST_PORT if you need a parallel check
database.
Contributing
Contributions are welcome, but read the project policy first:
This repository uses DCO sign-off for commits:
git commit -s
If you distribute a fork, do not present it as the official late.sh service or use the project branding as your own.
More Context
- CONTEXT.md: the map of the codebase, the rules that cross domains, and where each domain's own
CONTEXT.mdlives. Written for humans and LLMs alike; point your AI editor at it first. - CONTRIBUTING.md: workflow, test rules, module patterns, and AI-assisted development tips.
- THEME.md: how to contribute a new built-in SSH theme via PR.
- late-cli/README.md: CLI-specific usage and behavior.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,362 starspublic-apis/public-apis
A collective list of free APIs
496,655 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
437,324 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,047 stars