nhexirc / nhex

A next-generation IRC client inspired by HexChat
https://nhexirc.com
19 stars 0 forks source link
irc irc-client react rust rust-lang tauri tauri-app typescript

nhex

A next-generation IRC client inspired by HexChat. Powered by vinezombie & React, built with Tauri.

Build Check Netlify Status

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.

Screenshots

Normal views (Day/Night theme)

Mobile views (Medium and Small)

Downloading

See the latest release to download installers for Debian-based Linux distros, Windows & Mac OS.

Using

See the documentation for full usage details.

Developing

Prerequisites

Recommended IDE Setup

$ npm install
$ npm run tauri dev

Building

Locally

$ npm run tauri build

In CI/CD

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.

Contributing

Development Guidelines

  1. 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.
  2. 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 which B listens for and updates its internal state accordingly.
  3. 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.
  4. 7 is a theme in design for nhex: include as subtly as possible! ("Hexa" is a prefix for "six", plus one, hence 7.)

Creating a release

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.

Contributors

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! 🤘❤️

Special Mention

Logo design by hmw[at], with additional ideation from InPhase & systemfault (all of libera).

License

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.