1nheko 2---- 3[![Build Status](https://nheko.im/nheko-reborn/nheko/badges/master/pipeline.svg)](https://nheko.im/nheko-reborn/nheko/-/pipelines/latest) 4[![Build status](https://ci.appveyor.com/api/projects/status/07qrqbfylsg4hw2h/branch/master?svg=true)](https://ci.appveyor.com/project/redsky17/nheko/branch/master) 5[![Stable Version](https://img.shields.io/badge/download-stable-green.svg)](https://github.com/Nheko-Reborn/nheko/releases/v0.8.2-RC) 6[![Nightly](https://img.shields.io/badge/download-nightly-green.svg)](https://matrix-static.neko.dev/room/!TshDrgpBNBDmfDeEGN:neko.dev/) 7<a href='https://flatpak.neko.dev/repo/nightly/appstream/io.github.NhekoReborn.Nheko.flatpakref' download='nheko-nightly.flatpakref'><img alt='Download Nightly Flatpak' src='https://img.shields.io/badge/download-flatpak--nightly-green'/></a> 8[![#nheko-reborn:matrix.org](https://img.shields.io/matrix/nheko-reborn:matrix.org.svg?label=%23nheko-reborn:matrix.org)](https://matrix.to/#/#nheko-reborn:matrix.org) 9[![AUR: nheko](https://img.shields.io/badge/AUR-nheko-blue.svg)](https://aur.archlinux.org/packages/nheko) 10<a href='https://flathub.org/apps/details/io.github.NhekoReborn.Nheko'><img width='240' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.png'/></a> 11 12The motivation behind the project is to provide a native desktop app for [Matrix] that 13feels more like a mainstream chat app ([Element], Telegram etc) and less like an IRC client. 14 15### Translations ### 16[![Translation status](http://weblate.nheko.im/widgets/nheko/-/nheko-master/svg-badge.svg)](http://weblate.nheko.im/engage/nheko/?utm_source=widget) 17 18Help us with translations so as many people as possible will be able to use nheko! 19 20### Note regarding End-to-End encryption 21 22The current implementation is mostly stable, but it was never audited. If you 23rely on it for security, we can't make any guarantees. 24 25## Features 26 27Most of the features you would expect from a chat application are missing right now 28but we are getting close to a more feature complete client. 29Specifically there is support for: 30- E2E encryption. 31- VoIP calls (voice & video). 32- User registration. 33- Creating, joining & leaving rooms. 34- Sending & receiving invites. 35- Sending & receiving files and emoji (inline widgets for images, audio and file messages). 36- Replies with text, images and other media (and actually render them as inline widgets). 37- Typing notifications. 38- Username auto-completion. 39- Message & mention notifications. 40- Redacting messages. 41- Read receipts. 42- Basic communities support. 43- Room switcher (ctrl-K). 44- Light, Dark & System themes. 45- Creating separate profiles (command line only, use `-p name`). 46 47## Installation 48 49### Releases 50 51Releases for Linux (AppImage), macOS (disk image) & Windows (x64 installer) 52can be found in the [GitHub releases](https://github.com/Nheko-Reborn/nheko/releases). 53 54### Repositories 55 56[![Packaging status](https://repology.org/badge/tiny-repos/nheko.svg)](https://repology.org/project/nheko/versions) 57 58#### Arch Linux 59 60```bash 61pacaur -S nheko # nheko-git 62``` 63 64#### Debian (10 and above) / Ubuntu (18.04 and above) 65 66```bash 67sudo apt install nheko 68``` 69 70#### Fedora 71```bash 72sudo dnf install nheko 73``` 74 75#### Gentoo Linux 76```bash 77sudo eselect repository enable guru 78sudo emaint sync -r guru 79sudo emerge -a nheko 80``` 81 82#### Nix(os) 83 84```bash 85nix-env -iA nixpkgs.nheko 86# or 87nix-shell -p nheko --run nheko 88``` 89 90#### Alpine Linux (and postmarketOS) 91 92Make sure you have the testing repositories from `edge` enabled. Note that this is not needed on postmarketOS. 93 94```sh 95sudo apk add nheko 96``` 97 98#### Flatpak 99 100``` 101flatpak install flathub io.github.NhekoReborn.Nheko 102``` 103 104#### Guix 105 106``` 107guix install nheko 108``` 109 110#### macOS (10.14 and above) 111 112with [homebrew](https://brew.sh/): 113 114```sh 115brew install --cask nheko 116``` 117 118#### Windows 119 120with [Chocolatey](https://chocolatey.org/): 121 122```posh 123choco install nheko-reborn 124``` 125 126### FAQ 127 128--- 129 130**Q:** Why don't videos run for me on Windows? 131 132**A:** You're probably missing the required video codecs, download [K-Lite Codec Pack](https://codecguide.com/download_kl.htm). 133 134--- 135 136**Q:** What commands are supported by nheko? 137 138**A:** See <https://github.com/Nheko-Reborn/nheko/wiki/Commands> 139 140--- 141 142**Q:** Does nheko support end-to-end encryption (EE2E)? 143 144**A:** Yes, see [feature list](#features) 145 146--- 147 148**Q:** Can I test a bleeding edge development version? 149 150**A:** Checkout nightly builds <https://matrix-static.neko.dev/room/!TshDrgpBNBDmfDeEGN:neko.dev/> 151 152--- 153 154### Build Requirements 155 156- Qt5 (5.15 or greater). Required for overlapping hover handlers in Qml. 157- CMake 3.15 or greater. (Lower version may work, but may break boost linking) 158- [mtxclient](https://github.com/Nheko-Reborn/mtxclient) 159- [coeurl](https://nheko.im/nheko-reborn/coeurl) 160- [LMDB](https://symas.com/lightning-memory-mapped-database/) 161- [lmdb++](https://github.com/hoytech/lmdbxx) 162- [cmark](https://github.com/commonmark/cmark) 0.29 or greater. 163- [libolm](https://gitlab.matrix.org/matrix-org/olm) 164- [spdlog](https://github.com/gabime/spdlog) 165- [GStreamer](https://gitlab.freedesktop.org/gstreamer) 1.18.0 or greater (optional, needed for VoIP support. Pass `-DVOIP=OFF` to disable.). 166 - Installing the gstreamer core library plus gst-plugins-base, gst-plugins-good & gst-plugins-bad 167 is often sufficient. The qmlgl plugin though is often packaged separately. The actual plugin requirements 168 are as follows: 169 - Voice call support: dtls, opus, rtpmanager, srtp, webrtc 170 - Video call support (optional): compositor, opengl, qmlgl, rtp, vpx 171 - [libnice](https://gitlab.freedesktop.org/libnice/libnice) 172- XCB, XCB-EWMH: For screensharing support on X11. VOIP needs to be enabled. Can be disabled with `-DSCREENSHARE_X11=OFF`. 173- [qtkeychain](https://github.com/frankosterfeld/qtkeychain) (You need at least version 0.12 for proper Gnome Keychain support. The bundled version requires libsecret, unless you pass `-DLIBSECRET_SUPPORT=OFF`.) 174- A compiler that supports C++ 17: 175 - Clang 6 (tested on Travis CI) 176 - GCC 7 (tested on Travis CI) 177 - MSVC 19.13 (tested on AppVeyor) 178 179Nheko can use bundled version for most of those libraries automatically, if the versions in your distro are too old. 180To use them, you can enable the hunter integration by passing `-DHUNTER_ENABLED=ON`. 181It is probably wise to link those dependencies statically by passing `-DBUILD_SHARED_LIBS=OFF` 182You can select which bundled dependencies you want to use by passing various `-DUSE_BUNDLED_*` flags. By default all dependencies are bundled *if* you enable hunter. (The exception to that is OpenSSL, which is always disabled by default.) 183If 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. 184 185The bundle flags are currently: 186 187- USE_BUNDLED_SPDLOG 188- USE_BUNDLED_OLM 189- USE_BUNDLED_GTEST 190- USE_BUNDLED_CMARK 191- USE_BUNDLED_JSON 192- USE_BUNDLED_OPENSSL 193- USE_BUNDLED_MTXCLIENT 194- USE_BUNDLED_LMDB 195- USE_BUNDLED_LMDBXX 196- USE_BUNDLED_COEURL 197- USE_BUNDLED_LIBCURL 198- USE_BUNDLED_LIBEVENT 199 200A note on bundled OpenSSL: You need to explicitly enable it and it will not be using your system certificate directory by default, if you enable it. You need to override that at runtime with the SSL_CERT_FILE variable. On Windows it will still be using your system certificates though, since it loads them from the system store instead of the OpenSSL directory. 201 202#### Linux 203 204If you don't want to install any external dependencies, you can generate an AppImage locally using docker. It is not that well maintained though... 205 206```bash 207make docker-app-image 208``` 209 210##### Arch Linux 211 212```bash 213sudo pacman -S qt5-base \ 214 qt5-tools \ 215 qt5-multimedia \ 216 qt5-svg \ 217 cmake \ 218 gcc \ 219 fontconfig \ 220 lmdb \ 221 cmark \ 222 boost \ 223 qtkeychain-qt5 224``` 225 226##### Gentoo Linux 227 228```bash 229sudo emerge -a ">=dev-qt/qtgui-5.10.0" media-libs/fontconfig dev-libs/qtkeychain 230``` 231 232##### Ubuntu 20.04 233 234```bash 235# Build requirements + qml modules needed at runtime (you may not need all of them, but the following seem to work according to reports): 236sudo 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,-labs-platform,graphicaleffects,quick-controls2} qt5keychain-dev libevent-dev libcurl-dev 237``` 238This will install all dependencies, except for tweeny (use bundled tweeny) 239and mtxclient (needs to be build separately). 240 241##### Debian Buster (or higher probably) 242 243(User report, not sure if all of those are needed) 244 245```bash 246sudo apt install cmake gcc make automake liblmdb-dev \ 247 qt5-default libssl-dev libqt5multimedia5-plugins libqt5multimediagsttools5 libqt5multimediaquick5 libqt5svg5-dev \ 248 qml-module-qtgstreamer qtmultimedia5-dev qtquickcontrols2-5-dev qttools5-dev qttools5-dev-tools qtdeclarative5-dev \ 249 qml-module-qtgraphicaleffects qml-module-qtmultimedia qml-module-qtquick-controls2 qml-module-qtquick-layouts qml-module-qt-labs-platform\ 250 qt5keychain-dev 251``` 252 253##### Fedora 254 255```bash 256sudo dnf install qt5-qtbase-devel qt5-linguist qt5-qtsvg-devel qt5-qtmultimedia-devel \ 257 qt5-qtquickcontrols2-devel qtkeychain-qt5-devel spdlog-devel openssl-devel \ 258 libolm-devel cmark-devel lmdb-devel lmdbxx-devel tweeny-devel 259``` 260 261##### Guix 262 263```bash 264guix environment nheko 265``` 266 267##### macOS (Xcode 10.2 or later) 268 269 270```bash 271brew update 272brew install qt5 lmdb cmake llvm spdlog boost cmark libolm qtkeychain 273``` 274 275##### Windows 276 2771. Install Visual Studio 2017's "Desktop Development" and "Linux Development with C++" 278(for the CMake integration) workloads. 279 2802. Download the latest Qt for windows installer and install it somewhere. 281Make sure to install the `MSVC 2017 64-bit` toolset for at least Qt 5.10 282(lower versions does not support VS2017). 283 2843. If you don't have openssl installed, you will need to install perl to build it (i.e. Strawberry Perl). 285 286### Building 287 288We can now build nheko: 289 290```bash 291cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release 292cmake --build build 293``` 294 295To use bundled dependencies you can use hunter, i.e.: 296 297```bash 298cmake -S. -Bbuild -DHUNTER_ENABLED=ON -DBUILD_SHARED_LIBS=OFF -DUSE_BUNDLED_OPENSSL=OFF 299cmake --build build --config Release 300``` 301 302Adapt the USE_BUNDLED_* as needed. 303 304If the build fails with the following error 305``` 306Could not find a package configuration file provided by "Qt5Widgets" with 307any of the following names: 308 309Qt5WidgetsConfig.cmake 310qt5widgets-config.cmake 311``` 312You might need to pass `-DCMAKE_PREFIX_PATH` to cmake to point it at your qt5 install. 313 314e.g on macOS 315 316``` 317cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$(brew --prefix qt5) 318cmake --build build 319``` 320 321The `nheko` binary will be located in the `build` directory. 322 323#### Windows 324 325After installing all dependencies, you need to edit the `CMakeSettings.json` to 326be able to load and compile nheko within Visual Studio. 327 328You need to fill out the paths for the `Qt5_DIR`. 329The Qt5 dir should point to the `lib\cmake\Qt5` dir. 330 331Examples for the paths are: 332 - `C:\\Qt\\5.10.1\\msvc2017_64\\lib\\cmake\\Qt5` 333 334You should also enable hunter by setting `HUNTER_ENABLED` to `ON` and `BUILD_SHARED_LIBS` to `OFF`. 335 336Now right click into the root nheko source directory and choose `Open in Visual Studio`. 337You can choose the build type Release and Debug in the top toolbar. 338After a successful CMake generation you can select the `nheko.exe` as the run target. 339Now choose `Build all` in the CMake menu or press `F7` to compile the executable. 340 341To be able to run the application the last step is to install the needed Qt dependencies next to the 342nheko binary. 343 344Start the "Qt x.xx.x 64-bit for Desktop (MSVC 2017)" command promt and run `windeployqt`. 345```cmd 346cd <path-to-nheko>\build-vc\Release\Release 347windeployqt nheko.exe 348``` 349 350The final binary will be located inside `build-vc\Release\Release` for the Release build 351and `build-vc\Debug\Debug` for the Debug build. 352 353Also copy the respective cmark.dll to the binary dir from `build/cmark-build/src/Release` (or Debug). 354 355 356### Contributing 357 358See [CONTRIBUTING](.github/CONTRIBUTING.md) 359 360### Screens 361 362Here are some screen shots to get a feel for the UI, but things will probably change. 363 364![nheko start](https://nheko-reborn.github.io/images/screenshots/Start.png) 365![nheko login](https://nheko-reborn.github.io/images/screenshots/login.png) 366![nheko chat](https://nheko-reborn.github.io/images/screenshots/chat.png) 367![nheko settings](https://nheko-reborn.github.io/images/screenshots/settings.png) 368 369### Third party 370 371- [Single Application for Qt](https://github.com/itay-grudev/SingleApplication) 372- [Fluent Icons](https://github.com/microsoft/fluentui-system-icons) 373 374[Matrix]:https://matrix.org 375[Element]:https://element.io 376