Hacker News new | past | comments | ask | show | jobs | submit login
Shout – A web IRC client (github.com/erming)
177 points by zkanda on Sept 8, 2014 | hide | past | favorite | 103 comments



It's neither free nor open-source and it's cloud-hosted, but IRCCloud (irccloud.com) probably deserves a mention. Like I said, it's a bit of a different solution since it's more than just a client, but what I like about it is that it basically solves every problem a typical IRC user is likely to encounter:

- It stays auto-connected with no configuration.

- It offers a great desktop (web-based) UI, including embedded images, videos, tweets, pastebins, and more.

- It offers fantastic mobile apps for both iOS and Android, for both phone and tablet form factors.


I got to meet some of the IRCCloud developers last weekend at EMFcamp. It's a fantastic app and a much more civilised way of keeping a persistent irc connection than any mix of irssi, shells or bouncers I've come across to date. The web interface is lovely and the android/iphone apps are extremely usable. Can't recommend enough :)


Worth adding to this that with the mobile apps you also get push notifications of highlights (if you want), which is huge for me.


Hey, guys.

Thanks for all the attention! The repository is here: https://github.com/erming/shout

It's open source, so if you're looking for a cool new project to work on, feel free to help out!


Wow, what a great job!

This is a really good looking web IRC client and it works so well with notification sounds, favicon updates etc.


One more thing: Freenode has given me about ~20 slots to work with on this demo. If you can't connect, try another network, like `irc.rizon.net` or something.


What do you mean slots? Is it just because connections are coming from one IP and there is a limitation on their end?


Most IRC networks have a per-IP connection limit.

The slots in this case are the amount of connections that can come from the demo server (20 at the moment).

If you ran this software on your own server, you wouldn't run into the problem unless you tried to open 20 simultaneous connections to 1 IRC network.


Apparently there's a protocol that addresses this issue (WEBIRC): https://github.com/thedjpetersen/subway/issues/117


Is this actually implemented server-side on any networks?


KiwiIRC uses this protocol apparently. I asked the author about it and they said they have worked out special arrangements with some networks to implement it, and accept connections exclusively from Kiwi, I presume? After all, a password is required according to this spec: https://kiwiirc.com/docs/webirc


Thanks this is awesome - I would love to integrate it with sagebump.com instead of using freenodes client.

Can I ask why there is a 20 slot limit? How can one increase this?


The 20 slot limit being mentioned is just in regards to the demo connecting to freenode. The demo connects to freenode from a single IP address and freenode has limits on how many connections you can have from one IP. It's not something you need to worry about in a normal use-case.


BTW; your site does not work without www.


Another great web IRC client: http://convos.by/

I still prefer Convos for all its built-in features and great community.


Another one built on node.js, just like shout, is "subway": https://github.com/thedjpetersen/subway


Yeah, I hope the author here collaborates with Convos, http://ircanywhere.com, and the mentioned Subway (https://github.com/thedjpetersen/subway ) in some way.

Otherwise I see 4 open source web-based IRC clients with very few regular contributors each. And the only really good IRC web client will still be IRCCloud (which is proprietary).


Please let this put an end to the hipchat/slack madness.


One way to fix that would be to list a set of features that hipchats, et al. have that are desirable, and then think of the way to gracefully degrade them to plain-text format.

After that, it's just a matter of implementing few plugins for popular IRC clients that would improve the UI of their respective clients to support those new features.

If anyone is going to start such endeavour, I'm willing to put some man-hours (starting next month) into writing plugins for ERC and Weechat.el, and maybe help with others.


If I'm understanding correctly, you're talking about a web chat service with a UI that just uses IRC as a backend to communicate between users? If so, that sounds pretty sweet.


Not really; I was thinking about taking all those Awesome Features IRC Doesn't Have and actually implementing them in various popular IRC clients, web-based or not, in order to make IRC a viable alternative to HipChat, et al. for power users.


Are HipChat and Slack free enough to use as an open source project chat/support room?


Yes, we switched over to Slack from IRC/Google+ at elementary (elementaryos.org) in the early summer. It's been a massive improvement. We're starting to feel the limitations of the free tier though, so we do wish it were a lot cheaper.


