Top
Best
New

Posted by karol-broda 12/23/2025

Snitch – A friendlier ss/netstat(github.com)
341 points | 103 commentspage 2
cyberax 12/23/2025|
Nice! Couple of notes:

1. Can you highlight the currently selected row with a different background?

2. Maybe add optional reverse DNS lookups?

karol-broda 12/23/2025|
was thinking of adding more customizable theming, like highlighting the background and reverse dns resolution was released earlier
TZubiri 12/23/2025||
One aspect of sysadminship that I find cute (but suboptimal) is how we memorize this strings of commands that were clearly not quite designed to be used in that manner. A slightly related example is how our intents in our mind end up having commands that don't resemble at all what we actually want, creating a map between intent and command that is almost exclusively arbitrary except for some obsucre etymological origin that might or might not help you remember the command in a time of need.

For example:

Intent: "create a file"

Command: "touch $FILE"

As it happens, touching a file doesn't mean to create, it was supposed to touch to modify the last access date, like a null op. But now if you want to create a file you do that.

Intent: "Print a file contents to screen" Command: "cat $FILE"

Is this a reference to a feline? some slang for printing or reading? No it's short for concatenate, but if you pass just one argument instead of 2, it prints the concatenation of 1 file and nothing.

Even something as simple as

Intent: "Rename a file" Command: "mv $FILE"

Of ocurse there's the fact that moving a file and renaming the file are very similar if not identical in most FS/OS, but also, the slight change from a word to a proper-name style command already creates a style of command line interaction that was very natural in the 80s, but is now being reinvented with the advent of more powerful language decoding technology. So even:

Intent: "Copy a file" Command: "cp $FILE"

Now to the topic, you can see how my relationship with ss is the mapping:

Intent: "See a list of open ports" Command: "ss -tulnp"

Which I remember mnmemotecnically because it is close to -tulip. This is similar to ps -aux in that the command includes a set of options and I remember it mnemotecnically ("auxiliary" or "auxilio"), and I use the options even when I don't need them, modifying the options from that baseline if needed, like removing "a" to get just the current user's processes.

That said. I don't know if the future is going to be "better" alternatives to old tools, but rather deconstructing or making use of the concept of "binary":"command", running man and --help has never been an optimal solution, and let's be honest, kids nowadays are googling, stackoverflowing and chatgpting their intent in order to get a magical command.

No easy way to improve upon this at the userspace level, the OS model of delegating control to binaries based on a hierarchical command structure is sensible, and "magic", or sharing commands across binaries without a clear ruleset would be too opaque. But I feel that creating new tools while barely revolutionizing the way they work is too small an incremental change, it adds more noise, I'm not sure that ss2 or network-manager instead of wpa_supplicant is a better outcome, now you are just linearly increasing the cognitive demand of new sysadmins linearly with time.

Sorry to be a bummer.

TZubiri 12/23/2025|
I've just connected this to some other thought on Android app marketplaces.

Even in operating systems as distant as Android, we still have the phenomenon of using proper_names instead of natural names.

If you want a taxi or a cab, you don't ask your OS to get you a taxi or cab, you ask it to use the Uber binary.

In the 2000s it wasn't clear that this was going to be the case, the famous example of the pets.com domain was a wrong bet that natural names would somehow be important.

Instead natural names are only important when used through an obscure privately controlled algorithm like Google or StackoverFlow or ChatGPT, if you want to say "flights to Greece" instead of "Oobloo greece", you need a magical black box in the middle.

coolbean 12/23/2025||
I wish there was a tool that also displayed current and accumulated transfer rate per socket/process. I use jnettop for this purpose, but I'm unhappy with its user interface.
karol-broda 12/23/2025|
that actually is planned for a future version
stavros 12/23/2025||
Thanks for this! I can never remember the netstat arguments, and it's a bit crazy that it doesn't come with sane defaults, so this is going to be really useful.
karol-broda 12/23/2025|
yea i was kinda fed up
hwj 12/23/2025||
The README doesn't mention this, but on macOS it's also available via brew:

`brew install snitch`

karol-broda 12/23/2025|
dont think this is in homebrew/core, brew install snitch may be a different package, could you paste brew info snitch output? if its not this project, i will add a note to the readme to avoid confusion. but i will be creating a homebrew cask soon
hwj 12/24/2025|||

  $ brew info snitch
  ==> snitch: stable 0.1.8 (bottled), HEAD
  Prettier way to inspect network connections
  https://github.com/karol-broda/snitch
  Installed
  /opt/homebrew/Cellar/snitch/0.1.8 (9 files, 8.4MB) \*
    Poured from bottle using the formulae.brew.sh API on 2025-12-23 at 15:32:41
  From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/s/snitch.rb
  License: MIT
  ==> Dependencies
  Build: go 
  ==> Options
  --HEAD
          Install HEAD version
emaro 12/23/2025|||
I didn't verify anything, but used the brew install and the installed cli at least looks and behaves like I expected from this HN post.
hashstring 12/23/2025||
Name can be friendlier, tui looks nice!
wittjeff 12/23/2025||
I can't read as fast as your demo GIF. Just infuriating.
karol-broda 12/23/2025|
it’s all code, if you want you can make a pr with adjustments to the demo
andrewmcwatters 12/23/2025||
[dead]
stressback 12/23/2025|
prettyneat.gif

Thanks for sharing