nheko
The motivation behind the project is to provide a native desktop app for Matrix that feels more like a mainstream chat app (Element, Telegram etc) and less like an IRC client.
Translations
Help us with translations so as many people as possible will be able to use nheko!
Note regarding End-to-End encryption
Currently the implementation is at best a proof of concept and it should only be used for testing purposes. Most importantly, it is missing device verification, so while your messages and media are encrypted, nheko doesn't verify who gets the messages.
Features
Most of the features you would expect from a chat application are missing right now but we are getting close to a more feature complete client. Specifically there is support for:
- E2E encryption.
- VoIP calls (voice & video).
- User registration.
- Creating, joining & leaving rooms.
- Sending & receiving invites.
- Sending & receiving files and emoji (inline widgets for images, audio and file messages).
- Replies with text, images and other media (and actually render them as inline widgets).
- Typing notifications.
- Username auto-completion.
- Message & mention notifications.
- Redacting messages.
- Read receipts.
- Basic communities support.
- Room switcher (ctrl-K).
- Light, Dark & System themes.
- Creating separate profiles (command line only, use
-p name
).
Installation
Releases
Releases for Linux (AppImage), macOS (disk image) & Windows (x64 installer) can be found in the Github releases.
Repositories
Arch Linux
pacaur -S nheko # nheko-git
Debian (10 and above) / Ubuntu (18.04 and above)
sudo apt install nheko
Fedora
sudo dnf install nheko
Gentoo Linux
sudo eselect repository enable matrix
sudo emerge -a nheko
Nix(os)
nix-env -iA nixpkgs.nheko
# or
nix-shell -p nheko --run nheko
Alpine Linux (and postmarketOS)
Make sure you have the testing repositories from edge
enabled. Note that this is not needed on postmarketOS.
sudo apk add nheko
Flatpak
flatpak install flathub io.github.NhekoReborn.Nheko
Guix
guix install nheko
macOS (10.14 and above)
with homebrew:
brew cask install nheko
Build Requirements
- Qt5 (5.10 or greater). Qt 5.7 adds support for color font rendering with Freetype, which is essential to properly support emoji, 5.8 adds some features to make interopability with Qml easier, 5.10 makes sliders actually visible with different palettes.
- CMake 3.15 or greater. (Lower version may work, but may break boost linking)
- mtxclient
- LMDB
- cmark 0.29 or greater.
- Boost 1.70 or greater.
- libolm
- spdlog
-
GStreamer 1.18.0 or greater (optional, needed for VoIP support).
- Installing the gstreamer core library plus gst-plugins-base, gst-plugins-good & gst-plugins-bad is often sufficient. The qmlgl plugin though is often packaged separately. The actual plugin requirements are as follows:
- Voice call support: dtls, opus, rtpmanager, srtp, webrtc
- Video call support (optional): compositor, opengl, qmlgl, rtp, vpx
- libnice
- qtkeychain
- A compiler that supports C++ 17:
- Clang 6 (tested on Travis CI)
- GCC 7 (tested on Travis CI)
- MSVC 19.13 (tested on AppVeyor)
Nheko can use bundled version for most of those libraries automatically, if the versions in your distro are too old.
To use them, you can enable the hunter integration by passing -DHUNTER_ENABLED=ON
.
It is probably wise to link those dependencies statically by passing -DBUILD_SHARED_LIBS=OFF
You can select which bundled dependencies you want to use py passing various -DUSE_BUNDLED_*
flags. By default all dependencies are bundled if you enable hunter.
If you experience build issues and you are trying to link mtxclient
library without hunter, make sure the library version(commit) as mentioned in the CMakeList.txt
is used. Sometimes we have to make breaking changes in mtxclient
and for that period the master branch of both repos may not be compatible.
The bundle flags are currently:
- USE_BUNDLED_BOOST
- USE_BUNDLED_SPDLOG
- USE_BUNDLED_OLM
- USE_BUNDLED_GTEST
- USE_BUNDLED_CMARK
- USE_BUNDLED_JSON
- USE_BUNDLED_OPENSSL
- USE_BUNDLED_MTXCLIENT
- USE_BUNDLED_LMDB
- USE_BUNDLED_LMDBXX
- USE_BUNDLED_TWEENY
Linux
If you don't want to install any external dependencies, you can generate an AppImage locally using docker. It is not that well maintained though...
make docker-app-image
Arch Linux
sudo pacman -S qt5-base \
qt5-tools \
qt5-multimedia \
qt5-svg \
cmake \
gcc \
fontconfig \
lmdb \
cmark \
boost \
qtkeychain-qt5
Gentoo Linux
sudo emerge -a ">=dev-qt/qtgui-5.10.0" media-libs/fontconfig dev-libs/qtkeychain
Ubuntu 20.04
# Build requirements + qml modules needed at runtime (you may not need all of them, but the following seem to work according to reports):
sudo apt install g++ cmake zlib1g-dev libssl-dev qt{base,declarative,tools,multimedia,quickcontrols2-}5-dev libqt5svg5-dev libboost-system-dev libboost-thread-dev libboost-iostreams-dev libolm-dev liblmdb++-dev libcmark-dev nlohmann-json3-dev libspdlog-dev libgtest-dev qml-module-qt{gstreamer,multimedia,quick-extras,-labs-settings,graphicaleffects,quick-controls2} qt5keychain-dev
This will install all dependencies, except for tweeny (use bundled tweeny) and mtxclient (needs to be build separately).
Debian Buster (or higher probably)
(User report, not sure if all of those are needed)
sudo apt install cmake gcc make automake liblmdb-dev \
qt5-default libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev \
qml-module-qtgstreamer qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools \
qml-module-qtgraphicaleffects qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts \
qt5keychain-dev
Fedora
sudo dnf install qt5-qtbase-devel qt5-linguist qt5-qtsvg-devel qt5-qtmultimedia-devel \
qt5-qtquickcontrols2-devel qtkeychain-qt5-devel spdlog-devel openssl-devel \
libolm-devel cmark-devel lmdb-devel lmdbxx-devel tweeny-devel
Guix
guix environment nheko
macOS (Xcode 10.2 or later)
brew update
brew install qt5 lmdb cmake llvm spdlog boost cmark libolm qtkeychain