Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Show HN: Linen – Open-source Slack for communities (github.com/linen-dev)
292 points by cheeseblubber on Oct 18, 2022 | hide | past | favorite | 76 comments
Hi HN, My name is Kam. I'm the founder of Linen.dev. Linen communities is a Slack/Discord alternative that is Google-searchable and customer-support friendly. Today we are open-sourcing Linen and launching Linen communities. You can now create a community on Linen.dev without syncing it from Slack and Discord!

I initially launched Linen as a tool to sync Slack and Discord conversations to a search engine-friendly website. As I talked to more community managers, I quickly realized that Slack and Discord communities don't scale well and that there needs to be a better tool, especially for open-source knowledge-based communities. Traditionally these communities have lived on forums that solved many of these problems. However, from talking to communities, I found most of them preferred chat because it feels more friendly and modern. We want to bring back a bunch of the advantages of forums while maintaining the look and feel of a chat-based community.

Slack and Discord are closed apps that are not indexable by the internet, so a lot of content gets lost. Traditional chat apps are not search engine friendly because most search engines have difficulty crawling JS-heavy sites. We built Linen to be search engine friendly, and our communities have over 30,000 pages/threads indexed by google. Our communities that have synced their Slack and Discord conversations under their domain have additional 40,000 pages indexed. We accomplish this by conditionally server rendering pages based on whether or not the browser client is a crawler bot. This way, we can bring dynamic features and a real-time feel to Linen and support search engines.

Most communities become a support channel, and managing this many conversations is not what these tools are designed for. I've seen community admins hack together their own syncs and internal devices to work to stay on top of the conversations. This is why we created a feed view, a single view for all the threads in all the channels you care about. We added an open and closed state to every thread so you can track them similarly to GitHub issues or a ticketing system. This way, you and your team won't miss messages and let them drop. We also allow you to filter conversations you are @mentioned as a way of assigning tickets. I think this is a good starting point, but there is a lot more we can improve on.

How chat is designed today is inherently interrupt-driven and disrupts your team's flow state. Most of the time, when I am @mentioning a team member, I actually don't need them to respond immediately. But I do want to make sure that they do eventually see it. This is why we want to redesign how the notification system works. We are repurposing @mentions to show up in your feed and your conversation sections and adding a !mention. A @mention will appear in your feed but doesn't send any push notifications, whereas a !mention will send a notification for when things need a real-time synchronous conversation. This lets you separate casual conversations from urgent conversations. When everything is urgent, nothing is. (credit: Incredibles) This, along with the feed, you can get a very forum-like experience to browse the conversations.

Linen is free with unlimited history for public communities under https://linen.dev/community domain. We monetize by offering a paid version based on communities that want to host Linen under their subdomain and get the SEO benefits without managing their own self-hosted instance.

We are a small team of 3, and this is the first iteration, so we apologize for any missing features or bugs. There are many things we want to improve in terms of UX. In the near term, we want to improve search and add more deep integrations, DMs, and private channels. We would appreciate any feedback, and if you are curious about what the experience looks like, you can join us here at Linen.dev/s/linen



If I'm an organization choosing a chat platform, why would I want to use Linen versus Mattermost, which is also self-hostable and open-source, and much more mature? Or Matrix and Element (or any other Matrix client)?

This space is getting pretty crowded, and I'm not sure why I'd want to use Linen rather than one of the many alternatives.


Sure thing. Mattermost and most open source chat tools not Google searchable. They can offer public communities but unless they are rendering static version of the site it is really not SEO friendly. They are very enterprise/security focused so if you want something secure and private Mattermost is fantastic.

We started out making Slack and Discord Google searchable and search engine friendly see: kotlin for example https://slack-chats.kotlinlang.org/ they have around 50,000 pages indexed by Google. We render a static version for Google while giving you the real time experience of a chat app.

Secondly most large communities end up being a community support channel. So for anyone with customer support experience having your conversation in one place is really crucial as well as some sort of open close state. I was also the author for https://github.com/papercups-io/papercups which made me a bit opinionated in terms of community/customer support

Finally most communities end up being too noisy and in part is because it is designed for chat. I actually don't think there is a great solution out there to manage conversations at a large scale and we think we can innovate on the UX of it.


What are your thoughts on Zulip? Their priorities and yours seem to align. I see you have threads but they look more like Discord threads rather than how Zulip does them.


