Zulip 2.0: Open source team chat
blog.zulip.org
blog.zulip.org
Two features in particular make me feel it's helping me rather than just trying to soak up my time and attention. One is the "topic" organization, which is especially useful for conversations that span a length of time. A serious downside to HN and Reddit is that discussions flare up for a day and then become dead. Topics solve that, and have the added advantage (compared to, say, IRC) of being linkable, so I can point people to an existing discussion.
The second is the unified chronological display. This lets me catch up quickly with lots of discussions at once, as opposed to digging through a page for each conversation and then sifting through timestamps to find the new comments.
Disclosure: none. I'm just a happy user, and it's generously available for free to all open-source projects. I have no connection to Zulip or Tim, other than being fellow Recursers (which is probably how a lot of Zulip users get hooked).
Have you tried a modern forum, like Discourse? I'm trying to understand why many open source projects opt for chat platforms instead of a forum. Why are you resignating public and search engine accessible discussions?
the best will be chat+forum, and support mailing list style digest, also support post-by-email
Public web archives are a goal, and either we'll deploy a bot to publish them, or I've heard rumors this feature may be added to Zulip itself.
In the meantime, it's kind of nice not having everything immediately publicized. We've had (knock on wood) exactly zero problems with spam users, even though it's open to everybody with a Github account. I'm also (if temporarily) enjoying the freedom to talk a bit more intimately, for example I'm discussing a major project I'm considering taking on.
One thing I'd be interested in feedback on is how folks would feel about an ugly/janky version? There's a few different versions we've talked about:
* Being able to use the main Zulip user experience, with "public user" data (no unreads, can't send messages, etc.). This would be best as an actual browsing experience.
* Having a totally new webpage that's mostly just HTML+CSS (better for search engines) similar to our digest emails.
Possibly we'll eventually do both, but I'd love feedback on which of these open source projects care about the most.
(In any case, it'd be configurable at the stream level, so you could have some but not other streams that are public in the organization be publicly archived; we already have the data model for doing that).
For people who actually want the Zulip experience, I have no problem just asking them to sign up for real. Since we have open signup based on github login, it's a pretty small barrier.
It's often better to have both, I think.
Discourse is also very wasteful of space for anything but long-form prose: a single line of text is 180px high (in other words, a typical screen will never under any circumstances fit more than five comments on the screen at a time), and a single-line quote from someone else adds 80px. Compare discussions here on HN with Discourse. I’d much, much rather work here. (Yes, their purposes are somewhat different, especially as regards ordering; and applying the HN structure to longer-term discussion would require changes of some form, because it wouldn’t work if you just took it verbatim.)
If I had infinite time, I’d write a leaner frontend for Discourse with much less magic and much less wasted space.
At FastMail with our group email system Topicbox, we put a link to the archives for the current email in the mailing list footer, and that’s the favourite feature of quite a few of us in the company, and we’ve heard similar from our customers too. (Not sure why Mailman doesn’t do this, it’s super useful.) This gets around the need for a single frontend. Something IRC-like could work that way if each line sent included a URL, e.g. in JSON {"speaker": …, "url": …, "time": …, "text": …}. I have no idea at all if the likes of Matrix can or do work that way.
You get bonus marks on a feature like this if it includes meaningful content in the URL, e.g. Zulip’s URLs, although a tad ugly, include the stream (a slug) and topic (slightly weirdly encoded rather than slugified, but still present and readable). That way I can look at a URL and have a fair idea what I’m getting myself into. (URLs are definitely UI.)
I believe this is because mailman doesn't have an integrated archive - it would have to ask hyperkitty (or pipermail etc) for an url to include in the outgoing message.
I'm sure it could be changed, but probably reflects that mailman is "mail first", for better or worse.
Granted, this is really bad when compared with an integrated archive, but it makes it at least possible. You could easily then go on from there to automatic configuration for specific archive systems.
A suggestion for the Zulip team: email is the hardest part of setting up any self-hosted solution, and Zulip is no different. You covered a lot of bases in your email section: https://zulip.readthedocs.io/en/stable/production/email.html
However it's still too difficult for many people to setup an account with an ESP, get the SMTP creds, and configure Zulip to use it correctly. It's a big step for people newer to self-hosting. I would suggest meeting somewhere in the middle for those people, by offering a paid self-hosted tier that handles some of the "harder" stuff for them. You can see how the popular 3CX phone system does this for inspiration: https://www.3cx.com/docs/fqdn-management-allocation/
All 3CX accounts receive a FQDN and confirmation emails are routed through this managed service, no configs needed. You could charge perhaps $80/yr for this tier, so customers wanting to host their own data can do so, but have SMTP and DNS managed for them by providing them with a Zulip subdomain, like Slack does.
* Do people running on-premises actually want us to be an intermediary for all the emails their Zulip server is sending? I would imagine if they were happy with that, they'd be happy to just use Zulip Cloud.
* How does 3CX avoid this service requiring them to do a bunch of anti-spam work?
- 3CX has a footer in each email: This email was sent from an 3CX SMTP Relay Service. If you suspect the service has been used unlawfully and/or outside the scope of delivering 3CX Phone System related emails, please file an abuse report here: https://www.3cx.com/smtpabuse
How much work this requires on their end to keep clean is unknown, but definitely a concern as well.
* There's active work on replacing the top-navbar/search area with something nice and clean that displays the stream description, number of subscribers, and other details.
* Our current visual density is really good for power users, but . zooming to 110% makes some people a lot happier and makes Zulip look more modern. We're working on changing the default visual density to look more like that, while leaving the current styling as an option for power users.
* You should try the night theme (in "display settings") -- a lot of folks who are picky about design prefer that one.
I'm trying to convince a team to go to Zulip but the design adds an extra roadblock which makes it just that much more of an uphill battle.
I use Slack for some projects currently, and it's pretty good most of the time, and brilliant some of the time. The UI is slick AF but it stumbles some places, such as spreading UI verbs around the menu bar, a pop-up menu, and a button bar without having the menu bar replicate things like accessing the pinned items pane, which is only a tiny monochrome button in the tiny button bar. IOW it's slick until it isn't.
Overall I'd say if you add Zulip to your task list for setting up a coding workflow you won't regret it. Slack is a little easier to get non-technical people on board, especially if they are more smartphone UI oriented, but Slack is no bed of roses, either, when it comes time to explain to users when channels, threads, topics, stars, and pinning are useful.
If every Slack post had to be either the start of a thread or a reply to a thread, you'd basically have Zulip. The hardest part is conditioning everyone to use good thread names and not establish topics that are overly broad or narrow.
We have migrated from HipChat and 1st we tried was Stride then Zulip, where we stopped.
Main complaints regarding Zulip were (are) Windows client not stable, UI a bit clunky.
And we put a ton of effort into making the upgrades, even for major releases like this, be a single command that Just Works for almost everyone.
I know this because I personally respond to every single report of issues installing/upgrading Zulip and have been making changes (even if the issue is basically user error) after most of them to help ensure they don't happen again for a few years now.
That said, if you don't want to deal with doing that work, Zulip Cloud is very reasonably priced for situations where all the users are employees (compared to payroll, it's effectively free) and for other use cases, we have steep discounts (e.g. free for open source, a huge discount for education, etc.).
Adding custom keywords -- Zulip calls them linkifiers -- took a fair amount of time, but we have about 25 of them and few of them resembled each other much.
Since install day, it really hasn't required much maintenance.
I just upgraded to 2.0 and was so damn impressed with upgrade code. I run Zulip in a VM with an NFS root, and hit some random NFS bug that resulted in this error:
... Found existing installation: cryptography 2.3 Uninstalling cryptography-2.3: Successfully uninstalled cryptography-2.3 Could not install packages due to an EnvironmentError: [Errno 16] Device or resource busy: '.nfs00000000016cef5200000f9e'
... `pip install` failed; retrying... ...
Then it succeeded, all by itself.
I'm not sure of your proficiency, but if this is a public-facing server you may want to either go with their paid service or hire someone to do the initial setup and walk you through maintenance since there's more to securing a server than just installing and getting it working.
Does it merge multiple consecutive messages from a single user into a single Zulip message?
Are all replies from a channel just a never ending thread that goes on and on forever?
I might have to try it to find out.
I have noticed that there are people who either purposefully, or unconsciously, do not use threads. They litter the stream by making sentences instead of paragraphs. What I don't understand is how could Slack not see this as an issue?
From my individual's perspective, I don't get the idea of chats as a one liner when topics should be contextualized via threads.
Whereas I used threads all the time in Zulip, they are really not great in Slack, and mostly just useful for reducing noise for off-topic discussion.
You may find this old conversation amusing:
Similar issues exist in email communications. I feel like these are really more just issues with the person's ability to communicate. Perhaps the technology can help, but I'm having trouble imagining how.
Unfortunately, I've tried to educate some of these types of users that I know (e.g., showing them that Slack's formatting options exist, are easy to use, stop quotes from randomly getting turned into smart quotes), but IME communications skills are one of the last things people are willing to accept feedback on. I find it often just gets acknowledged "oh, that's great, thanks!" and then promptly ignored (no change in behavior).
Is this a known issue?
It is a problem, because we want to use Zulip for alerts too and delayed notifications means slower reactions.
Does anyone know whether Zulip has an integration or some trick to achieve that? I'd rather not have yet-another-system in place just to accommodate chats with customers.
For those messages where you are effectively changing the topic of conversation, in Zulip, rather than starting your message with "On another note," or a similar phrase to communicate that you're about to say something unrelated words, you instead just send your message to another topic.
And if there are multiple conversations happening at overlapping times, Zulip's model often ends up saving you from having to say "@fred yes" in your reply to indicate which question you're answering "yes" to, because it's obvious from the structure.
You can argue it's slightly more work for the person sending a message to type a topic when you bring up something unrelated, but it's certainly not much, and it's only relevant to a small fraction of messages that one sends. Whereas what Zulip's model saves your organization is every one of the N users who can have to read the conversation needing to spend much more time and mental effort in order to understand what conversation(s) happened while they weren't looking at chat and whether there was something that needs their attention.
But still, does it make sense in any way that I cannot think about right now?
I will definitely try to help develop such feature as it might be the killer feature for me to use it as a daily driver.
It's about what matters most: Knowing what's happening right now, what everyone is doing, what one is supposed to do next. Then, chronological team chat. Versus finding the best comments, e.g. when discussing a news article, or pro and cons about an idea.
We were using Slack at my last job, and it was great (now I don't like Slack any longer though, not after they added their weird threading. I like Zulip instead). Slack & Zulip = good sometimes, HN = good for other things.
Aha you have in mind a chronological "chat" / discussion, with threads? Rather than a best-comment-first HN discussion page?
If you use something else than Slack now, it'd be interesting to hear what that could be?
I'm moderately curious but so far I've not gathered enough motivation to mess around with an install.
See https://github.com/zulip/zulip/pull/11622 for the code; it should be in their marketplace in a few weeks.
That said, if you make just a Digital Ocean VM and run our install script, it'll Just Work and you'll get the same experience after like 10 minutes of non-interactive installation.
Any way for moderators to ban a user and an ip subnet, or cidr or hostname associated?
Any way to unban / see list of bans and reasons?
Isit possible for someone to see the ip addys of others in the chat? (some systems change ip at the server level, some send info like p2p and each chat user can find all the other users ips in various ways )
Interested, but without serious modding tools can't test it for our use cases.
What does this mean?
Experiment for slack lovers: Start talking about something in a channel with ~20 people. Have another use try to start another conversation in the same channel.
What happens? Garbage. Chat is not how work gets done. Or how knowledge is transferred and, most importantly, retained.
Zulip encrypts all content in transit using HTTPS, which protects against a pretty wide of potential attacks to the privacy of one's messages. We put a lot of effort into ensuring messages aren't sent to the wrong users (one surface-level detail here is that our backend codebase has ~97% test coverage; which becomes 100% for views, validation, and other security-sensitive code).
The big thing that these techniques don't protect against which E2E encryption is supposed to solve is a malicious/compromised server accessing message content. But I'm also not convinced there is a viable solution supporting desktop+web+mobile+terminal apps that can prevent a malicious/compromised server from getting access to message content.
Just to highlight one of the issues, if you're using a webapp, the server itself is what tells your browser what code to run. So, if the webapp can display decrypted message content in a browser, a hacked server can just deliver JS code that causes the browser to fetch every single message of history your browser client has access to and send them back to the server unencrypted. I've thought at times about whether a trusted browser extension could help, but I don't think it can. I imagine the various "E2E encrypted" apps address this issue by just not offering a webapp.
Even if one were willing to abandon having a webapp for this feature, the really hard problem with doing E2E encryption is key storage and distribution. What process do you need to use to move your secret key between different devices safely (or do you just lose access to your history when your phone dies)? How do new users who get added to a stream get the secret key for that stream? Maybe there's a Keybase integration that would solve this (I actually have exchanged a few emails with the Keybase team about this concept).
If a native app is compromised, you are screwed all the same. I don't see how the delivery channel makes a difference -- the server serving the web client doesn't necessarily have to be the same one that's relaying the messages...