I kinda like tmux. A terminal multiplexer. Hell yeah. What it does, anyway. Less so how it looks or works. 😬
Toss a little tmuxinator on there and now the config is a tolerable incantation of yaml.
tmuxinator start codepenCode language: Bash (bash)
(Or, probably, some shell script that sets things up and then calls that command.)
Away we go! The chances of a large modern project getting away with just
npm run dev is slim. Chances are, you need lots of terminal stuff going on. Your web server over here, a build process over there, another different build process there in the corner, some legacy system needs to spin up, yadda yadda.
You can’t tell your developers “Just run these 12 commands, in order, oh and make sure #5 is fully spun up before you run #6, all in separate terminal tabs, and that’s your dev environment”. So, smash all the commands under one roof with a little config programming, and bingo-bango we’ve got a system that scales out to a team.
But why does it have to be so ugly? 😭
It just does have to be ugly, I guess. It has to emulate multiple terminal windows/tabs with ASCII. It’s impressive that it can pull it off, really. And, crucially, it doesn’t matter what terminal software anybody uses. The UI is built into the output of a single terminal.
What’s a shame is that many terminals already support the concept of tabs and split views. It’s very natural in iTerm, a favorite of many:
It’s probably way too tall of an order, but maybe terminals could detect a tmux situation and convert the UI into a native UI situation? Yeah? Good? Ship it.
Anyway I was just thinking about this because I was daydreaming in Figma the other day about what I wish our own little tmux setup looked like.
Update: Holy Buckets iTerm Does Have Native Support!
-CC to the tmux invocation, and changing a tmus setting to “Tabs in the attaching window”, I get all my tmux tabs as native tabs and splits as native splits.
Never did I think that was going to happen. Impressed!