I'm not an expert on Zulip by any means but I'm always a fan of other open source projects.

Beyond what we have right now, we want to design Linen to be a thread-first tool (hence the name). We wanted an experience familiar to users of chat communities but encourages thread usage natively. We want to do things like letting you move messages between threads and threads between channel. Which I think Zulip has that functionality. We just haven't had the chance yet because the scope is so big and we wanted to ship something quick and get early feedback.

Would also love to hear about what you really enjoy about Zulip.


I've also mentioned this in a separate comment in the post but reposting here for visibility:

To clarify Zulip let's you export their conversations and then render it by generating a static HTMl similar to https://leanprover-community.github.io/archive/ You'd have to use https://github.com/zulip/zulip-archive to achieve. You can see it in the Caveats sections in their documentation https://zulip.com/help/public-access-option#caveats They are working on it here: https://github.com/zulip/zulip/issues/21881 Zulip lets you browse conversations of public conversations but that is very different than the app being natively search engine friendly and indexable.

The difference between Zulip's implementation and Linen is that you don't need a separate UI when someone finds a link in Google. If you find a link through Google you get a dynamic real time experience instead of a static page.

If you google site:rust-lang.zulipchat.com you won't see any results. If you do the same with site:slack-chats.kotlinlang.org you'll see at least 20,000 results


Zulip have publicweb channels support which is totally google indexable. Check rust community


Threading is the killer feature of Zulip I think


Yes and conversation histories can be published too.


Having these communities google searchable is actually a really cool feature. I don't understand why companies create "open" communities (that are mostly dead anyway) and everything talked about in there is not indexed at all.

That is horrible for the actual users, even more so if you go with the free Slack option which only gives you access to 90 days of messaging history. How can you find discussions about specific topics if it's not really searchable.

Managing conversation at large scale has been done. Remember "old" forums/bulletin boards that were really popular in the early 2000's? They actually were communities, even though some were rather toxic. They were searchable. Discussions happened naturally.

Anyway, wish you the best for your project!


Perhaps you can try https://bip.so to convert your Slack threads to documents for future reference. Checkout https://youtu.be/Unco3aCZbLs


> Mattermost and most open source chat tools not Google searchable.

This seems like a good idea for a bot built with https://github.com/turt2live/matrix-bot-sdk (which is very easy, I've used it for a few small projects).

The SDK has a callback for each new message - you could just put it into a DB and then render to static text.


We love Mattermost for our organization; it feels nicer to use it over Slack/Discord because we're also FOSS. Our next iteration is to be moving to a more protocol oriented method - which means Matrix or ActivityPub even.

We don't care if our chat is search-indexed; it's mostly internal; there are client channels, specific topic channels. At least for our case being OUT OF SEARCH is better. However, we do use the conversation as seeds for our help-docs, blog post, etc, etc.

Perhaps Linen could be the winner by putting Slack+Discord+Mattermost+Matrix+ActivityPub in to a better search-index.

Anyone remember MARC? -- https://marc.info/


My team is an OSS project using Discord and have setup bots to connect to Element/matrix to test bridging and moving if it makes sense.

But I second this call.. the goals for Linen of searchability and better UX are great. I'd be inclined to try it out if it could replace Element for us, but yeah, would have to be connected to Matrix. Orr, Element if you're listening, maybe collaborate with Linen and/or copy their features around search.


We did that with rocketchat/slackbridge before we just made a full switch to mattermost. The slackbridge was a wonderful tool and I wish that functionality existed for mattermost..


I think it's misleading to call Mattermost "open source". Mattermost the for-profit company makes two products, one of which is open source, and a much larger one (which is approximately feature complete wrt modern Slack-likes) which is absolutely not.

The open source product they make does not work like a normal open source project: submitted improvements to it will presumably be denied if they add functionality that exists in the proprietary and closed source second product, also called Mattermost, or if they serve users (like removing the silent and nonconsensual phone-home spyware from segment.io that they embed in the released binaries). It's a normal and expected thing in the open source world for user communities to be able to participate in the software project. That's one of the defined goals of the idea of open source: you can fix and improve it, and share your fixes and improvements.

Mattermost the company is not really an "open source company", as they build and sell proprietary software as their main source of revenue. Their goal is increasing the use of proprietary software, and every user of the open source Mattermost is a target for them to convince to stop using open source and start using proprietary software. This is presumably why they make their open source version phone home to tell them about your usage of it, so that they can try to get you to pay them to start using the proprietary one if you get big/rich enough.

