Show HN: Linen – Open-source Slack for communities (github.com)
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
76 comments
[ 3.5 ms ] story [ 203 ms ] threadAlso let me know if there are any questions that I can answer!
Do the three of you work on this fulltime?
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)
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.
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.
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.
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.
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
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.
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!
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/
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.
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.
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.
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.
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
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
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.
Is anyone aware of any open source high performance chat/community solutions that can be self-hosted?
The AGPL part is a separate ball of wax entirely
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...
https://news.ycombinator.com/item?id=33253419
Maybe we can collect details there.
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.
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.
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.
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.
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).
I was just curios as to why/how so little companies/SaaS offer it.
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/
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
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.
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.
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 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.