🛠️ braid

Braid is a team chat application with a novel UI: instead of chatrooms, it's based around many separate conversations.

Conceptually, it's most similar to email (and in particular, Gmail): an inbox, with multiple conversations (emails), each of which is a single thread. You can have many conversations on the go, hide them when you're done with them, and they pop back in your inbox when there's activity. Conversations can be tagged (with multiple tags), and each team member can subscribe or unsubscribe from a tag - so tags can be used to include or exclude groups of recipients (and also help with search).

The main advantage of this UX approach (vs the chatroom UX of Slack and Teams) is avoiding FOMO and having tidier conversations.

It's open-source .

History

In the early days of Bloom, we used HipChat as our team chat app (this was before Slack existed). It was alright, but even with just 4 of us, I found the chatroom style lacking:

I was ready to drop back to just using email for team conversations. Or maybe try a forum?

Slack exploded into the space and became the new shiny for every startup to adopt - while I continued shaking my head (honestly, it didn't feel that much different than HipChat).

In my minds eye, each conversation was its own "thread of thoughts", and deserved its own interface. It was infeasible to create a chatroom per conversation, as much as I would like to, ....so what if you got rid of "rooms" altogether?

Once the idea crystallized, and I found some free time during a weekend at the farm, I started hacking a little something together. It was also an excuse to try Datomic again - we had used it for Cyberleague, but I didn't feel I had a good hang of it. So, after a few hours in the hammock (literally), I had a single page with ethereal chats peppered about in masonry style.

We switched to it at Bloom, loved it, and kept making a few small tweaks here and there. It was simple, but it worked for our needs.

(TODO dig up my old laptop to find an old screenshot of what it looked like back then.)

In early 2016, I mentioned Braid in the now burgeoning Clojurians Slack. It happened to be a good time, because the community was growing fast and hitting Slack limits; plus, many were annoyed with Slack's limited history and closed-garden approach. Braid offered an open-source alternative, in Clojure no less! Tens of people poked around Braid, asked questions, and suggested new features.

I was so excited by the attention, I barely slept for days, cranking out changes and new features (Hypomanic episode maybe? Doc said "No, that just sounds like excitement." Uh huh. If that was excitement, then I have never been excited at any other point in my life, and gaaaawds, I want that feeling again).

Alas (for us), the Clojure community was able to secure a group sponsorship from Slack, which greatly tamped down the fervour for an alternative. Administrators were also concerned about losing many people in any transfer. The members would likely have preferred a 1:1 user experience to Slack and IRC, rather than something novel. (To this day, the Clojurians Slack survives, and is the most active community, even though there are also Clojure Discord, Reddit, Zulip, and Disourse forum.)

But we kept working on it. Dogfooding. Around the same time, Lean Pixel turned into Bloom (less consulting, more product), and Braid became one of our primary efforts. Lots changed: multi-group support, bot support (with James writing several bots in several languages), search, and an attempt at a mobile experience.

A community member, who was very engaged, applied to present Braid at the Conj and got in. A little awkward, because it would have been a bit more appropriate to have us - the creators - present, but sure, whatever. Unfortunately, said person ended up bailing out last minute, upsetting the organizers, and going no-contact. (There's more to this story, but this is not an appropriate venue for it.)

Around the same time, I was teaching at Lighthouse Labs, and one of the founders saw Braid over my shoulder, became curious, then excited, and wanted to adopt it ...but, it was later rejected by his other founder (another lesson in treating corporations as schizophrenic entities).

This pattern would happen several times - some maverick would find us, grok what we were doing, but then fail to convince the rest of their team to switch. (Maybe if had done more to help them convert their teams, maybe if we had a better sign up UX.. maybe if we had...)

We had a hard time converting customers. Most organizations didn't even use anything like Slack, or if they did, it was the hot new shit and what do you mean it will ruin the attention span of our employees? (I liked to tell people: Slack is the digital equivalent of an "open-office" - and if you think that's good thing, all power to you; but if you hate open-offices? Ah, well then... you might actually appreciate Braid). Braid solves a subtle problem, which the decision-makers involved don't often see as a problem: non-technical managers loooooove open-offices; it's the same twats that are calling their remote teams back into the office post-COVID, and it's the same people deciding how their team communicates.

Slack eventually released "threads", which somewhat alleviated the issues that Braid was addressing, but, IMO, its a kludge (definitely not biased).

Other ventures eventually stole the attention at Bloom (which was Bloom functioning as designed), but we continued using it as our daily driver.

After a few years, (~2020) a real-estate entrepreneur saw the potential of Braid's UX to power a workflow process, and hired us to build an MVP on top of the Braid codebase.

This is one of the things I'm most proud of with Braid: the "plugin" architecture. Back when we were cranking out features, I was beginning to feel the "ball of mud" forming and sought to rein it in with a designed inspired by Wordpress' and Drupal's plugins. We started to organize features in append-only modules which contained all the code to implement a feature end-to-end (often with UI and backend code in the same file - thanks to cljc.). This is similar to Micro-Frontends (but backend included too). I did a talk about it.

Anyway... the real-estate venture didn't pan out (as expected of early ventures), and not much else has happened with Braid since. We probably could have capitalized on the pandemic better, but you know, there was a lot going on. And so it goes.

Even with all its rough edges, Braid has been "good enough" for Bloom. But we're weirdos.

Future

I still believe chatroom based software has the same problems that Braid initially set to solve. Teams are inadvertently hurting themselves by cargo-culting Slack or Teams.

Maybe now that chatrooms are universal, there are enough people who feel the pain the Braid was meant to solve?

But also, personally, having spent a lot of my mind time in this space, I have grown to believe that "group chat app" is not an app category that should exist at all (!).

My present thoughts on the matter are:

Maybe we build on Matrix this time around, and focus on bridging all-the-chats?

Maybe there's an opportunity to display the same conversations in different ways, as Slack-style threaded chatroom, Braid style collection of vertical chats, a Discourse-like forum, or a email inbox?

TBD...

2021-05-25
braid
:project-started-on2015-07-10
:project-updated-on2021-05-25
:post-created-on2025-10-03
:post-updated-on2025-10-03
:linkhttps://www.braidchat.com/
:repohttps://github.com/braidchat/