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