A next-generation IRC client inspired by HexChat. Powered by vinezombie & React, built with Tauri.
Jump right to the downloads or the documentation.
Pronounced "nex" (the "h" is silent).
Contributors needed & wanted! Apply... by submitting a PR! The 1.0 milestone is a great place to start looking for tasks with immediate impact.
Chat with us at #nhex on irc.libera.chat.
See the latest release to download installers for Debian-based Linux distros, Windows & Mac OS.
See the documentation for full usage details.
$ npm install
$ npm run tauri dev
$ npm run tauri build
You can manually trigger builds by prepending dev-build/
to any branch name.
All Pull Requests will automatically trigger the development pipeline.
The development pipeline will create a draft prerelease with your assets attached.
- This is not a source-level port! This is an entirely new application wholly inspired by the best (IMHO) GUI IRC client that ever existed. RIP HexChat.
- In fact, source introspection is prohibited for contributors! Black-box behavioral inspection of HexChat (e.g. use it, see how it works, replicate the behavior) is the only allowed form of HexChat inspection.
- Do not share state between components! This is paramount for future maintainability. If one component (
A
) must affect the state of another (B
), we use the actor model:A
sends the appropriate message on the event system whichB
listens for and updates its internal state accordingly. - Lift out of Rust early & often. So, as long as it is reasonable & performant* to do so, implementation should prefer to live in the frontend not the backend.
- * It nearly always will be: this is an IRC client, not a 120 FPS video game.
- This contributes directly to the long-term goal of extracting the UX into a web app!
- 7 is a theme in design for nhex: include as subtly as possible! ("Hexa" is a prefix for "six", plus one, hence 7.)
Use the included create-release
script to prepare the release:
$ ./scripts/create-release major
Where major
is the release type as supported by semver.inc()
. If not provided, the default value for this argument is patch
.
The script will increment the appropriate version
field in all necessary metadata files and provide a set of git
CLI invocations to commit, tag & push the release.
Any tag beginning with v
will trigger the release pipeline, and this script suggests just a tag to be used.
The resulting release will be a draft - not yet visible to the public - until you publish it. When you do, please include a short high-level description of the release and use GitHub's "Create Release Notes" functionality to generate a changelog.
In addition to our amazing team (which is growing fast!) the list of incredible folks who have contributed ideas, advice, suggestions, etc. on irc.libera.chat has already grown too numerous to easily keep track of here!
The response has been overwhelming, so a huge thanks to all of those who did contribute. Y'all rock! 🤘❤️
Logo design by hmw[at]
, with additional ideation from InPhase
& systemfault
(all of libera).
nhex
is multi-licensed, the details of which can be found in the DEP5 file .reuse/dep5.
At a high level, the React-based frontend is licensed under the MIT license & the Rust-based backend under the Mozilla Public License, version 2.0.
You agree for any contributions submitted by you for inclusion into nhex to be redistributed under these licenses.
License text can be found in LICENSES.