# Десктоп (`apps/desktop`) Windows, Linux и macOS: тот же веб-клиент в окне [Tauri 2](https://tauri.app/). Запросы к API идут через локальный прокси на `127.0.0.1`, чтобы плеер не открывал чужой origin. Refresh-токен хранится в системной связке ключей. Тип клиента — `desktop`. При первом запуске нужно указать адрес сервера (как в Android). Дальше вход тот же, что в вебе. Кнопка «Другой сервер» в настройках забывает адрес и токен. Трея: левый клик открывает окно; меню — открыть и выход. Клавиши медиаплеера ОС управляют воспроизведением. Плейлисты, ссылка на трек и остальной интерфейс совпадают с вебом. Сборка подставляет версию из git-тега. ```bash pnpm --filter @pipu/desktop icons pnpm --filter @pipu/desktop dev pnpm --filter @pipu/desktop bundle ``` На Windows получается NSIS-установщик (~3 МБ). На Linux в релиз идёт только `.deb` (~4 МБ): AppImage тащит WebKitGTK и раздувается до ~80 МБ. Зависимости пакета: WebKitGTK 4.1, AppIndicator, libsecret, GStreamer. Релиз по тегу собирает Linux `.deb` и Windows NSIS через `cargo-xwin` (`pipu-music-<версия>-windows-setup.exe`). Подпись Windows-установщика на Linux нет. Страница `/download` на сервере отдаёт те файлы, что есть в последнем релизе Gitea. ## Офлайн и кеш Коллекция → **Скачанное и кеш** доступна без сервера, в том числе после перезапуска. Полностью загруженные прослушанные треки автоматически сохраняются в IndexedDB WebView; кеш недавних ограничен 500 МБ, при заполнении удаляются самые старые записи. Кнопка «Скачать» закрепляет трек: такие загрузки не вытесняются кешем и удаляются вручную. Обложки сохраняются рядом с аудио; подписанные ссылки не сохраняются. Хранилище и локальная очередь воспроизведения разделены по адресу сервера и пользователю. Настройки показывают размер хранилища и позволяют очистить недавние треки, сохранив ручные загрузки. Плеер предпочитает локальное аудио (включая crossfade); при запуске без сети восстанавливает сессию и сохранённую очередь без автозапуска. Если сервер волны недоступен, можно запустить перемешанные локальные треки без дизлайков. События прослушивания сохраняются локально и досылаются с исходными идентификаторами при восстановлении связи. ## Обновления При запуске и возврате в окно (не чаще раза в 6 часов), а также вручную в настройках, нативный клиент читает `/api/v1/app/clients` через настроенный сервер Pipu. Выбирается сборка текущей ОС, версия сравнивается с установленной с учётом `-rc.N`. Диалог показывает пользовательские заметки без служебных блоков CI. «Скачать и установить» загружает сборку в каталог кеша приложения, показывает прогресс, проверяет размер и SHA-256 и только затем открывает установщик. Без контрольной суммы обновление не предлагается. Windows запускает EXE/MSI; Linux открывает DEB/RPM через системный обработчик пакетов; macOS открывает DMG. Установку подтверждает пользователь в системном интерфейсе, после неё требуется перезапуск приложения. На Linux необходим установленный обработчик пакетов для `xdg-open`; AppImage и `.app.tar` этим потоком не поддерживаются.