Show HN: ut – Rust based CLI utilities for devs and IT
170 points| ksdme9 | 4 months ago |github.com
I find myself reaching for tools like it-tools.tech or other random sites every now and then during development or debugging. So, I built a toolkit with a sane and simple CLI interface for most of those tools.
For the curious and lazy, at the moment, ut has tools for,
- Encoding: base64 (encode, decode), url (encode, decode)
- Hashing: md5, sha1, sha224, sha256, sha384, sha512
- Data Generation: uuid (v1, v3, v4, v5), token, lorem, random
- Text Processing: case (lower, upper, camel, title, constant, header, sentence, snake), pretty-print, diff
- Development Tools: calc, json (builder), regex, datetime
- Web & Network: http (status), serve, qr
- Color & Design: color (convert)
- Reference: unicode
For full disclosure, parts of the toolkit were built with Claude Code (I wanted to use this as an opportunity to play with it more). Feel free to open feature requests and/or contribute.
simonw|4 months ago
I've seen a few tools do things like this recently, it's a pretty interesting pattern. I believe there's tooling in the Python/Rust world that makes compiling the different binary wheels relatively easy using GitHub Actions.
rsyring|4 months ago
uv also has a couple commands I throw in a systemd unit[1] to keep these tools updated:
1: https://github.com/level12/coppy/blob/main/systemd/mise-uv-u...larusso|4 months ago
mirashii|4 months ago
pepa65|4 months ago
Another suggestion is to enable cargo-binstall, it allows just to install cargo binaries conveniently, and cargo-binstall is just a single-binary to install itself.
unknown|4 months ago
[deleted]
emanuelez|4 months ago
xpe|4 months ago
But I would probably argue that including HTTP functionality is going too far. Why? Because there are already amazing tools dedicated to this already. On the client side, see `xh` [1]. On the server side, see `miniserve` [2]. Both have approximately 7K stars on GitHub.
It seems wiser to let specialized projects focus on a particular functional area; this is better for users and less work for maintainers.
[1]: https://github.com/ducaale/xh
[2]: https://github.com/svenstaro/miniserve
Jotalea|4 months ago
ndyg|4 months ago
You can serve a folder of static assets like this:
http-nu :3021 '{|req| .static "www" $req.path}'
https://github.com/cablehead/http-nu
nvader|4 months ago
Although philosophically I prefer the unix approach of "do one thing and do it well", I really admire this tool. I think it might be the fact that the one thing this does well is curating a set of functions for a particular profile of developer. My story is someone doing web focused full stack development?
It might be worth doing a survey of your users to see what they use ut for and what areas you should focus on next.
01HNNWZ0MV43FF|4 months ago
The important part is that the user controls the entry points. It's more Unixy to allow someone to decode audio from one pipe to another than to only allow them to play a file to a speaker.
Consider that Debian "does" lots of things because it has a kernel, hardware abstractions, a userland, a package manager, and often a GUI and web browser. But it also "does" none of those because it's just a convenient and useful wrapper to publish all the other tools, which you can still call upon individually
egorfine|4 months ago
In this title you tell exactly zero information about what your tools actually do, but somehow find it important to mention the language they're written in.
maximilianthe1|4 months ago
klardotsh|4 months ago
ksdme9|4 months ago
heavensteeth|4 months ago
1. Input must be valid UTF-8. 2. stdin is read to EOF instead of being read incrementally
Neither are ideal and can make ut unfit for a fair few use cases.
Narushia|4 months ago
https://github.com/demoray/retry-cli
https://github.com/rye/eb
BrouteMinou|4 months ago
I am seeing the list of dependencies, and even without looking at the transitive ones, I am sure you didn't review any of those, nor will properly maintain that huge list.
That's a supply chain ticking bomb in my book.
I like Rust, but most projects look like kindergarten collage with no regards to security.
gdotdesign|4 months ago
renshijian|4 months ago
dxxvi|4 months ago
- the Web & Network section expanded: the copyparty features (github.com/9001/copyparty) and curlie (github.com/rs/curlie).
- compress/decompress features with password: it doesn't need to use the best compress algorithm, gzip is good enough.
xpe|4 months ago
Has the creator thought about the definition of "done"? Will it grow indefinitely like a katamari ball?
[1]: https://en.wikipedia.org/wiki/Katamari
ksdme9|4 months ago
icar|4 months ago
dolmen|4 months ago
rohan_|4 months ago
``` python -c "import base64; print(base64.b64encode('$INPUT_STRING'.encode('utf-8')).decode('utf-8'))" ```
landr0id|4 months ago
Yes it's easy to set up an alias or shell command or whatever, but that's besides the point :p
ksdme9|4 months ago
The point of ut is not to replace or invent new tooling. It is meant to be a set of tools that are simple, self exploratory and work out of the box with sane defaults. So, essentially, something that you don't have to remember syntax for or go through help/man pages everytime you want to use it.
klardotsh|4 months ago
[1] https://news.ycombinator.com/item?id=9224
dolmen|4 months ago
dolmen|4 months ago
baq|4 months ago
lukevp|4 months ago
BerislavLopac|4 months ago
The new versions 7 and 8 are really a must these days, especially v7.
ksdme9|4 months ago
Aperocky|4 months ago
cozzyd|4 months ago
ksdme9|4 months ago
guessmyname|4 months ago
I also have the exact same tools but written in Go. Rust would be a nice upgrade (lower footprint) but to keep them all in the same binary is a bit silly.
simonw|4 months ago
Sometimes it can be quite convenient to grab a single binary that does a whole bunch of useful stuff in one package.
teiferer|4 months ago
JasonSage|4 months ago
This could be great for students without sysadmins needing to lodge complaints.
articulatepang|4 months ago
These are small bits of code, and the functionality is interrelated. The entire thing feels like a calculator, or awk, and seems reasonable to put in one binary.
The Unix philosophy doesn't actually say anything about whether different tools should live in the same binary. It's about having orthogonal bits of functionality and using text as the universal interface. BusyBox is just as Unix as having all the tools be different binaries.
thayne|4 months ago
- it reduces the total install size, since common code, including the standard library, is only included once, rather than copied for each executable
- it makes installation easier on some platforms, since you just have to install a single executable, instead of a bunch of executables
dgacmu|4 months ago
arcknighttech|4 months ago
[deleted]