Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: DevUtils.app – Developer Utilities for macOS
241 points by trungdq88 10 months ago | hide | past | favorite | 105 comments
This is a project I've been working on since the start of Covid-19. I built an app so that I don't have to put data into online tools like JWT debugger, JSON formatter, URL decoder, etc...


The app works entirely offline and is open-source. I'm selling the pre-built version of the app to earn some revenue for my time. If you want to try the app but can't afford the price or don't have XCode to build the app, drop me an email (my profile), I'll be happy to provide you a free build.

I would love to hear all the feedback/suggestions. Thanks!

Great stuff! I'm currently a bit short on money, so thanks for making it available on GitHub :)

Just to save others a bit of googling time: I tried to build the project using Xcode 14 and ran into a problem with the Highlightr framework being compiled in Swift 5.1

error message: "Module compiled with Swift 5.1 cannot be imported by the Swift 5.3 compiler: /Users/TheAdmin/Downloads/DevUtils-app-master/Carthage/Build/Mac/Highlightr.framework/Modules/Highlightr.swiftmodule/x86_64-apple-macos.swiftmodule"

The fix was to set the flag "Build libraries for distribution" in DevUtils>build Settings>build options to yes. If you've already tried building and failed, you may have to clean build folder, go to the derived data folder (~/Library/Developer/Xcode/DerivedData), delete the derived data for the project, and restart xcode before you build again

You are welcome! I'm glad you like the app :)

Couple additional things would be interesting:

1. UUID generator (v1/v4, etc...)

2. Text diff checker (two sets of text, show the differences).

3. JSON diff. Show differences between two large-ish json object.

4. CSV to JSON converter.

5. robust regex builder and analyzer, akin to https://regexr.com/

between this and Nova.app, it feels like we are finally starting to crawl our way out of this miasma of non-native apps. Gonna buy right after my morning coffee!

Robust regex builder and analyzer would be awesome. I already use some form of this in my editor but it would be cool to see it native as part of this application.

For those who use the terminal, the built-in tool `uuidgen` generates a v4 uuid.

I would definitely appreciate apps for the other usecases.

> 2. Text diff checker (two sets of text, show the differenc

I find Meld to be one of the best diff tools out there, with the 3 way, random text, file or complete folder diffing.

`brew cask install meld`

Thanks! These are all good suggestions. I also have plan to add custom scripts so people can add their own tools from their specific workflows.

JSON diff would be extremely useful!

A Lorem ispum generator too!

DevUtils reminds me of CyberChef [1][2]. The latter supports ~300 operations, is also open source and works entirely offline, but lacks the 'smart detect' feature of DevUtils since it's web-based.

[1] https://gchq.github.io/CyberChef

[2] https://github.com/gchq/CyberChef

CyberChef is definitely one of the big inspirations to build the app. I really like the way inputs/outputs are "pipeable" in CyberChef and actually looking for ways to do the same in DevUtils, without complicate it too much.

This reminds me a lot of CyberChef[0], which has a lot of similar features. That said, it's a web application(though it's easy to run locally). This looks like a nice native-UI version of some of the same ideas.

0 - https://gchq.github.io/CyberChef/

CyberChef is awesome for sure! I built DevUtils because I wanted more "integrated workflow".

For example when I have an unformatted JSON string in my clipboard, I just need to press my global hotkey and that's all it needed to see the formatted string. I can also use the context menu (using System Service [1]) if I don't want to modify my current clipboard.

There wasn't any app that provide this level of convenience. Beside, I love native macOS apps :)

[1] https://developer.apple.com/design/human-interface-guideline...

The JSON formatter/validator alone would make this worth the money to me. A YAML formatter/validator could also be very useful. But they do have to be rock-solid and able to handle large inputs (think gigabyte scale files), otherwise they’re just toys like all the other local apps I’ve found in this space.

The other features are not currently as useful, but I’m happy to support them as well.

I hate to say it, but doing this on the App Store with IAP to cover the upgrade from the demo version to the full version would be a viable way to distribute your app and handle the back-end payments.

Interesting! Could you share more on why would you use this app for large JSON/YAML files but not other specific tools like jq/yq?

I'm interesting to know because I built this app with the thought that it would eliminate the time you paste the strings to online websites (to validate/format/convert it), and usually people don't paste gigabyte strings file... So maybe this is something from your workflow that I don't know?


