# Lotus Chat desktop The desktop app for [Lotus Chat](https://chat.lotusguild.org), Lotus Guild's Matrix client (a fork of [Cinny](https://github.com/cinnyapp/cinny)), built with [Tauri](https://v2.tauri.app/). The web client lives in the `cinny/` submodule ([LotusGuild/cinny](https://code.lotusguild.org/LotusGuild/cinny)). ## Download Builds are published on this repo's releases page: **https://code.lotusguild.org/LotusGuild/cinny-desktop/releases/latest** | Platform | File | |---|---| | Windows | `LotusChat-x86_64-setup.exe` (NSIS installer) | | Debian / Ubuntu | `LotusChat-x86_64.deb`, install with `sudo apt install ./LotusChat-x86_64.deb` | | Arch | `LotusChat-x86_64.pkg.tar.zst`: download it, then `sudo pacman -U LotusChat-x86_64.pkg.tar.zst` | | Other Linux | `LotusChat-x86_64.AppImage` | There is no macOS build at the moment. ### Updates and signatures The app updates itself from `https://code.lotusguild.org/LotusGuild/cinny-desktop/releases/download/latest/release.json`. Updater bundles (`.nsis.zip`, `.AppImage.tar.gz`) are signed with minisign; the `.sig` files sit next to them. Lotus Chat's public key (the base64-decoded `plugins.updater.pubkey` in `src-tauri/tauri.conf.json`): > RWRZZdyii05/NUcz337A5SAbiZK+NPVDWuiL2mM5Jk1p/LfRmNfiZ/6l To check a bundle by hand, base64-decode its `.sig` file and run `minisign -Vm LotusChat-x86_64-setup.nsis.zip -P RWRZZdyii05/NUcz337A5SAbiZK+NPVDWuiL2mM5Jk1p/LfRmNfiZ/6l -x `. Packages installed through apt or pacman are updated by downloading the new package from the releases page; the in-app updater says so instead of replacing files it doesn't own. ## Desktop features Beyond the web client: - **Tray:** unread, call and update state; Do Not Disturb. - **Launch on login**, with an optional **start minimized**. - **Closing the window:** asks once whether to keep running in the tray or quit. A call in progress always goes to the tray. - **Taskbar / launcher:** unread badge, attention flash, upload progress. - **Windows:** rich notifications with Reply and Mark as read, Focus Assist sync, thumbnail toolbar (mute / deafen / end call), jump list, media keys (SMTC). - **System-wide push-to-talk and deafen** keys that work while another app (a game) has focus. - **Keychain:** a copy of your login is kept in the OS keychain. - **Calls:** the call page runs on its own loopback origin, with WebView permissions scoped to it; where the WebView has no WebRTC (Linux WebKitGTK), "Open in browser" instead of a dead end. - **Linux:** NVIDIA / Wayland rendering workarounds. ## Local development Set up Rust, Node.js and the build tools per the [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/), then: ```sh git clone --recursive https://code.lotusguild.org/LotusGuild/cinny-desktop.git cd cinny-desktop/cinny && npm ci && cd .. npm ci npm run tauri dev # development npm run tauri build # release build ```