Furthermore, to even contribute to the "open source" project of Mattermost, you are required to sign a CLA, because they want to be able to resell your work commercially under nonfree licenses. You'll note there is no CLA required for most real open source work, because they don't care if you retain copyright - the open source license is all they need. There is no CLA required to contribute to Linux or gcc.

Mattermost the software is not really an "open source project" because you can't meaningfully improve the software as the maintainer has a vested financial interest in keeping basic features (like message expiry/retention periods/SSO) out of it to direct the community to become paid customers of their proprietary software.

Mattermost wants to use the work of contributors to an open source project to further their proprietary software goals, while maintaining their open source bait as a neutered stub.

It's open source in name only. The real Mattermost product is proprietary and the open source version only exists as a fake open source project to serve as an onramp for selling their closed source proprietary one.


> [Open-core Software Firm X] wants to use the work of contributors to an open source project to further their proprietary software goals, while maintaining their open source bait as a neutered stub.

Source-available software: https://en.wikipedia.org/wiki/Source-available_software

Open-core model > Examples: https://en.wikipedia.org/wiki/Open-core_model#Examples

Who can merge which pull requests to the most-tested and most-maintained branch of a fork?

CLAs are advisable regardless of software license.

Re: Free and Open Source governance models: https://twitter.com/westurner/status/1308465144863903744


One reason you may not wish to use Mattermost is because they embed spyware into the server that phones home without consent.

Additionally, their feature gap between their paid enterprise proprietary version and their free software version is really telling: they don’t believe in free software as a philosophy and are just using free software licenses as marketing bait.


Source for said spyware? Was not aware of this.


It’s the segment.io client library. I started binary patching mattermost installs and also using NextDNS on my servers too to monitor/block dns traffic to ad/spyware domains.


I would imagine there are different between analytics and spyware.


Analytics systems that ask for informed user consent before transmitting are fine.

There is no semantic difference whatsoever between silent analytics that assume consent (i.e. "opt out") and spyware. Both invisibly transmit user data off the system without the consent (and usually without the knowledge) of the user, exfiltrating stolen information.

Tellingly, the variable used for configuring this in Mattermost calls it "diagnostics", further obscuring its functionality.

If privacy is a human right, then this software by default violates the human rights of its users.


Related:

From idea to paying customer - https://news.ycombinator.com/item?id=32104669 - July 2022 (81 comments)

Linen – Make your Discord community Google-searchable - https://news.ycombinator.com/item?id=31494908 - May 2022 (29 comments)

Show HN: Linen – Make your Slack community Google-searchable - https://news.ycombinator.com/item?id=31168882 - April 2022 (57 comments)


Kudos to you for taking a shot at this. You might get some negative comments here but don't let it deter you. You're on to something.


Just a note to say that if you are using Matrix and want your conversations to be indexed in search engine ("Google-searchable"), you can deploy matrix-static[1] or you can use the live instance hosted by the Matrix foundation[2].

I think an interesting comparison, for both Linen and Matrix, would be to compare these 2 approaches: Linen natively indexed conversation and this Matrix "static" client. I would be especially interested by what additional features Linen provides in term of indexing compared to this static client.

[1]: https://github.com/matrix-org/matrix-static [2]: https://view.matrix.org/


(heads up that we're about to replace matrix-static, which powers view.matrix.org, with https://github.com/matrix-org/matrix-public-archive - which is a way better public archive interface for Matrix, built on Hydrogen)


Our tech stack if anyone is curious: Tailwind, Nextjs, Prisma, Elixir, Postgres

Also let me know if there are any questions that I can answer!


For those interested, the Elixir part is the "Push Service", which is a simple Phoenix API: https://github.com/Linen-dev/linen.dev/tree/2d0ac2727e17a72b...


Second time I've seen Linen shared on here. Great to see the evolution.

Do the three of you work on this fulltime?


Yep all three of us work full time on this


May I suggest you create an #issues or #feedback in Linen to show off the capabilities as well as perhaps allowing the feedback to live on your platform rather than in HN comments?

The signin experience is wonky for me, and I think it may be part of my secondary complaint that there doesn't appear to be any way to manage my "identity" on the platform

I do see in the XHR that it has support for `displayName` and `profileImageUrl` but there's no obvious way for me to manage those things. And, because it seems to be in the channel JSON versus in the /session response, it makes me wonder if (like with Slack, barf!) I have to set them anew for every community I join?

When I say "signin is wonky," I mean that after authenticating, the "Join the conversation" button remains as a call to action no matter how many times I click on it. And then if I click on the Linen logo, it always says "Sign in" as if it has forgotten who I am, but it clearly knows who I am because going back into the https://www.linen.dev/s/linen/c/default carries a bunch of authentication cookies and I can see myself in the XHRs


Good suggestion I've created https://www.linen.dev/s/linen/c/feedback

We have displayName and profileImageUrl but haven't gotten around to letting you set it yet. We built a Slack and Discord sync first so we had these attributes. But I agree with you we want to let you set a single account with profile images across different communities.


We added the logout button along with fixing the "Join the conversation" button.


Looks really nice, I've looking to migrate away from Gitter, whose development stopped already long ago.

For open source project support channel use, I'd strongly recommend adding GitHub login. Most projects are hosted on GitHub anyway and users who have filed issues already have an account there. In my experience one of the most important features of an open source project support channel is as low of a barrier to entry as possible.


Really nice work, and it's very pretty... so I feel bad for saying this..

Zulip has really won my heart. It's not perfect, but up-front nature of the threads, the ease of integration and the minimal but extremely useful built-in set of tools (like a clock that is always the correct timezone for all people viewing it, simple polls and the ability to spawn jitsi sessions)

I'm really hard pressed to even try anything else, I'm all-in on Zulip.


I havent used Zulip. Is Zulip searchable and indexable through search-engine (at least Google?). If yes, I agree that Zulip is a better fit as its a more mature product. If not, the use case Linen is solving here is totally different.


Yes, Zulip chats and histories can be published and indexed as an opt-in feature.


To clarify Zulip let's you export their conversations and then render it by generating a static HTMl similar to https://leanprover-community.github.io/archive/ You'd have to use https://github.com/zulip/zulip-archive to achieve. You can see it in the Caveats sections in their documentation https://zulip.com/help/public-access-option#caveats They are working on it here: https://github.com/zulip/zulip/issues/21881

Zulip lets you browse conversations of public conversations but that is very different than the app being natively search engine friendly and indexable.

The difference between Zulip's implementation and Linen is that you don't need a separate UI when someone finds a link in Google. If you find a link through Google you get a dynamic real time experience instead of a static page.



Public web access doesn't equal search-engine index-ability. Search engines are notoriously bad at crawling Javascript heavy sites like chat apps. We spent several months of engineering time getting this right.

This involved redesigning our pagination system to be a cursor based one so search engines can paginate it consistently, rendering a static version of Linen, generating sitemaps for large communities (50k+ members), and updating SEO metadata for search engines.


What might be useful is having an example comparison of how SEO indexing can make Linen standout compared to Zulip when searching for chat messages.


Thank you for the detailes response. This is a killer feature that can help Linen differentiate from others I guess. Good luck


The more I use Matrix and Element, the more convinced that its the way to go. The ability to see lf-host, e2e encryption, optional federation... And if you use Element you get threads, audio/video calls, etc. Apart from name recognition, what does Matrix not have that all of these other apps have?


I really like the idea and motivation here. I’ve always preferred forums over chat for the reasons you described. Hopefully this gains traction.


This looks great. For public communities / support things I start in the future I'll seriously consider it. For my _current_ non-work slack things.... i really _don't_ want them to be google indexed.

Having the ability to disable google indexing would be a big deal for me, and if available would make me seriously consider switching our current slack off of it. We really don't like the 90 day data limit, but it's a small private group and we're not about to pay whatever the monthly per-seat fee is just to be able to search our past stuff.

Also, I love the !mention vs @mention distinction.


Pitty, I thought it was software that can be self hosted. I have a few potential applications.

Is anyone aware of any open source high performance chat/community solutions that can be self-hosted?



Thanks


Are you sure it's not self-hostable? https://github.com/Linen-dev/linen.dev/blob/main/docs/nextjs... seems to imply there's a local dev story. While I'm not familiar with next.js in order to know how dependent is is upon them, versus it's just "a handy place to run node apps," in my mental model if there's a local story there's a local docker-compose story

The AGPL part is a separate ball of wax entirely


Matrix/Element? IRC? :D


See also: rocket.chat, and xmpp/jabber.


Mattermost.


Care to share those ideas?


They are all very niche, I have the domains and in some cases popular people to make them attract users, but I'd like to be the first to fill those niches, sorry.


This looks pretty cool.

If I may ask a stupid question (to anyone that knows). I think the biggest thing at least for the companies I've worked with and my teams in especially, is screen sharing.

What's the barrier to entry there? Is it possible to do something like peer to peer? Or are the server costs just heavy? Is it a hard problem to solve? I couldn't find any really free screen sharing besides discord, microsoft and google (tbh, I didn't look really hard tho).


The short answer is that it is a lot of work. The skills and engineering you need to build a video streaming system is quite complicated. There are several companies who purely specialize in it. We’d rather be the best for community chat than an OK tool for a lot of things. Especially since our team is so small


Wouldn't it be possible to build something atop AWS Chime?


totally makes sense! Didn't want to imply any direction!

I was just curios as to why/how so little companies/SaaS offer it.


I long loved Facebook's Workplace, but I feel like it hasn't gained adoption. I think something that mixes chat with support for longer-form discussion would be great.

A potential bug. I signed up and went over to https://www.linen.dev/s/linen/feed

I tried "closing" an item that showed up in my feed, but it doesn't look like it did anything.


Ahh sorry about that our permission only let's admins close threads right now but will fix that soon


One problem with choosing a collaboration platform slash messaging app for a development team is that, once you got one running, it is very difficult to test and switch to another.

I would, for one, love to see a good comparison of all the contenders in one place - Slack, Linen, Mattermost, Zulip, Twist, Element, Discord etc...


I made a Poll

https://news.ycombinator.com/item?id=33253419

Maybe we can collect details there.


The problem of new chat platforms these days is they bring nothing new to table compare to already available opensource chat platforms. matrix is leader in that space thanks to it's open specifications and only other opensource chat platform worth mentioning is zulip, which made totally different experience and refactor the way we communicate online.

We had switched from slack to discord, to mattermost to matrix, and finally end up with zulip and we don't see any competitor.using for 3 years now.

1. Thread focus communication

2. Well written code based with Django

3. Vim like chat navigation

4. Really good performance in server compare to matrix and mattermost ( well architectured, proper caching with redis, queuing systems etc)

Checked linen and it brings nothing New vs rocketchat or mattermost


> they don’t bring anything new to the table

Respectfully, I’d prefer a barebones chat app, that takes more OFF the table. I just need to type words at people and do search.

Something like: e-mail.


You may use Deltachat then, or IRC


>Slack and Discord are closed apps that are not indexable by the internet

This is a incorrect. It's not hard to make crawler that can crawl and index discord and slack communities. Just because Google doesn't do it, that doesn't mean it's not possible. If it were true slack and discord wouldn't be able to let you search messages. Both of them include a search feature so clearly they are able to be indexed.


This looks like a forum software disguised as a chat platform and I wonder who this is good for?

Chat tools like Slack, Mattermost, etc. are mainly used for internal team chats.

Forums are used for public communities on the internet which are search engine friendly.

This feels like a weird in-between and I'm not sure I'd prefer a "chat" for public discussions over a traditional forum, which IMHO has a better UX for this type of content.


>This looks like a forum software disguised as a chat platform and I wonder who this is good for?

>This feels like a weird in-between and I'm not sure I'd prefer a "chat" for public discussions over a traditional forum, which IMHO has a better UX for this type of content.

You've spelled out the target audience. More and more communities opt for Discord/Slack/etc as their interface of choice; this just makes them not a silo.

The biggest competitor to this IMO is whenever Discord puts an option for their forums product to index in search engines.


This looks great and glad to see it's open source.


Unless all my favorite communities move to this tool, I'm not going to add yet another tool that will demand more time and effort. A better tool would be that consolidates all communities and chat in one place.


https://matrix.org and its own bridges


Looks like the service that mxstbr and team built and sold to GitHub.


Really glad to see the work to take these tools to the next level. The feed view and the !mention are great tools, and have long been needed!


So how's this better than matrix on one of the major free home servers? Better archives and exposure to search engines?


This looks fantastic, congrats to the launch!


But does it have an IRC gateway?


This is awesome. So excited to see where you folks take Linen! :)




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

Search: