> ## Documentation Index
> Fetch the complete documentation index at: https://docs.soundcloud-desktop.fun/llms.txt
> Use this file to discover all available pages before exploring further.

# Update the app

> Installer, dmg and AppImage update in one click. The rest is one command

export const Download = ({file = "windows", lang = "ru"}) => {
  const mirror = "https://images.scnative.dev/x-target/";
  const desktop = "zxcloli666/SoundCloud-Desktop";
  const android = "okeydw/SoundCloud-Android";
  const site = lang === "en" ? "https://getsoundcloud.app/download?lang=en" : "https://getsoundcloud.app/download";
  const files = {
    "windows": {
      repo: desktop,
      match: /x64-setup\.exe$/i,
      ru: "Скачать для Windows",
      en: "Download for Windows",
      arch: "x64"
    },
    "windows-msi": {
      repo: desktop,
      match: /\.msi$/i,
      ru: "Скачать MSI",
      en: "Download MSI",
      arch: "x64"
    },
    "windows-portable": {
      repo: desktop,
      match: /portable\.exe$/i,
      ru: "Скачать portable",
      en: "Download portable",
      arch: "x64"
    },
    "mac-arm": {
      repo: desktop,
      match: /aarch64\.dmg$/i,
      ru: "Скачать для Apple Silicon",
      en: "Download for Apple Silicon",
      arch: "M1-M4"
    },
    "mac-intel": {
      repo: desktop,
      match: /x64\.dmg$/i,
      ru: "Скачать для Intel Mac",
      en: "Download for Intel Mac",
      arch: "Intel"
    },
    "deb": {
      repo: desktop,
      match: /amd64\.deb$/i,
      ru: "Скачать .deb",
      en: "Download .deb",
      arch: "x64"
    },
    "deb-arm": {
      repo: desktop,
      match: /arm64\.deb$/i,
      ru: "Скачать .deb",
      en: "Download .deb",
      arch: "ARM64"
    },
    "rpm": {
      repo: desktop,
      match: /x86_64\.rpm$/i,
      ru: "Скачать .rpm",
      en: "Download .rpm",
      arch: "x64"
    },
    "rpm-arm": {
      repo: desktop,
      match: /aarch64\.rpm$/i,
      ru: "Скачать .rpm",
      en: "Download .rpm",
      arch: "ARM64"
    },
    "appimage": {
      repo: desktop,
      match: /amd64\.appimage$/i,
      ru: "Скачать AppImage",
      en: "Download AppImage",
      arch: "x64"
    },
    "appimage-arm": {
      repo: desktop,
      match: /aarch64\.appimage$/i,
      ru: "Скачать AppImage",
      en: "Download AppImage",
      arch: "ARM64"
    },
    "flatpak": {
      repo: desktop,
      match: /\.flatpak$/i,
      ru: "Скачать .flatpak",
      en: "Download .flatpak",
      arch: "x64"
    },
    "android-full": {
      repo: android,
      match: /full.*\.apk$/i,
      ru: "Скачать APK",
      en: "Download APK",
      arch: "Full"
    },
    "android-lite": {
      repo: android,
      match: /lite.*\.apk$/i,
      ru: "Скачать APK",
      en: "Download APK",
      arch: "Lite"
    }
  };
  const target = files[file] || files.windows;
  const api = `https://api.github.com/repos/${target.repo}/releases/latest`;
  const cacheKey = `scd-latest:${target.repo}`;
  const [asset, setAsset] = useState(null);
  const loadRelease = async () => {
    try {
      const cached = JSON.parse(sessionStorage.getItem(cacheKey) || "null");
      if (cached && Date.now() - cached.at < 600000) return cached.release;
    } catch (e) {}
    let response = await fetch(api).catch(() => null);
    if (!response || !response.ok) {
      response = await fetch(mirror, {
        headers: {
          "X-Target": btoa(api)
        }
      });
    }
    const release = await response.json();
    try {
      sessionStorage.setItem(cacheKey, JSON.stringify({
        at: Date.now(),
        release
      }));
    } catch (e) {}
    return release;
  };
  useEffect(() => {
    loadRelease().then(release => {
      const found = release.assets.find(a => target.match.test(a.name));
      if (found) setAsset({
        ...found,
        version: release.tag_name
      });
    }).catch(() => {});
  }, [file]);
  const megabytes = asset ? Math.max(1, Math.round(asset.size / 1048576)) : null;
  const details = asset ? `${target.arch} · ${megabytes} ${lang === "en" ? "MB" : "МБ"} · ${asset.version.replace(/^v/, "")}` : target.arch;
  return <div className="not-prose flex flex-wrap items-center gap-x-4 gap-y-2 my-4">
      <a href={asset ? mirror + btoa(asset.browser_download_url) : site} className="inline-flex items-center gap-3 rounded-xl px-5 py-3 text-white no-underline hover:-translate-y-0.5 transition-transform" style={{
    background: "linear-gradient(135deg, #C24100 0%, #DD4A00 100%)",
    boxShadow: "0 6px 24px rgba(255,85,0,0.25)"
  }}>
        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
          <path d="M12 3v12" />
          <path d="m7 10 5 5 5-5" />
          <path d="M5 21h14" />
        </svg>
        <span className="flex flex-col leading-tight">
          <span className="font-semibold text-base">{target[lang] || target.ru}</span>
          <span className="text-xs opacity-90">{details}</span>
        </span>
      </a>
      {asset && <a href={asset.browser_download_url} className="text-sm opacity-70 hover:opacity-100 no-underline">
          {lang === "en" ? "or from GitHub" : "или с GitHub"}
        </a>}
    </div>;
};

<Steps>
  <Step title="Check for updates">
    Open **Settings -> General -> Updates** and click **Check for updates**. If it says **You have the latest version**, there is nothing to update.
  </Step>

  <Step title="Install">
    Click **Update**, then **Install and restart**. Your settings, sign-in and cache stay.
  </Step>
</Steps>

<Info>
  The app checks for updates on its own at launch and every 6 hours, if you are signed in and online. Your version and how it updates are shown in the same card: **Updates install in one click** or **Updates are installed manually**.
</Info>

## Updates are installed manually

<Tabs>
  <Tab title="Windows" icon="windows" iconType="brands">
    **Installer** and **MSI installer** update in one click, steps above.

    If the card says **Portable**:

    <Steps>
      <Step title="Quit the app">
        Click **^** next to the clock, right-click the icon and choose **Quit**. Still running: [how to quit completely](/en/fix/wont-close).
      </Step>

      <Step title="Download the new file">
        <Download file="windows-portable" lang="en" />
      </Step>

      <Step title="Replace the old file">
        Put `soundcloud-desktop-portable.exe` in place of the old one. Your settings stay.
      </Step>
    </Steps>

    Want one-click updates? Switch to the [installer version](/en/install/windows).
  </Tab>

  <Tab title="macOS" icon="apple" iconType="brands">
    One click, steps above. By hand:

    1. Press **Cmd+Q**.
    2. Open the new dmg ([which file](/en/install/download)).
    3. Drag **soundcloud-desktop** into **Applications** and replace the old one.
  </Tab>

  <Tab title="Linux" icon="linux" iconType="brands">
    AppImage updates in one click, steps above. For deb, rpm and AppImage by hand, first download the new file ([which one](/en/install/download)) and open a terminal in its folder.

    <CodeGroup>
      ```bash Ubuntu, Debian theme={null}
      sudo apt install ./soundcloud-desktop_*_amd64.deb
      ```

      ```bash Fedora, openSUSE theme={null}
      # Fedora
      sudo dnf install ./soundcloud-desktop-*.x86_64.rpm
      # openSUSE
      sudo zypper install ./soundcloud-desktop-*.x86_64.rpm
      ```

      ```bash Arch theme={null}
      yay -Syu soundcloud-bin
      ```

      ```bash Flatpak theme={null}
      # or update in your app center
      flatpak update io.github.zxcloli666.SoundcloudDesktop
      ```

      ```bash AppImage theme={null}
      # quit the app and replace the old file with the new one, then:
      chmod +x soundcloud-desktop_*_amd64.AppImage
      ```
    </CodeGroup>

    After installing, quit the app from the tray and start it again ([how](/en/fix/wont-close)). The update window shows the exact command for your copy: the **Copy command** button.
  </Tab>
</Tabs>

## It does not work

<AccordionGroup>
  <Accordion title="Do I need to uninstall the old version first">
    No. Install the new one over the old one: your settings and cache stay.
  </Accordion>

  <Accordion title="The update never shows up">
    The window does not appear if you are not signed in, not online, or already clicked **Later** (until the app restarts). Click **Check for updates** in **Settings -> General -> Updates**.
  </Accordion>

  <Accordion title="Could not install the update automatically">
    Click **Download** in the same window and install the file over the old version.
  </Accordion>

  <Accordion title="Could not reach GitHub to check for updates">
    [Download the new version](/en/install/download) and install it over the old one. Your settings and sign-in stay.
  </Accordion>

  <Accordion title="There is no update button in Settings">
    A version this old cannot update itself. [Download the new one](/en/install/download) once and install it over the old one: your settings stay. If it asks you to sign in again, sign in. After that, update as described above.
  </Accordion>

  <Accordion title="Flatpak: Directory not empty, or no updates shown">
    Reinstall once from the new file. Download it, open a terminal in its folder and run the command:

    <Download file="flatpak" lang="en" />

    ```bash theme={null}
    flatpak install --user --reinstall soundcloud-desktop.flatpak
    ```
  </Accordion>

  <Accordion title="I installed the new version but the old one opened">
    The old copy is still running in the tray. [How to quit completely](/en/fix/wont-close).
  </Accordion>

  <Accordion title="Roll back to an older version">
    Better not to: old versions stop working after server changes. For any problem, update first.
  </Accordion>
</AccordionGroup>

<Card title="Still broken? Write to us" icon="life-ring" href="/en/help/contact" horizontal>
  Attach desktop.log and the Network check report.
</Card>


## Related topics

- [Linux: white or blank window](/en/fix/linux-window.md)
- [No sound or sound on the wrong device](/en/fix/sound.md)
- ["Session Interrupted" or "Session expired"](/en/fix/session-expired.md)
- [Sign-in stuck on "Waiting for authorization"](/en/fix/sign-in.md)
- [Error with a number: 500, 502, 404 or 429](/en/fix/errors.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.