Could you enumerate the particular pains you had with IRC that were eased by switching to Slack?


I can't speak for him, however as a programmer speaking to other programmers, I find Slack is pretty nice primarily for these reasons:

Pasting code snippets, preserving formatting and getting syntax highlighting. Pasting screenshots, usually of code, error logs, or graphical bugs. Inlining code with `def func_name()` or whatever, making things much more legible. Easily sending files.

Basically all code manipulation at their root.

For actual normal communication, IRC works just as well for me.


If you host your source on GitHub, you should definitely check out Gitter. It's free for public repos and the integration is great; you get Markdown, integrations, IRC bridge, etc. Check for example the Marionette community to get a feeling of it: https://gitter.im/marionettejs/backbone.marionette. Disclaimer: I work at Gitter, feel free to ping me at https://gitter.im/malditogeek



I love IRC but Slack/hipChat has some features IRC can't provide. Especially, the "formatted"/"preview" (images, videos, URL preview, tables) messages.

Even if the IRC client supports some of theses features, the protocol is just text, you can't add meta/structured data to a message.


> I love IRC but Slack/hipChat has some features IRC can't provide. Especially, the "formatted"/"preview" (images, videos, URL preview, tables) messages

Those are all features of the client UI, not of the protocol. All can gracefully degrade to plain text for people whose clients don't support them. Image/video/URL preview is an UI feature over plain link. Tables... those you can either send as ASCII-art tables, or upload to whatever paste service you like (or host) and use the same preview mechanism to show a nice table on your rich UI client.


Along with the image previews, being able to just paste an image into chat (and have it automatically upload to S3) is a huge deal if you're working on anything visual.


I've pasted both text and images to a either a private (in-house) or public image/text pastie and then sent the link.

I find the message history mixed with images in-line a bit annoying.


Limechat shows image links inline, which is good enough for me anyway. In some ways it is even preferable to tying things to one particular storage solution like s3.


You have to upload the image yourself, then. In a workflow, this is a time-waster.


There's no reason Shout couldn't accept HTML5 copy-and-paste, upload locally or to s3, and the send a link to the uploaded image.


Which is what Slack does, the ideal use case I was describing.

The person I was replying to inquired as to why uploading the image and pasting a link was a problem. He said:

"Limechat shows image links inline, which is good enough for me anyway. In some ways it is even preferable to tying things to one particular storage solution like s3."


An IRC bot in the channel could solve this problem easily (grab any image/binary link and mirror to a predefined location).


But you have to put the image online somewhere before the IRC bot can mirror it, so I don't see how that helps. Here's how I see the comparison:

Hipchat:

1) Paste image

Imgur + IRC:

1) New browser tab/window

2) Paste image

3) Click "Start Upload" button

4) Wait for upload + redirect to new page

5) Right click, copy image location

6) Switch back to IRC

7) Paste URL

I use this somewhere from 10-100 times a day, so it adds up. And it doesn't interrupt the flow of whatever I'm working on, just a single action that doesn't require any thought or aiming my cursor to click on things.

Could I write an automated tool that takes my clipboard, uploads it somewhere, and replaces the clipboard with an image URL? Probably. Or I could use a chat platform that supports images.

Edit: Trimmed one step with copy image location instead of actually navigating to the image


> Could I write an automated tool that takes my clipboard, uploads it somewhere, and replaces the clipboard with an image URL? Probably. Or I could use a chat platform that supports images.

Which is exactly that automated tool, but already written by someone else and embedded directly into your UI. It's not that those images magically go over the wire straight from your clipboard without being hosted somewhere (especially that, AFAIR, Hipchat is XMPP-friendly).

I do understand why Hipchat, et al. are getting more and more popular - I was under contract for few weeks at a place that used Hipchat as a company-wide communication tool and I admit it was super-convenient (as long as your machine had enough free RAM to run it, which wasn't always true; for a chat client, this thing is heavy). But the thing is, IRC could easily be on par with Hipchat-like solutions if someone wrote proper UI extensions to popular clients.

Of course until someone actually goes and does that, we'll be stuck with Hipchats.


> Which is exactly that automated tool, but already written by someone else and embedded directly into your UI. It's not that those images magically go over the wire straight from your clipboard without being hosted somewhere (especially that, AFAIR, Hipchat is XMPP-friendly).

Oh I'm aware that it's not actually a magical feature, it just feels that way from a user interaction perspective. They all go up on S3 and have a text link, which gets an inline picture just like other image URLs.

From what I've heard about IRC, there's not an actual well-defined spec anywhere that all of the clients follow, which I'm guessing is part of why there aren't a lot of better IRC clients being written. It's easier to come up with your own protocol where you understand how it works and know exactly how every client will behave.

I do wonder why there isn't an open source effort for fancy features on top of XMPP. Not enough interest? Most developers don't do visual work and see IRC as "good enough"? Or it does exist and I've just never heard of it?


> Hipchat:

> 1) Paste image

Then the history if filled with stupid crap and you can't find any useful stuff in it. Stupid text can be easier to jump over, images spanning the whole page can be more annoying.


There's search if I'm trying to find something, but honestly it's easier for me to locate things when scrolling through and there are images. I scroll through as fast as I want and still say "Ok, there's the screenshot I sent of the texture generation graph, the thing I'm looking for was a bit earlier.

I don't see how a giant uninterrupted wall of text going back to the beginning of time is better.


There is a chat search functionality available in slack. Not sure about hipchat since I haven't used it.


Circa 1994: Even if the web client supports some of these features the protocol is just text, you can't add meta/structured data to a page.

HTTP and TCP are just plane text too. Its what you do with that text that matters.

Somebody just has to find a way to shoehorn it in. I'd propose using a basic system built on top of the basic AK meta-protocol for serial communication.


Yeah, sure. So let's add some headers directly in the message! … How do you update all IRC clients to your new spec ? :)


There's specs[1] for a third version of the irc protocol that seems to accommodate this.

[1] https://github.com/ircv3/ircv3-specifications/blob/master/sp...


You can actually add metadata to a message, the new ircv3 version lets you do this.

https://github.com/ircv3/ircv3-specifications/blob/master/sp...


Well... You can, you'll just piss off anyone not running your client.


Hipchat/Slack bring a lot more to the plate than just text chat, I think there is room for a customized IRC system to fill that gap, but it would take a lot, including native apps, notifications and tight control over granular settings, as well as centralized permissions for larger teams.


It has features but I don't think it is worth it.

Inline images are annoying and I don't like that it uses non-standard protocols.

I also understand that Hipchat is not open source completely, and if so I don't like that.

Notifications are part of a client.

Permissions for large teams are nice, that is a useful feature I would like.


Of course, nothing is one size fits all. I doubt slack or hipchat could supplant IRC, and I doubt they would try. I was addressing the parent comment - I think the same goes for IRC, a new interface for IRC doesn't negate the niche filled by Slack and Hipchat.


Maybe HipChat could do with a "Display images in chats" setting then. Some of us use the inline pictures all the time.


My friends and I replaced our IRC server with Slack and just use the IRC gateway to connect to it as if it were an IRC server. Pretty much seamless.

On the plus side, the Slack Android app is pretty good. Much better than any IRC app I've used.


If you prefer something that doesn't force you to go all in, check out Glowing Bear. It's a WeeChat relay client that I've been contributing to. Basically, it connects to your existing WeeChat running on your server, meaning you can continue using that, or use both in parallel. Works great on mobile as well.

https://github.com/glowing-bear/glowing-bear

http://www.glowing-bear.org/

https://play.google.com/store/apps/details?id=com.glowing_be...

Why reinvent the wheel when you can let someone else do the heavy lifting? ;)


Or just use an IRC bouncer and connect any IRC client to it at any time, and get a lot more features than what Weechat offers. ;)


I've never been able to easily configure an IRC bouncer but I found letting weechat run on a Pi (or another server somewhere) was easier.


ZNC isn't any harder to set up than installing these web clients. In fact ZNC has it's own web interface for configuring it (and does so with a self contained webserver so you don't need node.js / mojo / etc frameworks).

I'm not trying to take anything away from these excellent projects though. Just saying IRC bouncers aren't any harder to install than these projects


There's some advantages to using a web-irc client. You get a clean way of scrolling back through your history. Unread message count is stored server-side. In general the state is synchronised where a bouncer can leave multiple clients out of sync with each other.


I've never had that issue with bouncers to be honest. In fact the whole point of bouncers is to:

1: hide your IP (moot point if you're hosting your own bounce though. And a lot of IRC networks hide your IP for you anyway)

2: offer a way of keeping your history

3: store your unread messages server side.

4: keep all your clients and states synchronised

I'm not saying there's anything wrong with a web client (in fact I'm tempted to try the one submitted here). But I think there's a lot of misconceptions about bounces too.

In an ideal world I'd use both; have a web client connect to ZNC. So I can log onto the IRC client when a guest on someone's PC (eg cybercafe) but also have the ability to use native clients from the same nick for when I'm sat on my own laptop or on my phone (there's some half decent native Android IRC clients)


But WeeChat in a terminal multiplexer + Glowing Bear offers you exactly that. When you read something in Glowing Bear, it is marked as read in WeeChat. You can access it securely from anywhere with any modern browser or smart phone / tablet. When you feel like using the native command-line client, just ssh/mosh into your server and attach to your tmux/screen session. There are other relay clients as well if you want to use those.

(Sync from WeeChat to Glowing Bear and between multiple instances is something we're working towards with the developer of WeeChat)


Why do you guys hate IRC bounces so much? You're investing a lot of time trying to convict me that I should ditch my ZNC and replace it with something that replicates its functionality in a longer winded fashion.

I don't want to run my bounce in a detached screen session, I want a proper daemon. It's easier to install and manage if it's a proper daemon. And if I'm going to be using a terminal based IRC client (which I often do) then I'd be running Irssi.

I don't want your stupid halfway solution when I already have a proper IRC bounce set up that does all that and more.


There are a lot of comments here about how IRC lacks features of HipChat/Slack/whatever. If you want to try going the other way around, here's how to upgrade your IRC to support Jabber (including Facebook chat), Twitter and some other stuff:

http://www.bitlbee.org/main.php/news.r.html


> There are a lot of comments here about how IRC lacks features of HipChat/Slack/whatever.

I really don't understand this. What features does IRC lack that Hipchat has? AFAIK, the advantage of Hipchat is the branding, the packaging, and the support.

The one thing I see ("image previews") is a feature of the client, not IRC itself. And many clients used to offer that, way back - the reason they turned it off was because it was a great vector to (e.g.) goatse someone. In any GUI-based IRC client, this is dead simple.

Most of what Hipchat seems to provide is branding and support, and I get that that's very valuable, but I don't see why that needs to be viewed as an either/or situation.


As always, the problem is not technical, it's packaging. Technically IRC can do all that Hipchat does, but Hipchat provides a simple bundle that any team can subscribe to/buy and use for all its use cases. To replicate the same thing with IRC, you'd need bouncers for everyone with full text search capability, a shared history of everything that happened on the server(s) of the network, support for filesharing for all clients, not just the desktop ones, you'd need some serious management of presence and profile information...

Never forget the "Show HN: Dropbox" and its immediate technical rebuttal [0], see where it is now.

Oh and Hipchat seems to do screen sharing, which AFAIK is not possible with IRC.

[0] https://news.ycombinator.com/item?id=9224


Hmm, what you are suggesting in the beginning sounds just like Quassel:

It is a Bouncer with full PostgreSQL database of the whole log, full search functionality, a shared history between users of the same bouncer, etc.

There are clients as a website (runs on node.js), for Windows, Mac, Linux, iOS and Android.

So, if someone would add the missing features to Quassel, we could make that one the new new HipChat.


Looks amazing! My IRC server uses a password however, and I can't see anyway if inputting that. I tried using a straight /connect command, but that doesn't appear to work either. Might have a go at a pull-request!


I had a discussion with erming about this because I use ZNC. There's actually a /raw command, so you use /raw PASS user:pass to do it, IIRC!

There's also a /quote command.


Ah I was hoping that'd be the case, I tried a few commands that work in other ones, but I'll give that a try! Thanks!

Edit: wait, that's for password protected channels, right? I need to pass a password through on server connection otherwise my ircd boots you off and kills the socket :(


Are SSL connections to the remote IRCd (usually via port 6697 or 9999) supported?


Interested in this as well. Wasn't able to get it working so far.



Fantastic! I am now running it locally and works very well for me out of the box. (Using the shout-irc.com doesn't seem to work)

Feature request: Make it work with quassel core. Currently there is https://github.com/magne4000/quassel-webserver but I don't like the UI as much as yours. https://github.com/magne4000/node-libquassel might help you with quassel connectivity.


Also desktop notifications :)


Not as pretty but http://kiwiirc.com/ is a more mature web irc client that you might want to check out.


Related question; anyone got a decent IRC desktop client for Windows? I'm using HexChat now, but loved Limechat wayyyy more on OSX. So much simpler/clean.


Use Quassel, open source and cross-platform.

http://quassel-irc.org/


I second quassel. Not only is it an excellent client, it has an awesome core/client architecture.


I use Pidgin. I also use it for XMPP (Google) and private Ejabberd and some other protocol I forgot. Also use the same on Linux.


Well, if you don't mind switching your operating system to Emacs, there's ERC, and if you are willing to run a WeeChat instance on a *nix/Mac/Win+Cygwin machine, you can connect to it with weechat.el. I recently switched from the former to the latter :).


I used to use mIRC a lot, fully scriptable/customizable. Best client on windows Imho.


ahhh, the good old mIRC!

You can do some amazing scripting stuff and really customize it.

There are a lot of custom versions of mIRC online with crazy color themes and what not.

http://hawkee.com/mirc/scripts/


I prefer KVIrc. Very customizable.


I really like the looks of this! Great work! Might start using it instead of/together with wee chat for the ease of use.

A suggestion - (I know I can just use my own CSS but,) there are low contrasts in the default theme. I usually have very good vision but for me it's pretty hard to distinguish the green from the white background. Maybe you could edit the default colors a bit?


I'm using it now on freenode, so I guess I'm one of the fast 20. My first thought is that this is a really great and simple interface. I'd like to be able to hide the join/part messages, though.

I'll be forking shortly. Thanks!


Nice work. Out of curiosity, allowing someone to connect to a service via your servers could open you up to malicious activity. Do you rate-limit users from quickly and constantly opening and closing a connection?


Well, my idea when I started this project: A self-hosted and password protected IRC client that runs in your browser.

However, I added "public" mode, where anyone is allowed to connect. And the demo server is currently running in this mode.

So right now? Nope. I'm not limiting anything. I guess this will be up to the person running the server to decide.

Thanks!


If only WebSockets allowed for raw TCP/UDP requests in the browser - would bypass the need to connect over a third-party server..


True, but you would only be connected while your browser is open. I think it is preferable to have a client running somewhere on a server and connecting to that. Even better if it's not a third-party server but your own. In the end, what's the difference between attaching a screen session and connecting a web client? I use WeeChat in a terminal multiplexer and connect to it with Glowing Bear.


It would be nice indeed, but one advantage of web-irc clients like this, is that you can run it on a server for people who can't access IRC directly from their location (firewalls, private networks, etc).

For example, I run a web-irc instance for the people on the Montreal mesh network (which runs mostly on private/unique-local addresses).


This is beautiful. Is this open source at all?


The repo is at https://github.com/erming/shout

Looks pretty neat - even setup to work decently on mobile devices.


Aren't web-based IRC interfaces just ripe for abuse and DDoS, even if they are closely integrated to the network?


This is just the demo page for the software. I believe you are meant to host this on your own server (and IP/HTTP-auth restrict it if necessary).


I've been looking a great way to get into network stack programming in javascript, this looks perfect.


I really liked it, very clean.


Looks fancy and very simple usage. Looking forward to make a testing deployment.


Looks nice, but I'll stick with "M-x irc".


Upgrade to "M-x erc". Or try "M-x weechat" :).


Looks nice, you cannot close a channel in firefox though.


Hey, thanks. That's a bug! I'll fix it when the HN madness ends.


Use /leave for now. :)


Seems slower than qwebirc. Anything it does better?


TapChat is similar, has web and Android apps: http://tapchatapp.com/


HN Mods: Could you change the url to https://github.com/erming/shout instead?




Consider applying for YC's W25 batch! Applications are open till Nov 12.

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

Search: