Hacker News new | ask | show | jobs
by helloanoop 992 days ago
Try Bruno - https://github.com/usebruno/bruno

- Free and Opensource IDE for exploring and testing APIs

- It is lightweight with MIT license

- Bruno stores your collections directly in a folder on your filesystem

- Use git for collaboration

- No cloud sync. Fully offline.

PS: I am the creator of this project

10 comments

Have you considered affiliating your project with the Linux Foundation or a similar organization?
Not yet. It's at a very early stage.
And yet it pretty much has 80% of the value that Postman provided to me.

There is some missing polish (like missing utilities in scripts or buggy drag-and-drop) and a couple bigger things like no authorization schemes or code export, but the killer thing it has over pretty much all the competition is the JS glue code AND first-class VCS support. Even insomnia had garbage-tier glue code support, something that was very much missing coming from Postman.

Great work!

Yup, the JS glue code is something that I am very proud of. You can install any npm package via package.json. Require them inside your scripts and it just works.

In every other tool, they treat a collection like something that can be modified only via GUI. In Bruno, its more of a developer mindset. Even if you don't have Bruno GUI, you can open it in an editor and make changes to it - just like code

External npm package installation is unique to Bruno and afaik no other tool has this.

Yes Auth is a big task that I am working on. Glad to see that some folks use scripts and directly implement oauth2 https://github.com/usebruno/bruno/issues/178

Many users are surprised when they find this capabilty, It opens up a lot of possibilities - https://github.com/usebruno/bruno/issues/233#issuecomment-17...

Buggy drag and drop is fixed now in v0.16.6
Thanks! This looks great! I like the local first (or local only) approach of your tool. It's very refreshing in comparison to the bloated monsters like campfire or postman
yup! every postman alternative just follows postman playbook

starts as offline

vc funding

enables cloud sync for collaboration with teams

deprecates offline as scratchpad

deletes scratchpad

Its been like this for a decade now.

With Bruno the key insight was to store collections and requests as folders and files, and design a markup language that makes it easy to collaborate with your team. I wrote about this here: https://www.usebruno.com/blog/the-saas-dilemma

How do you avoid that at Bruno v1.0.0 ? I means Postman playbook > vc funding
Here is how we avoid that in v1.0.0

I have penned down some thoughts: https://github.com/usebruno/bruno/discussions/269

Would love you to hear your thoughts and perspectives.

Just read your idea.

Sometimes, I wish that I am a billionaire, so that I could let people using my software for free, completely. And the key point is, they know that it is free, absolutely. Because I am a billionaire, they know.

So, just keep it up. Anything you wrote is not important than the thing you do. Don't let people sink you in their perspective about the world they saw.

Open-source software needs a ton of efforts, tears, bloods. Above of the passion, you know that it should be pay-off, fair-price at least, for you and your people hard-works.

At the end, plan is just a plan. Just go to have a chance to fix it.

Good luck and best wishes!

MIT license. If the product is success and has significant devs following - they will just fork it from the commit before relicensing.
Yes MIT license is a great plan b. But forking is hard and painful. Elastic/MongoDB/HashiCorp and many more OSS keep moving towards Business Source License to protect themselves from bigtech monetizing the original creators hard work.

What we need is a better approach. One that doesn't involve VC funding. One that keeps the all the incentives of the community, contributors and the creators aligned.

Will share a draft of this approach soon (likely tomorrow) and open it up for community discussion. I want Bruno to be there for the long term.

My only doubt is whether you need to design a special "language" to store the queries/configurations. Wouldn't it be easier to leverage existing languages, maybe something like dhall?
Yes, The language itself went through many iterations. You can look at these 3 iterations here: https://ibb.co/8j8yM1f

First was break a giant collection json and save it as individual files, second attempt was to convert into a dsl (was a bit like xml), the third attempt that is used today to make it even simpler.

The key driving force behind the language design was to make sure that it was simple and readable enough to be able to do a PR review flow in git.

Also, simple enough so that you can open the collection folder in a editor (like vscode) and still be able to make changes

Json didn't support multiline strings. Yaml was indentation hell. I wanted something neat, no need for quotes around strings. And lot of nuances, like how do you store a query param as disabled.

you can read more about the lang design at: https://docs.usebruno.com/bru-language-design.html

Never knew of Bruno, but it's just what everyone wants and needs! Tired of Postman and Insomnia bloat. Code-generation would be a great feature. Good job!
> Fully offline.

There is telemetry. And I didn't find opt in or even opt out code.

> lightweight

Could you quantify? I never saw a lightweight Electron app.

> There is telemetry.

yes, its miniscule. one ping (and that too once in a day) that indicates that an anonymous user opened the app. No other usage details, micro interactions or anything else is tracked. Sure - in the future we will provide option to turn this off too.

> Could you quantify? I never saw a lightweight Electron app.

relatively, compared to the other electron monsters out there. You are definitely not going to native performance and fluidity, but it's a tradeoff that I made to support multiple os.

Also, currently Bruno is just me developing it for the last 2 years. Recently a community has formed around (nice to see) and we have a flurry of new contributors.

Users decide what is miniscule. Everyone collecting data without consent thinks they are justified. And fully offline means fully offline. It is hard to trust false claims and defensiveness.
I think Electron is fine for an application like this. Not much to gain for making a completely bespoke platform UI for a dev tool, and a lot of pain.
I tracked this through the code.

Telemetry is set up here: https://github.com/usebruno/bruno/blob/main/packages/bruno-a...

It uses next.js config which is here: https://github.com/usebruno/bruno/blob/main/packages/bruno-a...

I don't know when this is evaluated, but it seems like if you set ENV=dev it should disable it.

Until the developer changes it with no notice.
Another benefit of electron is that it allows the community to quickly contribute and improve the project via PRs

In the last 5 days, Bruno received 25 PRs. I've already merged 21 of them and shipped multiple releases.

I didn't ask why you used Electron. I asked you to quantify lightweight. And every release was a chance to respect consent.
Probably not a question you like to hear - but right now if I decide to jump from offline postman or insomnia - which will be the biggest pain points that I am to expect?

Edit: And good luck, I have looked quite a bit for project like that.

Oauth2 flow is missing (which should be released by tomorrow), Otherwise you shouldn't encounter any pain points. The app has been in development over 2 years, and community (early adopters) has been using it for over year. It's fairly stable except the occasional blip.

I built the tool for myself, I wanted my collections to co-exist alongside my backend code and be able to version it via git. So I ended up creating a human readable markup language to represent requests so that we can use git to version it.

I hope you like it :)

I see the claim of saving everything on the filesystem and collaboration via git.

- Is there a way to handle secrets outside of this flow? - Can we set/reference variables between collections? collection A sets a variable, collection B uses it.

also, a small bit of feedback from someone that briefly played with Bruno this morning.

- moving requests in a collection via drag/drop isn't obvious and it's actually a pain if you're trying to replace the top item. - if I duplicate a request I want the new request highlighted and I would personally prefer if the same tab was opened

> I see the claim of saving everything on the filesystem and collaboration via git.

yes, ALL IN on git :) based collaboration

> Is there a way to handle secrets outside of this flow?

Check: https://docs.usebruno.com/secrets-management/overview.html Two ways of handling secrets.

> collection A sets a variable, collection B uses it.

In bruno collection is the first class citizen, environments reside inside a collection. There is plan to support global environments for the use case you mentioned.

> moving requests in a collection via drag/drop isn't obvious and it's actually a pain if you're trying to replace the top item.

yes, this ux needs to be improved and there is a bug in drag and drop which should be fixed.

Excellent, thank you for the quick response.

I'm guessing your recommendation for dealing with separate environments (dev/qa/etc) would then be a single collection with folders underneath and environments defined w/i that collection.

In that sense collections for bruno seem to be more akin to "projects" and are not really equivalent to postman collections in that sense.

That's workable, it good to know the environments are collection specific rather than global.

Exactly!
Great product, thank you so much!

I am curious: why the request to support OpenAPI turned up only 2 weeks ago? In my bubble it is an ubiquitos format where everything starts and from where any additional data added up.

It's actually been up for almost a year, but many issues are not de-duplicated: https://github.com/usebruno/bruno/issues/81
I installed its just what I need! I used insomnia for quite a while because postman has become completely unusable bloated piece of crap and now it seems insomnia will do the same.
Stop.

We don't talk about Bruno.

/S

Sorry, couldn't resist. :)

We don't talk about Bruno. no. no. no :)

We don't talk about bruno.

BTW, GRPC will be supported soon. Will create a roadmap section in the docs.

I think docs need simple list of what exactly supported (and what is not) by the Bruno. E.g. is GRPC supported?
Awesome! I've spend 30 minutes searching for an alternative, but it's all crap. This looks really good! Simple light weight, we basically just need a simple gui over curl.. Thank you for this

May I ask why .bru? I would really recommend using a standard format. https://xkcd.com/927/ etc..

checkout this github discussion: https://github.com/usebruno/bruno/discussions/360