Sometimes I use jq, if it’s a simple enough operation, like I just want to pretty-print the JSON structure. But jq is obtuse and arcane, and if I want to do anything more than just “ | jq -S .” then it is of no use to me. In particular, it is of no use to validate a multi-gigabyte JSON structure that has an error in it ... somewhere.

So, alternative JSON parsing/validation programs are most welcome.

Not OP in question. I threw a 20k student campus of json class registration data ... Hundreds of Megs at CyberChef to pretty print and it choked.

I sometimes use jq/ya ... The sqlite json extension (written in C) .... It's great when "input size" never matters in ones' tools and the tools can run in any environment (sqlite is Everywhere)...

Thanks for sharing, I'll look into this. It seems like a good thing to add given that the users are developers.

They don't need to handle big inputs gracefully. Most people have small inputs. Serving 99% of use cases well is not a "toy".

I've written a small toolbox of "sysadmin stuff", for myself, which I find very useful.

It includes a subcommand for YAML, JSON, and XML validation:


I've not considered a pretty-printer, but it isn't a bad idea to add such a thing.

I use json.pizza [1] on the web but have not hit it at scale. Likely it would choke. Still a great little tool.

[1] https://json.pizza/

Something about your comment struck me as slightly unusual — and then I realized, I have literally never encountered a JSON or YAML formatter/validator tool that can handle even a single gigabyte of JSON or YAML in any kind of performant manner.

Moreover — and this may just be me living out here in the boondocks with my chickens and my cows — I have literally never encountered a JSON or YAML file that was 1GB or larger.

Would you happen to have an example or a link to either one of these things?

Quick example of very large json files: a database dump (in JSON format), eg from a mongodb, django dumpdata, etc.

I agree with the App Store statement. If this was on the App Store, I would pay and try it out. Instead I downloaded the source code and building myself right now.

I'm glad you liked the app! Can you share more on why you would only pay via App Store? If it's on App Store and also open-source, would you still buy it?

This is my first time selling apps, a lot of things I still need to learn.

I would definitely buy it if it was on the App Store.

Much less hassle to buy and keep updated than to have to track the github repo and build my own CI/CD workflow around whenever you decide to release a new version, etc....

And also less hassle than just downloading whatever your latest binary is, if you’ve compiled it for me. Thanks to the way notarization works now, that’s a pain that I am happy to outsource to someone else for a reasonable fee.

Hi Brad,

Sorry for digging this up. Just in case you are still following this thread, I just want to let you know that the app is now available on the App Store: https://apps.apple.com/us/app/id1533756032

(this doesn't mean I'm asking your to buy, just FYI, cheers!)

I see. DevUtils does come with an incremental auto-update mechanism, but I can see that App Store's auto update is probably better in this case. Thanks for sharing!

A Mac Store release would also be helpful when (re)installing a Mac or moving to a new mac.I had to go through the process recently and `brew` or App Store apps were a breeze to reinstall but manually installed ones have to be noted down somewhere then manually reinstalled.

Oh I see, this makes sense! Thanks for sharing!

I'm not the original commenter but I'll provide my few cents.

Especially with Apple's eco-system. Most potential buyers would have an Apple account with valid payment. Reducing filling credit card.

The other benefits on both ends is app updates and the ability to have the app accessible for you even if the app website drops or anything.

Having said that, that's one opinion and I'm pretty sure that other people would be happy from your current workflow that cuts less on your revenue.

> If it's on App Store and also open-source, would you still buy it?

There are plenty of such apps. The first one comes into my head is Cyberduck. https://cyberduck.io/ (Though they seemed to reduce the number of mentions about it being open sourced)

One wonder though, Since your app is very scoped. It can easily be universal and benefit from the entire apple eco system.

Thanks for the insights!

I didn't know it's possible to sell the app from App Store and directly from website at the same time. I always thought Apple wouldn't approve that, but as shown here Cyberduck is doing it.

I may also do it in the future too.

DaisyDisk is another example. They even blur the line by having the standalone app detect if you purchased via the App Store and will issue you a serial number if requested: "DaisyDisk has detected and applied your Mac App Store purchase receipt."

Not GP, but no, I don't use the App Store at all, I'd `brew cask install` it and probably be blissfully unaware that you were trying to sell it too.

But then I suppose I'm not your target user anyway, since I don't want a GUI for this.

Why not just use VSCode for formatting JSON/XML/etc?


I'd also prefer to get this from the App Store.

Just to be clear, what's the primary difference between the featured app and Boop (https://apps.apple.com/us/app/boop/id1518425043?mt=12)?

Whoa, I did not know this app exists, it also looks nice!

As I can see, DevUtils provide convenience features like global hotkey, smart detect, context menu, etc... this is something I have spent a lot of time on, and it worked well for me at least :)

I did research on online tools and open-source projects like CyberChef [1], but none of them were providing the convenience I was looking for.

[1] https://github.com/gchq/CyberChef

Oh that seems really interesting. Smart detect is a nice addition, I'd say. I'll try it out.

Thanks! I guess this means I'll need to make "smart detect" more obvious in the page.

Just to be clear, what is the purpose of this question as asked?

There's plenty of room for utilities like this. I purchased Boop, and it's not bad, but I'm not a fan of the UX. DevUtils looks interesting to me and I'll give it a shot.

Even if there was 100% feature parity between these apps, the different approach to UX alone is enough to justify its existence, an existence which doesn't really need to be justified to begin with.

It's a valid question, though I agree it could certainly be phrased in a less confrontational manner.

I don't understand how the purpose of the question is not clear. I intend to know how does this featured app differs from Boop, that's all. And instead, I get a -1 from someone, haha.

It may not have been intentional, but the way the question was phrased, it sounded extremely dismissive and borderline accusatory. If that was not the intent, that's great.

Honest feedback, no ill will.

Alright, I think it might have come across like that which in no way was my intent and for that purpose, I have rephrased my question.

Asking "how is this different" is not dismissive. It's just a question. How else should one ask for a useful comparison?

> "There's another app called Boop that seems similar. How would you compare your app to Boop?"

I certainly agree that "how is this different" is not dismissive by itself. But the whole of the comment came across as very dismissive.

It's possible that I overreacted, but that's how I interpreted it.

I don't think you overreacted, the "Just to be clear" and other wording seems like gaslighting to me, assuming that the author knows about this alternative but knowing that is unlikely.

A much better way to phrase this question would be something like:

> On the surface this looks like it solves similar problems to Boop, an app I use to do similar things. Have you heard of Boop? If so, how do you think this compares?

Looks great, thanks!

Having to guess command names however isn't great in Boop.

It looks like it has a separate input and output which is nice, and it also lists the possible options so you don't have to type and guess :)

"Don't trust me? Build the app from source by yourself." Love this!

Kudos for creating a useful tool mate.

Not sure if I'd trust the complete supply/dependency chain these days...

That goes all the way down to the CPU and the OS. At some point, you've gotta say "stop".

Thank you!

Nice, now absorb https://regex101.com/ too!

Noted ;)

It looks very nice! I wonder if you could make more from a pay what you wish pricing, I don't have access to build and also don't like to pay for something without trying it. I would be happy to try it out first and buy it if there are no bugs or "coming soon" type features I see a lot in software.

Your profile doesn't contain have an email.

Hi, oops I thought my email was there, just updated. Please email me at hn@tdinh.me

And thanks for the feedback! I'll consider ways to let people try the app first.

Can't i just pop open my browser's console and:

- Unix time converter: (unixtime) => new Date(unixtime)

- Unix time converter reverse: (date) => ~~(date.getTime() / 1000)

- JSON prettifier: (jsonString) => JSON.stringify(JSON.parse(jsonString), null, 2)

- JWT debugger: doesn't exist in browsers i suppose

- Base64 encode: btoa

- Base64 decode: atob

- Query string parser: (queryString) => new Map(new URLSearchParams(queryString).entries())

- HTML entity encode/decode: idk why u need this, should not be escaping html manually in webpages just use .innerText

- Backslash escape: not sure what specifically this is doing in the app but sounds like it's easy enough to do it with a regex

I feel like if u want a UI u should make one that can save scripts and turn them into forms so that users can add arbitrary functions themselves without having to wait for the application to add more functionality

Yeah... This is what I was always doing. Everytime I open my Chrome Dev Tool for this, I wish there is an app that do it for me with just a single click / hotkey. So I wrote the app.

Custom scripts is in my roadmap too, I just need to figure out the UI, add some "smartness" into it, workout the auto-detect priority and other small details. Hopefully I can push out an update with that soon!

Nice app! Some suggestions:

- a YAML formatter and validator would be nice. I lost counts of how many hairs I pulled trying to debug my YAML configuration files only to find out that I forgot to indent some lines correctly, or yaml decides to "helpfully" convert a string to other types implicitly. YAML and json are terrible as configuration file formats, but alas...

- Secrets / high entropy string generators, ideally already formatted to be copy/paste friendly for use in various apps config such as django, wordpress, etc, but.

Thanks! I'm thinking of a way to format YAML anh also draw indentation lines in the ouput. Will be helpful when working with really long k8s yml files.

The app needs to additionally make these features available as system services[1]. It shouldn't take more than a few extra lines of code to do so, and the advantage is that you can select text in any app to use as input.

1. https://developer.apple.com/design/human-interface-guideline...

It does support System Service, even though I didn't make it super obvious in the page. You can check the demo video.

A new item "Inspect with DevUtils.app" will be added after you install the app.

Nice application. I may try it out this week.

I've also built a "tool of tools" a few years ago which I (and only I) use regularly. It's a command line tool and may need some more love these days (it's very slow due to a slow dependency injection framework). Maybe I will pick that project up, seeing your project made me inspired to pick my own project up again :)

Never heard of DI being the bottleneck. May I ask what that framework is, just so that I have another datapoint in my collection?

Most of these tools are not mac only, it would be amazing if you could make this available to users of other operating systems, too.

On a tooling note, how much work would it be to add a hex editor? It's also one of those "need to do infrequently, always a hassle" that fits quite nicely in a tool belt utility like this.

Thanks for the feedback!

I haven't worked with hex editors much. From what I see a hex editor needs to have quite a lot of features to make it useful. Do you have any specific features of a hex editor that you use a lot? I'll see if it's make sense/easy to add to the app. Thanks!

Hex Fiend, if you don't have it already: http://ridiculousfish.com/hexfiend/

There's also the old HexEdit, but I'm not sure that it works anymore. http://hexedit.sf.net

I have several hex editors installed (yay, font engineering) but I'd _much rather_ have it as part of a single solution tool belt.

I really appreciate apps like this that are just 'apps' - not services, not subscriptions, just a little stand-alone, offline, limited scope app that does what it does well.

I bought a copy. Looking forward to playing around with it.

Some feedback, it might be cool if on the homepage you could click on the image to view screenshots of the different "tools."

Thanks! I've been considering that idea for a while actually. Still haven't been able to do it because various reasons: - The site need to be rendered nicely on multiple screen sizes - It's complicated on mobile - I update the screenshoot from time to time - I tend to reduce the amount of JS in the main page

I'll have to put more thoughts into this, a few people suggested this already.

Thanks for the feedback!

Cool idea, look forward to seeing where you go with it.

My suggestion is a TOML validator, and conversion from TOML to JSON and back. I'd actually use that a lot. Others have already mentioned YAML, and I'd second that, but it's a real beast, TOML would be an easier bite to chew.

Thank you! I was halfway to building JSON escaping as a tool for myself. I'm working with AWS SES templates at the moment, and the manual steps to - validate handlebars, inline CSS, escape JSON, upload and then see what failed is killing me.

Love it. I'm using these kind of things online so many times. For example base64 decode, because I don't want to paste a huge chunk or save a temp file. I always need to find a 100% javascript implementation.

Any plans to include regex support? I used to use a small offline tool (regexhibit?) but that remained unsupported, now moved to regex101.com. Yet something offline would be so much better.

Yep regex tools will definitely be added, super useful.

Great. Please consider IAP for these features. I'd pay a few bucks for this.

Love it! I always feel weird pasting my data into random sites

This is the exact reason I built the app :)

I tried to use the Chrome Dev Tools as much as I can (e.g. btoa/atob function to work with base64), but it takes too many unnecessary steps.

Now I just use the app and add any missing tools I found in my workflow.

Same. I always check the source for them to ensure all work is being done locally, but it still feels wrong. Would be cool to have a browser feature that disables form submission and JS network requests for specific sites.

Very cool! Is there support for tabs? For example, on the JSON Formatters I usually have a few Chrome tabs open where I work with different data structures.

Hm... very interesting, thanks for sharing! I have never thought of this. I'll considering ways to allow multiple tabs or other ways to work with multiple inputs at the same time.

GitHub link on the webpage to open a PR is b0rk3d btw.

Thanks! Fixed :)

Not to sound negative but I always wonder, who is this for?

Seems like a lot of these can be replaced by a line of python (or javascript or gnu util).

- backslash escapes: `print(text)`

- b64 decode: `base64.b64decode('text')`

- html escape: `html.escape('<h1>hello</h1>')`


And you have that in terminal for piping, output redirection and all of that unix goodness. GUI for this seems like a very peculiar option here, especially when it integrates with the rest of the environment only through clipboard.

Other than that big fan of the business model though you don't have a license specified in your github repo.

It's for me, and that's great.

I don't want to open up Terminal, remember some (Python) code to JSON format some string that I've just copy/pasted and hope that I've remembered it correctly and it works.

Oh! But I don't remember the code! So I have to look it up, probably on StackOverflow b/c I'm lazy (not really, I just want to format the text I've just copied to clipboard not remember the correct lib that python uses for formatting), but how do I do that? I've already copied the text I want to format to clipboard and if I copy the code to format the code that I have in my clipboard to the clipboard it will erase the text that I want to format! xD

So, yeah, little Util GUI Apps like these are useful.

Suppose your input to any of these contains quotation marks, or perhaps a mix of quotation marks. Then you have to use more and more exotic forms of quoting and escaping.

In Python 2.7, encoding to Base64 in a pipe used to be a mouthful:

    echo "foo" | python2.7 -c 'import sys; print sys.stdin.read().encode("base64")'
Now it's even worse:

    echo "foo" | python3 -c 'import base64,sys; print(base64.b64encode(sys.stdin.buffer.read()).decode("ascii"))'

As an aside, the base64 module is a good example of how rough the Python standard library is, and it seems like no one is being a gatekeeper of new changes. Almost no one wants base64.decode, but base64.b64decode. Or maybe base64.standard_b64encode? Or base64.encodebytes? Not to mention the majority of functions in the module are _not_ related to Base64 but other encodings.

You're really nitpicking here. There's nothing an alias or a 3 line `~/bin` script can't solve. As for base64, there's already a several decade old gnu util available in every terminal.

You’re solutions take and order of magnitude more typing and memorization than the app. It’s also more error prone, e.g., syntax errors.

Don’t take this wrong way, I’m trying to phrase this as nice as I can, because I’m truly super curious where people who ask these questions are coming from, but isn’t that obvious? Are you not aware how much more memorization, typing, and room for error your solutions have? Or do you just not value those difference? And if it’s the last one, why isn’t it obvious that this is simply for people who do value those differences more? (Again, sorry if this sounds rude, but I see comments like this a lot, and I want to understand the psychology behind them.)

There's no memorization involved at all.

You create a bin script or an alias the first time you do it. i.e. typing `escape-html "<h1>hello</h1>"` in your terminal is infinitely more efficient and easier than firing up some app and navigating some menus. This also supports of all of unix actions like piping and output redirection.

I honestly quite shocked how many developers on MacOs are not familiar with the terminal and are weirdly afraid of it!

This adds setup cost, to create the initial aliases, plus that doesn't remove memorization, it just replaces memorizing the command with memorizing your alias (which I agree is easier, but I have a bunch of aliases myself [1], [2], they're a pain to keep track of). Again, I struggle with what's difficult about imagining someone who's priorities are different?

Also... sending HTML as a parameter in your shell? Have you actually tried this? That's going to be a nightmare to escape for anything even a little bit complicated.

[1]: https://github.com/robenkleene/Dotfiles/blob/master/zsh/alia...

[2]: https://github.com/robenkleene/Dotfiles/blob/master/zsh/abbr...

It's even perhaps a little bit narrowly named - I'm not a developer, I don't live in the terminal, but I often need to format JSON, decode URLs, and work with timestamps.

This looks great. As another commenter mentioned, even if you are the above things, not having to remember pieces of obscure domain knowledge to complete tasks is useful (say, you're not a Python or JS dev).

Why write a line of Python when I can Ctrl+C/Ctrl+V (especially if the task originates from outside of the terminal)?

Some devs prefer a GUI even when a perfectly good command line tool exists. For example the many git wrappers.

Just a heads up it looks your(?) Apple Team ID is exposed in the Xcode project file.

Looks great though - can’t wait to try it out.

Oops, thanks, I'll check it real soon.

Proud purchaser of the app - love it.

Another comment in favor of regex support. If it worked similar to regex101.com I'd instabuy

What would you think about a homebrew recipe that builds from source? Good or bad?

Well, I think if the app get popular enough, eventually someone will do it. I just hope that whoever do it is kind enough to give me a credit (and the link to buy) in the install message or something.

JS and HTML beautifier please!

For sure, it's in the road map :)

Does anyone have an alternative for Windows?

Applications are open for YC Winter 2022

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact