Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Show HN: Halloy – A GUI Application in Rust for IRC (github.com/squidowl)
172 points by culinary-robot on June 30, 2023 | hide | past | favorite | 101 comments



Holy shit this GUI framework looks good. I am a Qt fanboi, but this looks great. Normally, I skip all the "X for Rust" posts as a bunch of fanaticism. Could it really be different this time???

The feature list is really impressive: https://github.com/iced-rs/iced

Plus, here is the road map with many things already done: https://github.com/iced-rs/iced/blob/master/ROADMAP.md

Wow, wow, wow: Keep up the great work.

One of the rendering engines is Skia by Google. This library is sneaking up fast on us...


iced is a really weird one. It has a lot of widgets and lots of really advanced features... but clipboard support is almost non-existant (basically you can only copy small strings and nothing else). (I also think drag-and-drop is not possible either)

I've wanted to work on a few tiny tools in Rust, but so much of my workflow relies on proper clipboard support that it's never worked out.

Maybe some day I'll have time and energy to work on this, but the issue seem to come from underlying libraries providing abstractions that just don't allow properly inter-operating with the clipboard.

Of course, this isn't a problem for an IRC client, since you can't send images or anything like that anyway.


> I also think drag-and-drop is not possible either

This seems to have a form of drag and drop in the demo gif.


It is looking good, but I'm still waiting for a "table" (they do have a "grid" now) and "tree" widget to give it a try


To be fair, in any GUI toolkit, the "table" is abolutely the most complex general purpose widget. People really under estimate the difficult of an efficient implementation. Qt spents YEARS improving their QTableWidget class. The implementation is mind-bogglingly complex. I am sure many very smart summer interns (PhDs!) have tried to tweak that class to squeeze every bit of performance possible. The table class in GTK+ and MSFT DotNet's WPF are equally, freakishly insane.

Consider this idea: Most people who use a table class in a GUI framework assume it is essentially infinitely scalable (myself included!). I am talking about millions of rows or thousands of columns with all kinds of silly widgets injected into individual cells. It is a crazy hard computer science problem to solve. I would not doubt there are many PhD thesises written on the topic of fast, scalable table widgets.

Beyond desktop GUI toolkits, people have tried to do the same in a browser (HTML/CSS/JS). Have you seen AG-Grid? Woah, it is unbelievable how much goddamn data you can squeeze into that widget. Most Wall Streets web-based trading apps use it one way or another. It's just so hard to beat. Ref: https://www.ag-grid.com/ There must be 1,000 person years of optimisation sunk into that implementation.


I've got a table widget you can give a try

https://github.com/tarkah/iced_table


As a fellow Qt fanboi I admit this looks damn good, maybe this once we'll permit a "rewrite it in Rust" moment?


They're also using it for the new Cosmic DE for Pop! OS


There's a more recent iced Roadmap here: https://whimsical.com/roadmap-iced-7vhq6R35Lp3TmYH4WeYwLM


First thing I look at when checking out a new shinny GUI toolkit of the month is whenever it has support for a11y features. In this case, it's not even on the roadmap.


My guess: a11y work always needs to be sponsored (indirectly) by gov't consulting contracts, similar to new cipher suites in OpenSSL. Why is a11y a deal-breaker for you?


Are they still backed by kraken?


Who or what is "kraken"? Sounds exciting. Can you share more details?


Thanks!


Man, I wish I still knew people on IRC… Whenever I see a link to Discord I let out a deep sigh. We had it all and we blew it! We threw it all away for gifs and centralization!

So here’s a question: if I download this, what’s a good place to hang out?

PS I’ve never used this Ui toolkit (being an egui man myself) but that panel snapping looks amazing!


> We threw it all away for gifs and centralization!

Simpler configuration, easy voice chat and screen share, simpler administration, user accounts and profile pictures by default, visually appealing and more noob-friendly client, persistent chat history, media embeds, file uploads, rich presence, etc...


> Simpler configuration

Never had an IRC server want to verify me through SMS or FORCE me to update my client.

> simpler administration

IRC is just a ban list, an except list and an invite list.

> user accounts and profile pictures by default

Don't want it.

> persistent chat history

Liability.


> IRC is just a ban list, an except list and an invite list.

Now use that to implement RBAC for a server with a hundred channels.

Go ahead, I'll wait.

Less pithily, IRC's built-in permissions may be simple, but they're so simple primarily because they're basically useless for real moderation tasks. Every IRC channel I've ever seen handles moderation with a mod-bot, and "set up a bot" instantly blows the complexity budget.


> Now use that to implement RBAC for a server with a hundred channels.

Don't want it.


> Never had an IRC server want to verify me through SMS or FORCE me to update my client.

Which destroyed several channels through spam. The authentication is a feature.


You can do authentication without something that's tantamount to someone's government ID. I love when companies make me give them my phone number, and then they get hacked.


> user accounts and profile pictures by default: Don't want it.

You may not, but many others do, like myself.

Lets be frank, IRC is boring without content. There is no easy way to share any imagery, videos. Any form of simplification of media hosting is a tragic mess.

> Never had an IRC server want to verify me through SMS or FORCE me to update my client.

NickServ.

"If you don't register your nick in 1 minute you be renamed to "anonymous".

I've been on networks where mIRC has been banned which is my client of choice.


> no easy way to share any imagery.

You share it the same way you share it on r*ddit. Upload it to imgur, imbb or whatever.

> NickServ. "If you don't register your nick in 1 minute you be renamed to "anonymous".

It's telling you exactly what you need to do. If you don't like having services, don't use a server that has services.

> "You can't use BitchX on this network" I've been on networks where mIRC has been banned.

You're free to make your client respond however you like.

> IRC is boring

IRC is just a tool. If IRC is boring, it's a reflection of you and your friends.


> You share it the same way you share it on r*ddit. Upload it to imgur, imbb or whatever.

I can drag and drop with Discord, Slack and Teams. And look its there!

No one wants to click links. I updated my post, but to send any type of media is a tragic-mess for IRC. Including if its hosted on my own domain as my own nick!

> It's telling you exactly what you need to do. If you don't like having services, don't use a server that has services.

Right, sure.

> You can't use BitchX on this network" I've been on networks where mIRC has been banned. You're free to make your client respond how

And to a user who wants to join and connect, I don't have time to do that anymore. That it self is tech-savy stuff. Not so easy for the average user. It's not common, but networks have implemented.

> IRC is just a tool. If IRC is boring, it's a reflection of you and your friends.

IRC is a protocol, the client is the tool to connecting to the network. IRC as a whole provides the services to communicate and if no one is communicating as like "your not 1337 because your not using a znc bouncer with irssi"

Or those folk who already know each other in channel and don't want to reach out to new folk even introduce newbies to the channel.. you don't have a voice.

Or just a channel with a topic that's not been changed since 2017.

I -really- dislike Discord, it sucks. However at least it's easy and tacky enough to allow you to introduce yourself rather than black text on a white background. It allows you to enjoy media, show off stuff.

And up until recently could use any nick even if had been taken.

If you want to host your own channel on IRC you need to understand cryptic flags, Host a bot. Know how to operate chanserv.

YIM, MSN Messenger and all those services had it right, games, media and voice.


> No one wants to click links.

I actually prefer that my chat client doesn't auto follow links, so I have a choice of whether to look at them, and so they don't interrupt conversations by taking up huge space in the chat.


> NickServ. "If you don't register your nick in 1 minute you be renamed to "anonymous".

Are you sure it was prompting you to register rather than to authenticate? It sounds like you were using a nick someone else registered, but you can usually use unregistered nicks freely.


Some Channels enforce the flag for registered users.

I've visited networks where you have forced you to register nicks. You have the option to leave, but same principle.


Some channels do indeed enforce registered users. But the message you quoted is 100% because you were using someone's nickname and they enabled nick protection.


No. My nick was an unregistered nick. I know IRC -.- don't tell me otherwise.

"To use this server you MUST register with IRC services."

The server had mandatory nickserv registration.


IRCv3 ticks a lot of boxes server-side; you get chat history, user accounts (you can even log with the same nick from multiple clients), replies, and a bunch of other stuff.

Some clients show link/image previews. I think the #1 thing that would make them better would be configuration options to drag&drop/paste images and other files, and have those automatically uploaded to a user-configured service with a link dropped into the channel. Hassle to implement, though.


Polari [1] seems to support automatically uploading images and text to some imagebin/pastebin and then posting the link to the channel. The Lounge [2] also supports it (with the files self-hosted in thelounge instance).

[1] https://wiki.gnome.org/Apps/Polari [2] https://thelounge.chat/


All the open source Discord rooms I'm in, absolutely no one uses the voice chat and I didn't even know there was a screen sharing option. The ratio of users to admins is probably 10,000:1 so ease of admin isn't really an issue (see also reddit where mod tools suck). There are plenty of visually appealing clients (e.g. this one!).

I personally think persistent message history (XMPP botched that rollout terribly) - which goes hand-in-hand with multipresence - and the extreme dearth of any - let alone actually good and usable - IRC (or XMPP) mobile clients (esp. on iOS) was the real reason they lost mainstream use.

Multipresence is more than just a checkbox; doing it correctly involves actually setting up a SSO system with actual first-party user account support (not just relegating it as a stateful detail of the underlying IRC library you are using). IMHO actual account integration would have bound users more loyally to IRC and would have created more of a "network effect".

Inline attachments, emoji reactions, etc are all just icing on the cake.


Not sure why you are downvoted because you I feel you are pretty much correct for many non-gamers. I do not use voice chat and it is not what made me start using Discord. But I still see why voice chat is very useful to many gamers. Different groups missed different features from IRC.

Message history on the other hand is a huge Discord feature for me as is inline attachments (e.g. being able to post code snippets without having to use s pastebin).


I'm not sure either, but it's HN :)

Native attachments support was personally a big thing for me (inline images or gifs.. not so much) but what I meant to say is that I think the ecosystem could have survived without it if that were the only issue - just look at how long Reddit went without any sort of image or video upload support. Ultimately and "at some point," attachment support would have "just happened" naturally. I just really think multi-presence w/ history and the lack of a good web or mobile client was the bigger deal. Unlike attachments which you can just staple on to the UI and squint at it the right way, these were actual, fundamental issues that required a rearchitecture (or even rewrite) of existing servers and clients, and despite how obvious their importance was (at least to some of us) the mainstream client/server options didn't really relish the idea or jump on board.

I still vividly remember being locked out of a hacker space maybe seven years ago and needing to figure out how to get on the irc from my iPhone. I scoured the app store looking for a good (free) client for this one-time need I had and found nothing. I searched online and found a really shady, insecure, and ad-infested website that would open an IRC connection in the backend and then stream the text to your browser in an interface intended for desktop use. The interface was neigh impossible to use on a phone, all the UI bits were overlaid atop of one another, text wrapping was broken, etc.

I was able to use this to post on the IRC channel and get someone to let me in, but every time I changed tabs or my phone timed out and turned off, the connection would be severed and I would have to start again.. and ask "sorry did anyone reply to my earlier message, I am logging in from a web frontend and was forced to refresh, I might have missed your reply if you did."


Discord is far from simple. Simple is a text based protocol I can interact with through a telnet session.

A few channels have Matrix-IRC bridges attached so that is an option for servers who want to enable multiple interfaces for those who prefer not to interact with discord.


I completely agree with your definition of simple, but to less technically minded people Discord is simpler in that it's a "batteries included" experience


Jabber.


> Man, I wish I still knew people on IRC

IRC is still alive. I still know people on IRC. Most opensource channels have thriving communities on IRC with 100s of regulars logged into the channels everyday. The people I knew in the IRC world in 2010 are still very much there in 2023. The only big change has been that all of us moved away from Freenode over to Libera after the Freenode takeover. And everyone has become older and more mellow and more friendly to beginners.

If you've been away from IRC recently, I urge you to get back to Libera chat network and see for yourself. The IRC world is much better now than it was before.


There's a fair amount of enthusiastic or expert communities that remain the most vibrant in their IRC edition.

I recently looked for an active chat for hobbyist/DIY EE stuff, and I joined around half a dozen Discords and they were all nearly completely deserted. Part of it is that each individual Discord aims to be a complete lifestyle, replate with completely redundant #general rooms and what not - it's too hard to sustain that kind of thing.

##electronics on Libera, meanwhile, is alive and kicking every time of the day.

I've made similar experiences with non-tech topics like e.g. cycling.


Iced is awesome. Slightly biased being a contributed though :) I would recommend https://libera.chat/. There are a ton of great channels: ##rust, #linux, #networking, #security to mention a few.


There are many, many IRC networks that are still very active with tens of thousands of active users. Libera.chat is probably the best one I can suggest at the moment for a wide selection of topics. Politics, news, every tech group and subject under the sun, etc...

I've run https://n.tkte.ch/ for the last decade and it's bots are currently connected to over 200 unique, active IRC servers. Still very much alive!


And chat history. Chat history is huge. And so is integrated search.

Yeah, you can run a bouncer... but then it depends on that bouncer working, and wtf is a bouncer, why is it necessary, and how do you explain that to normal people? And splits?

IRC is a ridiculous experience comparatively. Its big benefit is that it's super cheap to run.


I hate chat history. That's corporate mentality invading your non-work brain. IRC should feel like walking into a bar full of nerds, and you just join the conversation wherever it is. Even at work, if I'm out for a few days I definitely don't "catch up on slack" - that's not what chat is for. Long lived conversations belong somewhere else - email, or PR, or (god forbid) jira.


I don't see how chat history prevents that feeling. There's no requirement to read through history every time.


I mean the lack of history on IRC is a feature, not a bug.


No kidding. I miss IRC. I still use it, but yea, its mostly silence. About the only time I've seen interaction is on something like #fedora or #freebsd where people just ask support type questions.


The feeling I got of IRC in the mid 90s is that it was more centralized than it appeared. Most of the server operators hung out in the same channels.


The simple story here is hosting. Self-hosted IRC while not hard to maintain are not easily discoverable, and ad-hoc communities.


I'm idling on OFTC, Libera and two private servers.


#xkcd on slashnet? ;-)


This really is quite beautiful and feels great. It would be super nice if it was possible to control the pane behaviour when selecting channels but it is so refreshing for an application to feel this fast and not be Electron-based.


Looks slick for how quickly it was built. I was surprised by the download size and RAM footprint, but... if it was easy to do cross-platform, I'm thinking this is still ahead of electron on footprint? Or at least competitive. Interesting!


A lot of the ram usage is actually coming from the wgpu backend. You can use ICED_BACKEND=tiny-skia to try software rendering and the footprint should be a lot smaller.

The footprint should be very consistent throughout the lifecycle of the app. Message history is pretty small and we only keep opened buffers in memory. Everything else is flushed to disk.

Now compared to Electron, there is no comparison for speed and responsiveness


As a suggestion, you might want to modify the default config, I see a lot of people logging into #rust as the `halloy` user.


Maybe/at least append an rng value to the end?


Well not sure how possible that is with the current YAML implementation of config.


The app can write (or modify) the yaml template file on first run. That's how I discovered the configuration file in the first place, with the app prompting me to open the directory and copy config.yaml.template to config.yaml and customize.


What are you using for the GUI toolkit? The GUI looks awesome.


Judging from the Cargo.toml

https://github.com/squidowl/halloy/blob/main/Cargo.toml

It seems to use iced gui toolkit

https://github.com/iced-rs/iced



The cross-platform support and screenshots look impressive. Anyone knows how it does that? Does it have runtime dependencies to render those GUIs across OSes? Or is it all baked into the Rust source code?


I misread the title and had a mini-heart attack when I thought I was on the front page of HN.


You are now. :)


Beautiful interface. Nonetheless would be nice to have a linux screenshot on main page.


Yeah, I wish there was a Matrix client which was equally beautiful.


Which made me look how mIRC is doing:

"mIRC 7.73 has been released! (June 18th 2023)" and runs on Windows XP/Vista/7/8/10/11.


At age 10 I hopped on every BBS I could that wasn't long distance. Then I did a few free trials of AOL.

At age 12 I got unlimited internet for $20/month where I spent all my free time on mIRC. I learned to code making mIRC bots, then I found eggdrop bots.. Then I had to learn Linux to run them. Before I knew it I was a teenager with better coding knowledge than most of the professionals I knew.


> I learned to code making mIRC bots

Hah, same. I went really far with mIRC scripting, much pain was had. Hard lessons that built a career i imagine.


I wonder how much money Khaled has made over the years from mirc


Imagine, someone makes an IRC client that looks like a discord clone, adds some centralized proprietary emoji/background/mini-game features that touches their own servers, and we go full circle back to IRC once discord IPOs.


There are proposals for ircv3 that aim to add support for custom emoji, reactions, message editing etc. Soju + Gamja + Goguma is pretty usable combo even today.


It would be nice to have something similar for matrix. I stopped using IRC directly a while ago, and now I rely on matrix to join the channels.

However, to be sincere, I'm not a huge fan of element and this client look great indeed.


How was working in Iced? It looks like you did a lot of the work just this month


This is Iced, not Tauri. Yeah, it's been a productive month. Once you get hooked it's hard to stop.


I see you didn't publish it to crates.io because of patched dependencies. I registered the "halloy" name so no one else abuses it. Contact me to transfer it to you.


Thank you! I’ll reach out.


Upvoted based on the XKCD alone, I used the same argument a few years ago for this spaghetti mess: https://github.com/creesch/discordIRCd

How feature complete is this client? As in what IRC versions (and dialects) are supported?


Looks basic, only ircv3 capability is server-time.


We use https://crates.io/crates/irc under the hood which is compliant with RFC 2812, IRCv3.1, IRCv3.2.

And thanks for noticing the XKCD!


Looks nice from the GIF. I wish more chat apps had a tiled UI, like mIRC. I use IRC via Matrix/Element, and this is something I miss a lot.


The UI seems to work like the plan 9 Acme text editor (itself based on Oberon). in fact, you can use Acme as an IRC client or mail client.


Overall looks cool, but how does its implementation of IRC compare to other clients? How about support for extensions like XDCC?


From another comment:

> We use https://crates.io/crates/irc under the hood which is compliant with RFC 2812, IRCv3.1, IRCv3.2.


It shows right there on the page that it embeds XKCD - it even has the IRC comic embedded!


Wow, that logo is gorgeous. Who is the artist?


I'm tempted to say it was AI generated: https://i.imgur.com/ZIfbAca.png


It's strange to me though that people release new apps on macOS without making the icons conform to the usual shape. Makes applications stand out like a sore thumb on the Dock.


It's made with the Midjourney niji engine and finished up in Photoshop.


It's beautiful but from decades of experience in app development, I moved away about 10 years ago from using images as icons to insisting that all icons be vector files.

But hiring an Adobe Illustrator expert to professionally recreate the icon as a layered SVG wouldn't cost much. Well done!


Thanks for the response! Very impressive results from Midjourney.


Turned out gorgeous. Do you remember the original prompt?


Yes, but promise not to laugh: "application icon, a side view of a fat seagull". Fat seagull :D


+1 would love to work with the artist for my company.


Apparently it's AI. So...


This looks interesting. I wonder if i can redesign it like GTalk and bring back the old memories :')


That UI simply looks amazing, I might actually consider this once Textual no longer works.


Wow that is beautiful. Iced is really pushing the limits of what terminals can do. Nice job.


For terminals, look at notcurses[1]

[1] https://www.youtube.com/watch?v=dcjkezf1ARY


Terminals?


I like the simplicity of the interface


Is there any way to securely use IRC?




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

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

Search: