8 ms·
Show HN: DevUtils.app – Developer Utilities for macOS
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...
https://devutils.app https://devutils.app
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!
- anonfunction 6y agoIt 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.
- trungdq88 6y agoHi, 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.
- bradknowles 6y agoThe 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.
- trungdq88 6y agoInteresting! 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? Thanks!
- tenken 6y agoNot 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)...
- trungdq88 6y agoThanks for sharing, I'll look into this. It seems like a good thing to add given that the users are developers.
- bradknowles 6y agoSometimes 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.
- sercand 6y agoI 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.
- trungdq88 6y agoI'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.
- rock_artist 6y agoI'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/ 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.
- trungdq88 6y agoThanks 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.
- pfranz 6y agoDaisyDisk 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."
- stevekemp 6y agoI'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: https://github.com/skx/sysbox https://github.com/skx/sysbox I've not considered a pretty-printer, but it isn't a bad idea to add such a thing.
- kripy 6y agoI 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/ https://json.pizza/
- heliodor 6y agoThey don't need to handle big inputs gracefully. Most people have small inputs. Serving 99% of use cases well is not a "toy".
- chris_st 6y agoI'd also prefer to get this from the App Store.
- veidr 6y agoSomething 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?
- throwaway744678 6y agoQuick example of very large json files: a database dump (in JSON format), eg from a mongodb, django dumpdata, etc.
- umarniz 6y agoWhy not just use VSCode for formatting JSON/XML/etc? https://twitter.com/Rapchik/status/1310843502578880513 https://twitter.com/Rapchik/status/1310843502578880513
- mrcarruthers 6y agoCouple 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.
- trungdq88 6y agoThanks! These are all good suggestions. I also have plan to add custom scripts so people can add their own tools from their specific workflows.
- bradknowles 6y agoJSON diff would be extremely useful!
- gregoriol 6y agoA Lorem ispum generator too!
- yen223 6y agoFor those who use the terminal, the built-in tool `uuidgen` generates a v4 uuid. I would definitely appreciate apps for the other usecases.
- Eric_WVGG 6y ago5. robust regex builder and analyzer, akin to https://regexr.com/ 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!
- fsanal 6y agoRobust 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.
- happymellon 6y ago
- tr1ll10nb1ll 6y agoJust to be clear, what's the primary difference between the featured app and Boop (https://apps.apple.com/us/app/boop/id1518425043?mt=12 https://apps.apple.com/us/app/boop/id1518425043?mt=12)?
- haswell 6y agoJust 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.
- arthtyagi 6y agoI 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.
- haswell 6y agoIt 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.
- tr1ll10nb1ll 6y agoAlright, 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.
- simplify 6y agoAsking "how is this different" is not dismissive. It's just a question. How else should one ask for a useful comparison?
- slugiscool99 6y agoLove it! I always feel weird pasting my data into random sites
- ziml77 6y agoSame. 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.
- trungdq88 6y agoThis 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.
- ajimix 6y agoJS and HTML beautifier please!
- trungdq88 6y agoFor sure, it's in the road map :)
- arthurfm 6y agoDevUtils 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 https://gchq.github.io/CyberChef [2] https://github.com/gchq/CyberChef https://github.com/gchq/CyberChef
- trungdq88 6y agoCyberChef 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.
- easywiththe 6y agoGitHub link on the webpage to open a PR is b0rk3d btw.
- trungdq88 6y agoThanks! Fixed :)
- abalaji 6y agoSome feedback, it might be cool if on the homepage you could click on the image to view screenshots of the different "tools."
- trungdq88 6y agoThanks! 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!
- throw03172019 6y agoVery 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.
- trungdq88 6y agoHm... 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.
- charlesdaniels 6y agoThis 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/ https://gchq.github.io/CyberChef/
- trungdq88 6y agoCyberChef 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-guidelines/macos/extensions/services/ https://developer.apple.com/design/human-interface-guideline...
- ianlevesque 6y agoNice, now absorb https://regex101.com/ https://regex101.com/ too!
- trungdq88 6y agoNoted ;)
- youareostriches 6y agoThe 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-guidelines/macos/extensions/services/ https://developer.apple.com/design/human-interface-guideline...
- trungdq88 6y agoIt 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.
- iptq 6y agoCan'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
- trungdq88 6y agoYeah... 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!
- samatman 6y agoCool 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.
- technimad 6y agoAny 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.
- deleted 6y ago[deleted]
- Henk0 6y agoGreat 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
- trungdq88 6y agoYou are welcome! I'm glad you like the app :)
- saghul 6y ago"Don't trust me? Build the app from source by yourself." Love this! Kudos for creating a useful tool mate.
- jbverschoor 6y agoNot sure if I'd trust the complete supply/dependency chain these days...
- selfhoster11 6y agoThat goes all the way down to the CPU and the OS. At some point, you've gotta say "stop".
- trungdq88 6y agoThank you!
- system16 6y agoJust 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.
- trungdq88 6y agoOops, thanks, I'll check it real soon.
- wraptile 6y agoNot 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.
- drizze 6y agoSome devs prefer a GUI even when a perfectly good command line tool exists. For example the many git wrappers.
- rgovostes 6y agoSuppose 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.
- wraptile 6y agoYou'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.
- OzzyB 6y agoIt'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.
- dukeofharen 6y agoNice 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 :)
- aasasd 6y agoNever heard of DI being the bottleneck. May I ask what that framework is, just so that I have another datapoint in my collection?
- Farbklex 6y agoDoes anyone have an alternative for Windows?
- TheRealPomax 6y agoMost 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.
- wool_gather 6y agoHex Fiend, if you don't have it already: http://ridiculousfish.com/hexfiend/ http://ridiculousfish.com/hexfiend/ There's also the old HexEdit, but I'm not sure that it works anymore. http://hexedit.sf.net http://hexedit.sf.net
- TheRealPomax 6y agoI have several hex editors installed (yay, font engineering) but I'd _much rather_ have it as part of a single solution tool belt.
- trungdq88 6y agoThanks 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!
- biehl 6y agoWhat would you think about a homebrew recipe that builds from source? Good or bad?
- trungdq88 6y agoWell, 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.
- chowndown 6y agoAnother comment in favor of regex support. If it worked similar to regex101.com I'd instabuy
- lolsal 6y agoI 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.
- neurostimulant 6y agoNice 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.
- trungdq88 6y agoThanks! 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.
- el_don_almighty 6y agoProud purchaser of the app - love it.
- hrishios 6y agoThank 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.
- jbverschoor 6y agoLove 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.