[{"data":1,"prerenderedAt":422},["ShallowReactive",2],{"project-45483531":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":29,"sentiment":30,"stance_mix":31,"scored_comments":36,"aspects":37,"strip":47,"post_text":49,"what":50,"said":76,"maker_in_thread":213,"shape":224,"grid":228,"attempts":383,"same_week":384,"maker_shows":46,"maker_hidden":414,"reader_version":415,"card":416},"45483531","ut","Rust based CLI utilities for devs and IT","title","Show HN: ut – Rust based CLI utilities for devs and IT","https:\u002F\u002Fgithub.com\u002Fksdme\u002Fut","github.com","ksdme9",1759685780,2025,170,63,411,3837,11,"notable","dev_tools","command line utilities","cli",[24,25,26,27,28],"rust cli","developer utilities","base64 encode","uuid generator","hashing cli","mixed",-0.232,{"positive":32,"neutral":33,"mixed":34,"critical":35},10,14,1,16,41,{"idea":38,"docs":41,"execution":43,"design":45},{"positive":39,"critical":40},6,9,{"positive":42,"critical":34},0,{"positive":42,"critical":44},4,{"positive":46,"critical":34},3,[46,46,42,34,48,34,46,34,48,46,48,34,34,34,46,34,42,34,42,42,34,42,42,42,34,48,34,46,46,34,34,42,34,48,46,48,46,42,46,46],5,"Hey HN,\n\nI 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.\n\nFor the curious and lazy, at the moment, ut has tools for,\n\n- Encoding: base64 (encode, decode), url (encode, decode)\n\n- Hashing: md5, sha1, sha224, sha256, sha384, sha512\n\n- Data Generation: uuid (v1, v3, v4, v5), token, lorem, random\n\n- Text Processing: case (lower, upper, camel, title, constant, header, sentence, snake), pretty-print, diff\n\n- Development Tools: calc, json (b",{"problem":51,"audience":57,"pricing":61,"motivation":62,"time_to_build":61,"stack":66,"openness":75,"stage":75,"team_size":75},{"value":52,"source":53,"evidence":54},"Developers reach for random websites for small encoding, hashing and debugging tasks","maker",[55],{"id":56},"post",{"value":58,"source":53,"evidence":59},"Developers and IT staff",[60],{"id":56},null,{"value":63,"source":53,"evidence":64},"Reaching for online tools like it-tools.tech during development and debugging",[65],{"id":56},[67,71],{"value":68,"source":53,"evidence":69},"Rust",[70],{"id":56},{"value":72,"source":53,"evidence":73},"Claude Code used in building parts of the toolkit",[74],{"id":56},"unknown",{"praise":77,"objections":94,"requests":131,"questions":167,"alternatives":181},[78],{"value":79,"source":80,"evidence":81},"Convenient single binary of handy tools, busybox-like","commenter",[82,86,90],{"id":83,"by":84,"text":85},"45484266","simonw","The single binary thing reminds me of BusyBox - https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBusyBox Sometimes it can be quite convenient to grab a single binary that does a whole bunch of…",{"id":87,"by":88,"text":89},"45486088","01HNNWZ0MV43FF","I think for packaging it's okay to \"have\" lots of things that individually \"do\" one thing. The important part is that the user controls the entry points. It's more Unixy to allow…",{"id":91,"by":92,"text":93},"45487274","mrbluecoat","I agree. This feels like a level two busybox\u002Ftoybox. Nice job.",[95,110,117,124],{"value":96,"source":80,"evidence":97},"Goes against Unix do one thing well philosophy; too much functionality",[98,102,106],{"id":99,"by":100,"text":101},"45486091","xpe","I can understand why people would find `ut` convenient. That said, I would caution against trying to include too much functionality. What is too much? I don't have a clear idea…",{"id":103,"by":104,"text":105},"45487627","Jotalea","I agree. this tool feels like an all-in-one swiss knife. granted, it is useful. But it goes directly against one of the UNIX core values which is \"do one thing and do it well\".…",{"id":107,"by":108,"text":109},"45491898","Aperocky","This is literally anti-unix.",{"value":111,"source":80,"evidence":112},"Hashing reads stdin to EOF and requires valid UTF-8",[113],{"id":114,"by":115,"text":116},"45487707","heavensteeth","The first thing I checked was how hashing is implemented and two things stand out to me: 1. Input must be valid UTF-8. 2. stdin is read to EOF instead of being read incrementally…",{"value":118,"source":80,"evidence":119},"No tests validating the tools",[120],{"id":121,"by":122,"text":123},"45486933","klardotsh","Thanks for disclosing your use of GenAI, that kind of transparency is nice to see up front. On that note though, I took a random example (`calc.rs`) and noticed there was no unit…",{"value":125,"source":80,"evidence":126},"Dependency supply chain risk",[127],{"id":128,"by":129,"text":130},"45490807","BrouteMinou","When importing a library, it becomes part of your project, therefore it becomes your responsibility to ensure that the imported code is safe and sound. I am seeing the list of…",[132,143,153,160],{"value":133,"source":80,"evidence":134},"Add UUID v7",[135,139],{"id":136,"by":137,"text":138},"45485861","lukevp","How about uuidv7? That’s catching on, as it’s got improved sortability \u002F clustering behavior in DBs",{"id":140,"by":141,"text":142},"45489116","BerislavLopac","> Data Generation: uuid (v1, v3, v4, v5) The new versions 7 and 8 are really a must these days, especially v7.",{"value":144,"source":80,"evidence":145},"Publish as Python and npm packages or via cargo-binstall",[146,149],{"id":147,"by":84,"text":148},"45484254","Slightly odd suggestion: package it up as both a Python and an NPM module - both just thin wrappers around the combined binary - and then people within those ecosystems will be…",{"id":150,"by":151,"text":152},"45488285","pepa65","I will personally never want to install uvx or npx. Another suggestion is to enable cargo-binstall, it allows just to install cargo binaries conveniently, and cargo-binstall is…",{"value":154,"source":80,"evidence":155},"Add retry subcommand with exponential backoff",[156],{"id":157,"by":158,"text":159},"45485995","Narushia","Would be cool if this also had a `retry` sub-command, for running any commands with an exponential backoff retry logic. Similar to these Rust tools:…",{"value":161,"source":80,"evidence":162},"Add compression with password",[163],{"id":164,"by":165,"text":166},"45489522","dxxvi","As it is a utility toolkit, I'd like to have: - the Web & Network section expanded: the copyparty features (github.com\u002F9001\u002Fcopyparty) and curlie (github.com\u002Frs\u002Fcurlie). -…",[168,175],{"value":169,"source":80,"evidence":170},"Why everything in one binary instead of separate binaries",[171],{"id":172,"by":173,"text":174},"45484198","guessmyname","Why is everything in the same binary? Why not multiple binaries, one for each function? That way people can install only the ones they need, a-la Unix tools: do only one thing…",{"value":176,"source":80,"evidence":177},"What is the definition of done and scope limit",[178],{"id":179,"by":100,"text":180},"45486014","On what basis are new features included? Has the creator thought about the definition of \"done\"? Will it grow indefinitely like a katamari ball? [1]:…",[182,186,192,199,206],{"value":183,"source":80,"evidence":184},"xh and miniserve for HTTP",[185],{"id":99,"by":100,"text":101},{"value":187,"source":80,"evidence":188},"coreutils base64",[189],{"id":190,"by":11,"text":191},"45484630","You don't even have to go that far, `base64` is a coreutil (https:\u002F\u002Fgithub.com\u002Fcoreutils\u002Fcoreutils\u002Fblob\u002Febfd80083b4fe4ae37f50bbc2fcf3cfaee50a248\u002Fsrc\u002Fbasenc.c#L467). The point of…",{"value":193,"source":80,"evidence":194},"DevToys CLI",[195],{"id":196,"by":197,"text":198},"45487580","gdotdesign","DevToys (https:\u002F\u002Fgithub.com\u002FDevToys-app\u002FDevToys) has a CLI version like this.",{"value":200,"source":80,"evidence":201},"openssl subcommands",[202],{"id":203,"by":204,"text":205},"45494634","dolmen","Many of this utilities are bundled with the \"openssl\" tool: ``` $ echo -n foobar | openssl base64 -e Zm9vYmFy ```",{"value":207,"source":80,"evidence":208},"uutils coreutils",[209],{"id":210,"by":211,"text":212},"45484783","westurner","uutils\u002Fcoreutils has a `base64` in Rust which just gained better performance due to the base64-simd crate for SIMD: https:\u002F\u002Fgithub.com\u002Fuutils\u002Fcoreutils\u002Fpull\u002F8578",{"comments":39,"answered":46,"key":214},[215,218,221],{"id":216,"text":217},"45484550","This looks cool, thanks!",{"id":219,"text":220},"45488316","Hey, yeah, fair concern. Some tools already have tests, but, I do plan on adding it to all of them.",{"id":222,"text":223},"45488333","I don't have a strict idea of \"done\" for ut. But, I am not keen on adding increasing complex things to it either. It's purpose is convenience not exhaustiveness.",{"commenters":225,"max_depth":39,"maker_replies":39,"first_comment_mins":226,"lifespan_hours":227},45,75,42,[229,231,234,236,240,243,245,249,251,254,257,259,260,264,267,272,273,274,278,281,283,285,286,287,289,291,294,295,296,298,302,304,308,312,313,314,317,320,322,325,327,329,331,332,333,335,337,338,342,345,347,350,352,355,358,361,364,367,369,371,375,378,380],[147,42,46,230,84,42],"project\u002Fneutral\u002Fnone",[232,42,46,230,233,42],"45484416","mirashii",[216,42,42,235,11,34],"maker\u002Fpositive\u002Fnone",[237,42,42,238,239,42],"45484725","other\u002Fneutral\u002Fnone","larusso",[241,42,46,230,242,42],"45485216","rsyring",[150,42,34,244,151,42],"project\u002Fcritical\u002Fnone",[246,42,48,247,248,42],"45488543","project\u002Fpositive\u002Fnone","emanuelez",[99,34,34,250,100,42],"project\u002Fcritical\u002Fidea",[252,34,42,238,253,42],"45486882","ndyg",[255,34,46,256,151,42],"45488309","project\u002Fneutral\u002Fidea",[258,34,42,238,253,42],"45490707",[103,34,34,250,104,42],[261,34,48,262,263,42],"45488020","project\u002Fpositive\u002Fidea","dtj1123",[265,34,46,256,266,42],"45488459","efskap",[268,269,46,270,271,42],"45484142",2,"project\u002Fmixed\u002Fidea","nvader",[87,269,48,262,88,42],[91,269,48,262,92,42],[275,46,34,276,277,42],"45488635","project\u002Fcritical\u002Fdocs","egorfine",[279,46,42,238,280,42],"45490395","maximilianthe1",[121,44,34,282,122,42],"project\u002Fcritical\u002Fexecution",[219,44,42,284,11,34],"maker\u002Fneutral\u002Fexecution",[114,48,34,282,115,42],[157,39,46,256,158,42],[128,288,34,282,129,42],7,[196,290,46,230,197,42],8,[292,40,42,238,293,42],"45486939","renshijian",[164,32,46,256,165,42],[179,18,34,250,100,42],[222,18,42,297,11,34],"maker\u002Fneutral\u002Fidea",[299,300,42,238,301,42],"45490613",12,"icar",[303,300,42,238,204,42],"45494150",[305,306,34,250,307,42],"45484532",13,"rohan_",[309,306,42,310,311,42],"45484542","commenter\u002Fneutral\u002Fnone","landr0id",[190,306,42,297,11,34],[210,306,42,238,211,42],[315,306,42,238,316,42],"45485652","collinfunk",[318,306,42,310,319,42],"45487864","conradludgate",[321,306,42,310,211,42],"45497437",[323,306,34,250,324,42],"45484868","baq",[326,306,48,262,122,42],"45486206",[328,306,34,250,204,42],"45494674",[330,306,46,230,204,42],"45494609",[203,306,46,230,204,42],[136,33,46,256,137,42],[140,334,46,256,141,42],15,[336,334,42,235,11,34],"45501735",[107,35,34,250,108,42],[339,340,34,282,341,42],"45495391",17,"cozzyd",[343,340,42,344,11,34],"45501725","maker\u002Fneutral\u002Fnone",[346,340,42,238,341,42],"45502065",[172,348,34,349,173,42],18,"project\u002Fcritical\u002Fdesign",[83,348,48,351,84,42],"project\u002Fpositive\u002Fdesign",[353,348,48,351,354,42],"45484273","JasonSage",[356,348,48,351,357,42],"45484389","articulatepang",[359,348,34,250,360,42],"45484480","teiferer",[362,348,48,262,363,42],"45484650","geraldcombs",[365,348,34,250,366,42],"45484943","rauli_",[368,348,48,262,363,42],"45485355",[370,348,42,310,360,42],"45494734",[372,348,46,373,374,42],"45484962","project\u002Fneutral\u002Fdesign","dgacmu",[376,348,42,310,377,42],"45485729","zvr",[379,348,42,310,374,42],"45486232",[381,348,46,373,382,42],"45484977","thayne",[],[385,390,395,399,404,409],{"id":386,"name":387,"points":388,"category":389},"45504973","Timelinize",630,"productivity",{"id":391,"name":392,"points":393,"category":394},"45492489","nullpt.rs",348,"security_privacy",{"id":396,"name":397,"points":398,"category":389},"45490578","Write It Down",271,{"id":400,"name":401,"points":402,"category":403},"45491609","Kent Dybvig's Scheme Machine (heap-lisp)",226,"languages",{"id":405,"name":406,"points":407,"category":408},"45515978","telefonefix",222,"hardware",{"id":410,"name":411,"points":412,"category":413},"45516584","Recall",171,"ai",false,"v2",{"id":417,"name":5,"line":6,"ai":414,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":418,"top":18,"kw":419,"maker":11,"domain":10,"tier":19,"attempts":42,"strip":420,"url":9,"mix":421,"praise":79,"objection":96,"sub":21},45483531,-0.23,[24,25,26,27,28],"3301513153511131010010001513311015353033",[32,33,34,35],1793991131378]