CINXE.COM
Install spotify on Linux | Snap Store
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Install spotify on Linux | Snap Store</title> <!-- Preconnect to establish early connections to important third-party origins --> <link rel="preconnect" href="https://www.google-analytics.com"> <link rel="preconnect" href="https://assets.ubuntu.com"> <link rel="preconnect" href="https://munchkin.marketo.net"> <link rel="preload" href="https://assets.ubuntu.com/v1/9689339a-snapcraft-hero-background--light.png" as="image"> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KCGXHQS');</script> <!-- End Google Tag Manager --> <link rel="stylesheet" href="/static/css/styles.css?v=9838aec" /> <script src="/static/js/modules/raven.min.js?v=daf037c" defer></script> <script> window.addEventListener("DOMContentLoaded", function() { Raven.config('https://1e82fd54e08142c9978f623cb746b965@sentry.is.canonical.com//3', { whitelistUrls: ['staging.snapcraft.io/static/js', 'snapcraft.io/static/js/'], ignoreUrls: ['staging.snapcraft.io/static/js/modules', 'snapcraft.io/static/js/modules'], ignoreErrors: ['AbortError'], release: 'commit_id', environment: 'production' }).install(); }); </script> <script src="/static/js/dist/base.js?v=df18d39" defer></script> <script src="/static/js/dist/store-details.js?v=03fb1f9" defer></script> <script src="https://assets.ubuntu.com/v1/703e23c9-lazysizes+noscript+native-loading.5.1.2.min.js" defer></script> <meta name="description" content="Get the latest version of spotify for Linux - Music for everyone"> <meta name="copydoc" content=""> <meta name="google-site-verification" content="Y1JayrP2iS6jS6Rd7uGX3Kzgm0oD8rV5R6TkzteLbQg" /> <meta property="og:title" content="Install spotify on Linux | Snap Store"/> <meta property="og:site_name" content="Snapcraft"/> <meta property="og:type" content="website"/> <meta property="og:description" content="Get the latest version of spotify for Linux - Music for everyone"/> <meta property="og:image" content="https://dashboard.snapcraft.io/site_media/appmedia/2017/12/spotify-linux-256.png" /> <meta property="og:image:width" content="200" /> <meta property="og:image:height" content="200" /> <meta property="og:image:alt" content="spotify snap logo" /> <meta property="og:url" content="https://snapcraft.io/spotify" /> <meta property="twitter:card" content="summary" /> <meta property="twitter:site" content="@snapcraftio" /> <meta property="twitter:creator" content="@snapcraftio" /> <meta property="twitter:image" content="https://dashboard.snapcraft.io/site_media/appmedia/2017/12/spotify-linux-256.png" /> <meta property="twitter:url" content="https://snapcraft.io/spotify" /> <link rel="canonical" href="https://snapcraft.io/spotify" /> <link rel="icon" type="image/png" href="https://assets.ubuntu.com/v1/d4ca039f-favicon_16px.png" sizes="16x16" /> <link rel="icon" type="image/png" href="https://assets.ubuntu.com/v1/841d0bcf-favicon_32px.png" sizes="32x32" /> <link rel="icon" type="image/png" href="/static/snapcraft-favicon.png?v=055e94b" sizes="144x144" /> <link rel="author" href="/humans.txt" /> </head> <body class="l-site"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KCGXHQS" height="0" width="0" style="display: none; visibility: hidden;"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <!-- JS that is needed right away --> <script src="/static/js/dist/cookie-policy.js?v=24ad4f8"></script> <header id="navigation" class="p-navigation is-dark"> <div class="p-navigation__row--25-75"> <div class="p-navigation__banner"> <div class="p-navigation__tagged-logo"> <a class="p-navigation__link" href="/"> <div class="p-navigation__logo-tag"> <img class="p-navigation__logo-icon" src="https://assets.ubuntu.com/v1/11ff571b-snapcraft.svg" alt=""> </div> <span class="p-navigation__logo-title" >Canonical Snapcraft</span> </a> </div> <a href="#navigation" class="p-navigation__toggle--open" title="menu">Menu</a> <a href="#navigation-closed" class="p-navigation__toggle--close" title="close menu">Close menu</a> </div> <nav class="p-navigation__nav"> <ul class="p-navigation__items" role="menu"> <li class="p-navigation__item " role="menuitem" > <a class="p-navigation__link" href="/store"> Snap Store </a> </li> <li class="p-navigation__item " role="menuitem" > <a class="p-navigation__link" href="/about"> About <span class="u-hide--large">Snapcraft</span> </a> </li> <li class="p-navigation__item--dropdown-toggle " id="learn-link" role="menuitem" > <a class="p-navigation__link" href="#learn-menu" aria-controls="learn-menu"> Learn </a> <ul class="p-navigation__dropdown" id="learn-menu" aria-hidden="true"> <li> <a class="p-navigation__dropdown-item" href="/blog"> Blog </a> </li> <li> <a class="p-navigation__dropdown-item" href="/build"> Build </a> </li> <li> <a class="p-navigation__dropdown-item" href="/docs/"> Docs </a> </li> <li> <a class="p-navigation__dropdown-item" href="/docs/snap-tutorials"> Tutorials </a> </li> </ul> </li> <li class="p-navigation__item " role="menuitem" > <a class="p-navigation__link" href="/iot"> IoT </a> </li> <li class="p-navigation__item" role="menuitem"> <a class="p-navigation__link " href="https://forum.snapcraft.io/">Forum</a> </li> </ul> <ul class="p-navigation__items js-nav-account global-nav" role="menu"> <li class="p-navigation__item--dropdown-toggle js-nav-account--authenticated u-hide" role="menuitem" id="link-1"> <a class="p-navigation__link js-account--name" aria-controls="account-menu" aria-expanded="false"> My account </a> <ul class="p-navigation__dropdown--right" id="account-menu" aria-hidden="true"> <li> <a href="/account/snaps" class="p-navigation__dropdown-item">My published snaps</a> </li> <li class="js-nav-account--validation-sets u-hide"> <a href="/validation-sets" class="p-navigation__dropdown-item">My validation sets</a> </li> <li class="js-nav-account--stores u-hide"> <a href="/admin" class="p-navigation__dropdown-item">My stores</a> </li> <li> <a href="/admin/account" class="p-navigation__dropdown-item">Account details</a> </li> <li> <a href="/logout" class="p-navigation__dropdown-item">Sign out</a> </li> </ul> </li> <li class="p-navigation__item js-nav-account--notauthenticated u-hide" role="menuitem"> <a class="p-navigation__link" href="/snaps"> Sign in <i class="p-icon--user is-light"></i> </a> </li> </ul> </nav> </div> </header> <div class="p-strip is-shallow"> <div class="row"> <div class="p-snap-heading"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_60,h_60/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/spotify-linux-256.png" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_120,h_120/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/spotify-linux-256.png 2x" alt="spotify" width="60" height="60" loading="eager" class="p-snap-heading__icon" data-live="icon" /> <div class="p-snap-heading__title"> <h1 class="p-heading--2 p-snap-heading__name" data-live="title">spotify</h1> <div class="u-hide--medium u-hide--large"> <span class="p-tooltip--top-center"> <a href="/publisher/spotify" title="View all snaps from Spotify"> Spotify </a> <span class="p-tooltip__message">Publisher</span> </span> <span class="p-verified p-tooltip p-tooltip--top-center"> <img src="https://assets.ubuntu.com/v1/ba8a4b7b-Verified.svg" width="12" height="12" alt="Verified account" /> <span class="p-tooltip__message u-align--center" role="tooltip" id="spotify-tooltip">Verified account</span> </span> </div> <ul class="p-inline-list--vertical-divider"> <li class="p-inline-list__item u-hide--small"> <span class="p-tooltip--top-center"> <a href="/publisher/spotify" title="View all snaps from Spotify"> Spotify </a> <span class="p-tooltip__message">Publisher</span> </span> <span class="p-verified p-tooltip p-tooltip--top-center"> <img src="https://assets.ubuntu.com/v1/ba8a4b7b-Verified.svg" width="12" height="12" alt="Verified account" /> <span class="p-tooltip__message u-align--center" role="tooltip" id="spotify-tooltip">Verified account</span> </span> </li> <li class="p-inline-list__item"> <a href="/search?category=music-and-audio">Music and Audio</a> </li> </ul> </div> <div class="p-snap-install-buttons"> <button class="p-button p-snap-install-buttons__versions" data-js="open-channel-map" data-controls="channel-map-versions" aria-controls="channel-map-versions"> latest/stable 1.2.56.502.ga68d2d4f <i class="p-icon--chevron-down"></i> </button> <button class="p-button--positive p-snap-install-buttons__install" data-js="open-channel-map" data-controls="channel-map-install" aria-controls="channel-map-install"> Install </button> </div> </div> </div> </div> <div id="js-channel-map" class="p-channel-map is-closed"> <div id="channel-map-install" class="p-channel-map__tab"> <div class="p-strip--light is-shallow"> <div class="u-fixed-width"> <p class="p-heading--4">Install latest/stable of spotify</p> <p>Ubuntu 16.04 or later?</p> <button data-snap="spotify " class="p-view-store-button" data-js="open-desktop"> View in Desktop store </button> <p class="p-form-help-text">Make sure <a href="/docs/installing-snapd">snap support</a> is enabled in your Desktop store.</p> </div> <div class="u-fixed-width"> <hr /> </div> <div class="u-fixed-width"> <p><b>Install using the command line</b></p> <div class="p-code-snippet"> <pre class="p-code-snippet__block--icon"><code id="snap-install">sudo snap install spotify</code></pre> </div> <p class="p-form-help-text"> Don't have snapd? <a href="/docs/installing-snapd">Get set up for snaps</a>. </p> </div> </div> </div> <div id="channel-map-versions" class="p-channel-map__tab"> <div class="p-channel-map__slides show-left"> <div class="p-strip is-shallow p-channel-map__slide u-no-padding--bottom" data-js="channel-map-options"> <div class="u-fixed-width"> <form class="p-form--inline p-channel-map__form"> <div class="p-form__group"> <label class="p-form__label"> Options to install this snap </label> </div> <div class="channel-map-arch-field p-form__group"> <label for="channel-map-track-select" class="p-form__label"> Show architecture </label> <div class="p-form__control"> <select id="channel-map-architecture-select" data-js="arch-select" class="p-channel-map-arch-select"> </select> </div> </div> </form> </div> <div class="u-fixed-width" data-js="channel-map-tabs"> <nav class="p-tabs"> <ul class="p-tabs__list" role="tablist"> <li class="p-tabs__item" role="presentation"> <a href="#" class="p-tabs__link" role="tab" data-tab="overview" data-js="switch-tab" aria-selected="true"> Overview </a> </li> <li class="p-tabs__item" role="presentation"> <a href="#" class="p-tabs__link" role="tab" data-tab="all" data-js="switch-tab"> All releases </a> </li> </ul> </nav> </div> <div class="u-fixed-width p-channel-map__version-table"> <table> <thead> <tr> <th>Channel</th> <th>Version</th> <th width="25%" class="u-hide--medium u-hide--small">Published</th> <th width="12%"></th> </tr> </thead> <tbody data-js="channel-map-table"> </tbody> </table> </div> </div> <div class="p-strip--light is-shallow p-channel-map__slide" data-js="channel-map-install-details"> </div> </div> </div> </div> <script type="text/template" id="install-window-template" data-js="install-window"> <div class="u-fixed-width"> <a href="#" data-js="slide-all-versions">‹ All versions</a> </div> <div class="u-fixed-width"> <p class="p-heading--4">Install ${channel} of spotify</p> <span data-js="warning"></span> <p>Ubuntu 16.04 or later?</p> <button data-snap="spotify?channel=${channel}" class="p-view-store-button" data-js="open-desktop">View in Desktop store</button> <p class="p-form-help-text">Make sure <a href="/docs/installing-snapd">snap support</a> is enabled in your Desktop store.</p> </div> <div class="u-fixed-width"> <hr /> </div> <div class="u-fixed-width"> <p><b>Install using the command line</b></p> <div class="p-code-snippet"> <pre class="p-code-snippet__block--icon is-wrapped"><code id="snap-install-alt">sudo snap install spotify${paramString}</code></pre> </div> <p class="p-form-help-text"> Don't have snapd? <a href="/docs/installing-snapd">Get set up for snaps</a>. </p> </div> </script> <script type="text/template" id="channel-map-row-template" data-js="channel-map-row"> <tr class="${rowClass}" data-js="slide-install-instructions" data-channel="${row[0]}/${row[1]}" data-confinement="${row[4]}"> <td>${row[0]}/${row[1]}</td> <td>${row[2]}</td> <td class="u-hide--medium u-hide--small">${row[3]}</td> <td class="u-align--center"><a href="#" class="p-channel-map__version-table-install">Install ›</a></td> </tr> </script> <div class="p-channel-map-overlay" data-js="close-channel-map" style="display: none"></div> <div class="p-strip is-shallow"> <div class="row" id="js-snap-screenshots" data-live="screenshots"> <div class="p-carousel u-no-margin--bottom u-no-margin--top"> <div class="swiper-container"> <div class="swiper-wrapper"> <div class="p-carousel__item--screenshot swiper-slide"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_819,h_460/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-07-06.png" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_1638,h_920/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-07-06.png 2x" alt="" width="819" height="460" loading="eager" data-original="https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-07-06.png" /> </div> <div class="p-carousel__item--screenshot swiper-slide"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_819,h_460/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-09-22.png" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_1638,h_920/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-09-22.png 2x" alt="" width="819" height="460" loading="eager" data-original="https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-09-22.png" /> </div> <div class="p-carousel__item--screenshot swiper-slide"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_819,h_460/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-18-27.png" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_1638,h_920/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-18-27.png 2x" alt="" width="819" height="460" loading="eager" data-original="https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-18-27.png" /> </div> <div class="p-carousel__item--screenshot swiper-slide"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_819,h_460/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-20-23.png" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_1638,h_920/https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-20-23.png 2x" alt="" width="819" height="460" loading="eager" data-original="https://dashboard.snapcraft.io/site_media/appmedia/2017/12/Screenshot_from_2017-12-18_12-20-23.png" /> </div> </div> </div> <div class="p-carousel__buttons u-align--right"> <button class="p-button--base p-carousel__prev swiper-button__prev">Previous</button> <button class="p-button--base p-carousel__next swiper-button__next">Next</button> </div> </div> </div> </div> <div class="p-strip is-shallow u-no-padding--top"> <div class="u-fixed-width"><hr></div> <div class="row"> <div class="col-8 u-text-wrap"> <h4 class="p-heading--2" data-live="summary">Music for everyone</h4> <div data-live="description"><p>Love music? Play your favorite songs and albums free on Linux with Spotify.</p> <p>Stream the tracks you love instantly, browse the charts or fire up readymade playlists in every genre and mood. Radio plays you great song after great song, based on your music taste. Discover new music too, with awesome playlists built just for you.</p> <p>Stream Spotify free, with occasional ads, or go Premium.</p> <p>Free: • Play any song, artist, album or playlist instantly • Browse hundreds of readymade playlists in every genre and mood • Stay on top of the Charts • Stream Radio • Enjoy podcasts, audiobooks and videos • Discover more music with personalized playlists</p> <p>Premium: • Download tunes and play offline • Listen ad-free • Get even better sound quality • Try it free for 30 days, no strings attached</p> <p>Like us on Facebook: <a href="http://www.facebook.com/spotify">http://www.facebook.com/spotify</a> Follow us on Twitter: <a href="http://twitter.com/spotify">http://twitter.com/spotify</a></p> <p>Note: Spotify for Linux is a labor of love from our engineers that wanted to listen to Spotify on their Linux development machines. They work on it in their spare time and it is currently not a platform that we actively support. The experience may differ from our other Spotify Desktop clients, such as Windows and Mac.</p> </div> </div> <div class="col-4"> <h4>Details for spotify</h4> <h5 class="p-muted-heading">License</h5> <ul class="p-list"> <li>Proprietary</li> </ul> <hr> <h5 class="p-muted-heading">Last updated</h5> <ul class="p-list"> <li>11 March 2025 - <small>latest/stable</small></li> <li>13 March 2025 - <small>latest/edge</small></li> </ul> <hr> <h5 class="p-muted-heading">Contact</h5> <ul class="p-list"> <li> <a class="js-external-link" title="https://community.spotify.com/t5/Desktop-Linux/bd-p/desktop_linux" href="https://community.spotify.com/t5/Desktop-Linux/bd-p/desktop_linux" aria-controls="modal">community.spotify.com</a> </li> </ul> <hr> <h5 class="p-muted-heading">Report a Snap Store violation</h5> <ul class="p-list"> <li> <a class="js-modal-open">Report this Snap</a> </li> </ul> <div class="p-modal u-hide" id="report-snap-modal"> <div class="p-modal__dialog" role="dialog" aria-labelledby="modal-title" aria-describedby="modal-description"> <div class="js-report-snap-form"> <header class="p-modal__header"> <h2 class="p-modal__title" id="modal-title">Report spotify for a Snap Store violation</h2> <button class="p-modal__close js-modal-close" aria-label="Close dialog">Close</button> </header> <form id="report-snap-form" action="/report" method="POST"> <input name="csrf_token" type="hidden" value="IjY0OGJmYTExYjRiMmI5MzU4YWMzNDdiNTVmMWVlNmY3MGIzNjk1ZDki.Z_DU7g.jfCurEHQtu66ubHTgpcckYkH-4c" /> <input type="hidden" name="entry.718227286" value="spotify" /> <div class="p-notification--negative"> <div class="p-notification__content"> <h5 class="p-notification__title"> Reports submitted through this form go to the Snap team, not the Snap Developer. </h5> <p class="p-notification__message"> The Snap developer has provided the following <b>contact information</b>:</p> <ul> <li><a href="https://community.spotify.com/t5/Desktop-Linux/bd-p/desktop_linux" target="_blank" rel="noopener">community.spotify.com</a></li> </ul> </div> </div> <label for="report-snap-reason">Choose a reason for reporting this snap</label> <select id="report-snap-reason" name="entry.340540050" required> <option value="" selected>Select an option</option> <option value="Copyright or trademark violation">Copyright or trademark violation</option> <option value="Snap Store terms of service violation">Snap Store terms of service violation</option> </select> <label for="report-snap-comment">Please provide more detailed reason to your report</label> <textarea id="report-snap-comment" type="text" name="entry.1974584359" placeholder="Comment..." rows="5" maxlength="1000" required></textarea> <label for="report-snap-email">Your email (optional)</label> <input id="report-snap-email" type="email" name="entry.1624813972" placeholder="email@example.com" /> <label for="report-snap-confirm" style="position: absolute; top: -9999999px;">I agree</label> <input id="report-snap-confirm" type="checkbox" name="entry.13371337" style="position: absolute; top: -9999999px;" /> <p>In submitting this form, I confirm that I have read and agree to <a href="https://ubuntu.com/legal/data-privacy/contact">Canonical’s Privacy Notice</a> and <a href="https://ubuntu.com/legal/data-privacy">Privacy Policy</a>.</p> <div class="u-align--right"> <button type="button" class="js-modal-close u-no-margin--bottom">Cancel</button> <button type="submit" type="submit" class="--dark u-no-margin--bottom">Submit report</button> </div> </form> </div> <div class="js-report-snap-success u-hide"> <header class="p-modal__header"> <h2 class="p-modal__title" id="modal-title">Snap Store Violation Report submitted successfully</h2> <button class="p-modal__close js-modal-close" aria-label="Close dialog">Close</button> </header> <p>Thank you for your report. Information you provided will help us investigate further.</p> <div class="u-align--right"> <button type="button" class="p-button--positive js-modal-close u-no-margin--bottom">Close</button> </div> </div> <div class="js-report-snap-error u-hide"> <header class="p-modal__header"> <h2 class="p-modal__title" id="modal-title">Error submitting report</h2> <button class="p-modal__close js-modal-close u-no-margin--bottom" aria-label="Close dialog">Close</button> </header> <p>There was an error while sending your report. Please try again later.</p> <div class="u-align--right"> <button type="button" class="p-button--positive js-modal-close u-no-margin--bottom">Close</button> </div> </div> </div> </div> <hr> <div class="p-modal js-exeternal-link-modal u-hide" id="modal"> <section class="p-modal__dialog" role="dialog" aria-modal="true" aria-labelledby="modal-title" aria-describedby="modal-description"> <header class="p-modal__header"> <h2 class="p-modal__title" id="modal-title"><i class="p-icon--warning" style="width: 1rem; height: 1rem; position: relative; top: 1px; margin-right: 0.24rem;"></i> External link warning</h2> </header> <p class="u-no-max-width">You are about to open <span class="js-external-link-url"></span></p> <p class="u-no-max-width">Do you wish to proceed?</p> </p> <footer class="p-modal__footer"> <button class="u-no-margin--bottom js-close-modal" aria-controls="modal">Go back</button> <a class="p-button--positive u-no-margin--bottom js-open-external-link" href="" target="_blank">Proceed</a> </footer> </section> </div> <template id="verified-status"> (Verified ownership) <span class="p-tooltip--btm-right" aria-describedby="verified-explanation"> <i class="p-icon--information"></i> <span class="p-tooltip__message" role="tooltip" id="verified-explanation">The publisher has verified that they own this domain. It does not guarantee the Snap is an official upload from the upstream project.</span> </span> </template> <script> // Handle verified domain status const primaryDomainListItem = document.querySelector("[data-js='primary-domain']"); function renderVerificationStatus() { if ("content" in document.createElement("template")) { const template = document.querySelector("#verified-status"); const clone = template.content.cloneNode(true); primaryDomainListItem.appendChild(clone); } } if (primaryDomainListItem) { async function getVerifiedStatus() { const response = await fetch("/api/spotify/verify"); if (!response.ok) { return; } const responseData = await response.json(); if (responseData.primary_domain) { renderVerificationStatus(); } } getVerifiedStatus(); } // Handle external links const externalLinks = document.querySelectorAll(".js-external-link"); const externalLinkModal = document.querySelector(".js-exeternal-link-modal"); const externalLinkModalCloseButton = externalLinkModal.querySelector( ".js-close-modal" ); const externalLinkUrl = externalLinkModal.querySelector( ".js-external-link-url" ); const openExternalLinkButton = externalLinkModal.querySelector( ".js-open-external-link" ); function openModal() { externalLinkModal.classList.remove("u-hide"); } function closeModal() { externalLinkModal.classList.add("u-hide"); } function setLinkDisplayText(href) { if (href.includes("mailto")) { externalLinkUrl.innerText = href; return; } const url = new URL(href); const protocolContainer = document.createElement("strong"); const hostnameContainer = document.createElement("strong"); const pathContainer = document.createElement("span"); const searchContainer = document.createElement("span"); protocolContainer.classList.add( url.protocol === "https:" ? "external-link-protocol--positive" : "external-link-protocol--negative" ); pathContainer.classList.add("u-text-muted"); searchContainer.classList.add("u-text-muted"); protocolContainer.innerText = `${url.protocol}//`; hostnameContainer.innerText = url.hostname; if (url.pathname && url.pathname !== "/") { pathContainer.innerText = url.pathname; } searchContainer.innerText = url.search; externalLinkUrl.innerHTML = ""; externalLinkUrl.appendChild(protocolContainer); externalLinkUrl.appendChild(hostnameContainer); externalLinkUrl.appendChild(pathContainer); externalLinkUrl.appendChild(searchContainer); } externalLinkModalCloseButton.addEventListener("click", () => { closeModal(); }); externalLinks.forEach((link) => { link.addEventListener("click", (e) => { e.preventDefault(); const href = e.target.href; openExternalLinkButton.href = href; openExternalLinkButton.addEventListener("click", handleOpenExternalLink); setLinkDisplayText(href); openModal(); }); }); function handleOpenExternalLink() { closeModal(); openExternalLinkButton.removeEventListener("click", handleOpenExternalLink); } </script> <h4 class="p-heading--5">Share this snap</h4> <p>Generate an embeddable card to be shared on external websites.</p> <p><button class="p-button js-embedded-card-toggle" >Create embeddable card</button></p> <div class="p-modal u-hide" id="embedded-card-modal"> <div class="p-modal__dialog p-embedded-card-modal-dialog" id="embedded-card-modal-dialog" role="dialog" aria-labelledby="modal-title" aria-describedby="modal-description"> <header class="p-modal__header"> <h2 class="p-modal__title">Share embeddable card</h2> <button class="p-modal__close js-modal-close" aria-label="Close dialog">Close</button> </header> <p>Customise your embeddable card using the options below.</p> <div class="row u-no-padding"> <div class="col-1"> <label class="p-heading-label">Snap Store button:</label> <input type="radio" name="store-button" id="store-button-dark" checked="checked" value="black"> <label for="store-button-dark">Dark</label> <input type="radio" name="store-button" id="store-button-light" value="white"> <label for="store-button-light">Light</label> <input type="radio" name="store-button" id="store-button-hide" value=""> <label for="store-button-hide">Hide button</label> <label class="p-heading-label">Options:</label> <input type="checkbox" name="show-channels" id="option-show-channels"> <label for="option-show-channels">Show all channels</label> <input type="checkbox" name="show-summary" id="option-show-summary"> <label for="option-show-summary">Show summary</label> <input type="checkbox" name="show-screenshot" id="option-show-screenshot" > <label for="option-show-screenshot">Show screenshot</label> </div> <div class="col-3"> <label class="p-heading-label">Preview:</label> <iframe id="embedded-card-frame" class="snapcraft-publicise__embedded-frame" width="100%" height="320px" frameborder="0" style="border: 1px solid #CCC; border-radius: 2px;"> </iframe> <label class="p-heading-label">HTML:</label> <div class="p-code-snippet"> <pre class="p-code-snippet__block is-wrapped"><code id="snippet-card-html"></code></pre> </div> </div> </div> </div> </div> </div> </div> </div> <div class="p-strip is-shallow"> <div class="u-fixed-width"><hr></div> <div class="u-fixed-width"> <h3 class="p-heading--2">Install spotify on your Linux distribution</h3> <p>Choose your Linux distribution to get detailed installation instructions. If yours is not shown, get more details on the <a href="/docs/installing-snapd" target="_blank">installing snapd documentation</a>.</p> </div> </div> <div class="p-strip is-shallow u-no-padding--top"> <div class="row" id="distros"> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/arch"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/feca0fc0-Distro_Logo_ArchLinux.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/feca0fc0-Distro_Logo_ArchLinux.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Arch Linux</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/centos"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/acf876d9-Distro_Logo_CentOS.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/acf876d9-Distro_Logo_CentOS.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">CentOS</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/debian"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/cfdc1144-Distro_Logo_Debian.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/cfdc1144-Distro_Logo_Debian.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Debian</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/elementary"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/c0c09661-Distro_Logo_Elementary.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/c0c09661-Distro_Logo_Elementary.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">elementary OS</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/fedora"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/c93d842f-fedora.png" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/c93d842f-fedora.png 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Fedora</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/kde-neon"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/d0593902-Distro_Logo_KDE+Neon.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/d0593902-Distro_Logo_KDE+Neon.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">KDE Neon</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/kubuntu"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/7ab50a06-Distro_Logo_Kubuntu.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/7ab50a06-Distro_Logo_Kubuntu.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Kubuntu</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/manjaro"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/4635a0bd-Distro_Logo_Manjaro.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/4635a0bd-Distro_Logo_Manjaro.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Manjaro</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/pop"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/c7ca0dfa-Distro_Logo_Pop.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/c7ca0dfa-Distro_Logo_Pop.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Pop!_OS</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/opensuse"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/610301c6-Distro_Logo_OpenSUSE.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/610301c6-Distro_Logo_OpenSUSE.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">openSUSE</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/rhel"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/be89e41a-red-hat-2019-primary-stacked.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/be89e41a-red-hat-2019-primary-stacked.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Red Hat Enterprise Linux</h4> </span> </a> </div> <div class="col-3 col-medium-3"> <a class="p-media-object" href="/install/spotify/ubuntu"> <span class="p-media-object__image"> <img src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_48,h_48/https://assets.ubuntu.com/v1/2d850f3f-CoF%20Circle%20New.svg" srcset="https://res.cloudinary.com/canonical/image/fetch/c_limit,f_auto,q_auto,fl_sanitize,w_96,h_96/https://assets.ubuntu.com/v1/2d850f3f-CoF%20Circle%20New.svg 2x" alt="" width="48" height="48" loading="lazy" /> </span> <span class="p-media-object__details"> <h4 class="p-media-object__title p-heading--5 u-no-margin--bottom">Ubuntu</h4> </span> </a> </div> </div> </div> <script type="text/template" id="blog-article-template"> <div class="${container_class}"> <a href="${slug}"> ${image} </a> <h3 class="p-heading--4"> <a href="${slug}">${title}</a> </h3> </div> </script> <script type="text/template" id="video-youtube-template"> <iframe id="youtubeplayer" type="text/html" width="818" height="460" allow="autoplay"></iframe> <button class="youtube-thumbnail-button" id="youtube-thumbnail-button"> <img src="https://i3.ytimg.com/vi/${id}/maxresdefault.jpg" alt="" width="1280" height="720" id="youtube-thumbnail-image"> <img src="/static/images/yt_play_btn.svg?v=9298bb2" alt="" width="68" height="48" class="youtube-play-button"> </button> <script> document.addEventListener("DOMContentLoaded", function() { const vimeoplayerFrame = document.getElementById("vimeoplayer"); const asciicastplayerFrame = document.getElementById("asciicastplayer"); const youtubeFrame = document.getElementById("youtubeplayer"); if (vimeoplayerFrame) { vimeoplayerFrame.src = vimeoplayerFrame.dataset.src; } if (asciicastplayerFrame) { const script = document.createElement("script"); script.id = "asciicast-${id}"; script.dataset.autoplay = 0; script.src = "${url}"; asciicastplayerFrame.appendChild(script); } if (youtubeFrame) { const videoId = "${id}"; const thumbnailUrl = `/youtube/${videoId}`; const thumbnailImage = document.querySelector("#youtube-thumbnail-image"); const thumbnailButton = document.querySelector("#youtube-thumbnail-button"); const videoUrl = "${url}?autoplay=1&cc_load_policy=1&modestbranding=1&rel=0"; const data = new FormData(); data.append("videoId", videoId); data.append("csrf_token", "IjY0OGJmYTExYjRiMmI5MzU4YWMzNDdiNTVmMWVlNmY3MGIzNjk1ZDki.Z_DU7g.jfCurEHQtu66ubHTgpcckYkH-4c"); fetch(`/youtube`, { method: "POST", body: data }) .then(function(r) { if (r.ok === true) { return r.json(); } }) .then(function(res) { if (!res.items) { return; } const thumbnails = res.items[0].snippet.thumbnails; if (thumbnails.maxres) { thumbnailImage.src = thumbnails.maxres.url; thumbnailImage.width = thumbnails.maxres.width; thumbnailImage.height = thumbnails.maxres.height; } else if (thumbnails.standard) { thumbnailImage.src = thumbnails.standard.url; thumbnailImage.width = thumbnails.standard.width; thumbnailImage.height = thumbnails.standard.height; } else if (thumbnails.high) { thumbnailImage.src = thumbnails.high.url; thumbnailImage.width = thumbnails.high.width; thumbnailImage.height = thumbnails.high.height; } else if (thumbnails.medium) { thumbnailImage.src = thumbnails.medium.url; thumbnailImage.width = thumbnails.medium.width; thumbnailImage.height = thumbnails.medium.height; } else { thumbnailImage.src = thumbnails.default.url; thumbnailImage.width = thumbnails.default.width; thumbnailImage.height = thumbnails.default.height; } }); thumbnailButton.addEventListener("click", function() { youtubeFrame.src = videoUrl; setTimeout(function() { thumbnailButton.classList.add("fade-out"); }, 300); }); } }); </script> </script> <script type="text/template" id="video-vimeo-template"> <iframe id="vimeoplayer" width="818" height="460" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen src="" data-src="${url}?title=0&byline=0&portrait=0&transparent=0"></iframe> <script> document.addEventListener("DOMContentLoaded", function() { const vimeoplayerFrame = document.getElementById("vimeoplayer"); const asciicastplayerFrame = document.getElementById("asciicastplayer"); const youtubeFrame = document.getElementById("youtubeplayer"); if (vimeoplayerFrame) { vimeoplayerFrame.src = vimeoplayerFrame.dataset.src; } if (asciicastplayerFrame) { const script = document.createElement("script"); script.id = "asciicast-${id}"; script.dataset.autoplay = 0; script.src = "${url}"; asciicastplayerFrame.appendChild(script); } if (youtubeFrame) { const videoId = "${id}"; const thumbnailUrl = `/youtube/${videoId}`; const thumbnailImage = document.querySelector("#youtube-thumbnail-image"); const thumbnailButton = document.querySelector("#youtube-thumbnail-button"); const videoUrl = "${url}?autoplay=1&cc_load_policy=1&modestbranding=1&rel=0"; const data = new FormData(); data.append("videoId", videoId); data.append("csrf_token", "IjY0OGJmYTExYjRiMmI5MzU4YWMzNDdiNTVmMWVlNmY3MGIzNjk1ZDki.Z_DU7g.jfCurEHQtu66ubHTgpcckYkH-4c"); fetch(`/youtube`, { method: "POST", body: data }) .then(function(r) { if (r.ok === true) { return r.json(); } }) .then(function(res) { if (!res.items) { return; } const thumbnails = res.items[0].snippet.thumbnails; if (thumbnails.maxres) { thumbnailImage.src = thumbnails.maxres.url; thumbnailImage.width = thumbnails.maxres.width; thumbnailImage.height = thumbnails.maxres.height; } else if (thumbnails.standard) { thumbnailImage.src = thumbnails.standard.url; thumbnailImage.width = thumbnails.standard.width; thumbnailImage.height = thumbnails.standard.height; } else if (thumbnails.high) { thumbnailImage.src = thumbnails.high.url; thumbnailImage.width = thumbnails.high.width; thumbnailImage.height = thumbnails.high.height; } else if (thumbnails.medium) { thumbnailImage.src = thumbnails.medium.url; thumbnailImage.width = thumbnails.medium.width; thumbnailImage.height = thumbnails.medium.height; } else { thumbnailImage.src = thumbnails.default.url; thumbnailImage.width = thumbnails.default.width; thumbnailImage.height = thumbnails.default.height; } }); thumbnailButton.addEventListener("click", function() { youtubeFrame.src = videoUrl; setTimeout(function() { thumbnailButton.classList.add("fade-out"); }, 300); }); } }); </script> </script> <script type="text/template" id="video-asciinema-template"> <div id="asciicastplayer"></div> <script> document.addEventListener("DOMContentLoaded", function() { const vimeoplayerFrame = document.getElementById("vimeoplayer"); const asciicastplayerFrame = document.getElementById("asciicastplayer"); const youtubeFrame = document.getElementById("youtubeplayer"); if (vimeoplayerFrame) { vimeoplayerFrame.src = vimeoplayerFrame.dataset.src; } if (asciicastplayerFrame) { const script = document.createElement("script"); script.id = "asciicast-${id}"; script.dataset.autoplay = 0; script.src = "${url}"; asciicastplayerFrame.appendChild(script); } if (youtubeFrame) { const videoId = "${id}"; const thumbnailUrl = `/youtube/${videoId}`; const thumbnailImage = document.querySelector("#youtube-thumbnail-image"); const thumbnailButton = document.querySelector("#youtube-thumbnail-button"); const videoUrl = "${url}?autoplay=1&cc_load_policy=1&modestbranding=1&rel=0"; const data = new FormData(); data.append("videoId", videoId); data.append("csrf_token", "IjY0OGJmYTExYjRiMmI5MzU4YWMzNDdiNTVmMWVlNmY3MGIzNjk1ZDki.Z_DU7g.jfCurEHQtu66ubHTgpcckYkH-4c"); fetch(`/youtube`, { method: "POST", body: data }) .then(function(r) { if (r.ok === true) { return r.json(); } }) .then(function(res) { if (!res.items) { return; } const thumbnails = res.items[0].snippet.thumbnails; if (thumbnails.maxres) { thumbnailImage.src = thumbnails.maxres.url; thumbnailImage.width = thumbnails.maxres.width; thumbnailImage.height = thumbnails.maxres.height; } else if (thumbnails.standard) { thumbnailImage.src = thumbnails.standard.url; thumbnailImage.width = thumbnails.standard.width; thumbnailImage.height = thumbnails.standard.height; } else if (thumbnails.high) { thumbnailImage.src = thumbnails.high.url; thumbnailImage.width = thumbnails.high.width; thumbnailImage.height = thumbnails.high.height; } else if (thumbnails.medium) { thumbnailImage.src = thumbnails.medium.url; thumbnailImage.width = thumbnails.medium.width; thumbnailImage.height = thumbnails.medium.height; } else { thumbnailImage.src = thumbnails.default.url; thumbnailImage.width = thumbnails.default.width; thumbnailImage.height = thumbnails.default.height; } }); thumbnailButton.addEventListener("click", function() { youtubeFrame.src = videoUrl; setTimeout(function() { thumbnailButton.classList.add("fade-out"); }, 300); }); } }); </script> </script> <footer class="l-footer--sticky p-strip is-dark" id="footer"> <div class="row"> <div class="col-9"> <p> <a class="p-link--inverted" href="#">Back to top <i class="p-icon--chevron-up is-light"></i></a> </p> <p> © 2025 Canonical Ltd. <br/> Ubuntu and Canonical are registered trademarks of Canonical Ltd. <br/> Powered by <a href="https://www.ubuntu.com/kubernetes">Charmed Kubernetes</a> </p> <p class="u-no-limit"> <small> <a href="https://forum.snapcraft.io/">Join the forum</a>, contribute to or report problems with, <a href="https://bugs.launchpad.net/snapd" >snapd</a>, <a href="https://bugs.launchpad.net/snapcraft" >Snapcraft</a>, or <a href="https://github.com/canonical/snapcraft.io/issues/new">this site</a>. </small> </p> </div> <div class="col-3"> <ul class="p-inline-list u-align--right"> <li class="p-inline-list__item"> <a href="https://twitter.com/snapcraftio" class="p-icon--twitter">Share on Twitter</a> </li> <li class="p-inline-list__item"> <a href="https://www.facebook.com/snapcraftio" class="p-icon--facebook">Share on Facebook</a> </li> <li class="p-inline-list__item"> <a href="https://www.youtube.com/snapcraftio" class="p-icon--youtube">Share on YouTube</a> </li> </ul> </div> </div> <div class="u-fixed-width"> <ul class="p-inline-list--middot u-no-margin--bottom"> <li class="p-inline-list__item"> <a class="p-link--inverted" href="https://ubuntu.com/legal/terms-and-policies/snap-store-terms"><small>Terms of Service</small></a> </li> <li class="p-inline-list__item"> <a class="p-link--inverted" href="https://www.ubuntu.com/legal/data-privacy"><small>Data privacy</small></a> </li> <li class="p-inline-list__item"> <a class="p-link--inverted js-revoke-cookie-manager" href=""><small>Manage your tracker settings</small></a> </li> <li class="p-inline-list__item"> <a class="p-link--inverted" href="https://status.snapcraft.io/"><small>Service status</small></a> </li> <li class="p-inline-list__item"> <a class="p-link--inverted" href="https://dashboard.snapcraft.io/"><small>Other functions</small></a> </li> <li class="p-inline-list__item"> <a class="p-link--inverted" href="/about/contact-us" data-js="contact-form-trigger" data-formid="2639"> Contact us </a> </li> </ul> </div> </footer> <div class="p-modal u-hide" id="contact-form-modal"> <section class="p-modal__dialog" role="dialog" aria-modal="true" aria-labeledby="modal-title"> <header class="p-modal__header"> <h2 class="p-modal__title">Contact us</h2> <button class="p-modal__close" aria-label="Close active modal" aria-controls="modal" data-js="close-modal-control">Close</button> </header> <div id="modal-body"></div> </section> </div> <script type="text/template" id="contactFormTemplate"> <form action="https://ubuntu.com/marketo/submit" method="post" id="mktoForm_{{formid}}"> <fieldset class="u-no-margin--bottom"> <legend class="u-off-screen">About you</legend> <h2 class="p-heading--3">About you</h2> <ul class="p-list"> <li class="p-list__item"> <label for="firstName">First name:</label> <input required id="firstName" name="firstName" maxlength="255" type="text" /> </li> <li class="p-list__item"> <label for="lastName">Last name:</label> <input required id="lastName" name="lastName" maxlength="255" type="text" /> </li> <li class="p-list__item"> <label for="email">Email address:</label> <input required id="email" name="email" maxlength="255" type="email" pattern="^[^ ]+@[^ ]+\.[a-z]{2,26}$" /> </li> <li class="p-list__item"> <label for="phone">Mobile/cell phone number:</label> <input required id="phone" name="phone" maxlength="255" type="tel" /> </li> <li class="p-list__item"> <label for="country">Country:</label> <select required id="country" name="country" > <option value="">Select...</option ><option value="FR">France</option ><option value="DE">Germany</option ><option value="JP">Japan</option ><option value="GB">United Kingdom</option ><option value="US">United States of America</option ><option disabled>——————————————————</option ><option value="AF">Afghanistan</option ><option value="AX">Åland Islands</option ><option value="AL">Albania</option ><option value="DZ">Algeria</option ><option value="AS">American Samoa</option ><option value="AD">Andorra</option ><option value="AO">Angola</option ><option value="AI">Anguilla</option ><option value="AQ">Antarctica</option ><option value="AG">Antigua and Barbuda</option ><option value="AR">Argentina</option ><option value="AM">Armenia</option ><option value="AW">Aruba</option ><option value="AU">Australia</option ><option value="AT">Austria</option ><option value="AZ">Azerbaijan</option ><option value="BS">Bahamas</option ><option value="BH">Bahrain</option ><option value="BD">Bangladesh</option ><option value="BB">Barbados</option ><option value="BY">Belarus</option ><option value="BE">Belgium</option ><option value="BZ">Belize</option ><option value="BJ">Benin</option ><option value="BM">Bermuda</option ><option value="BT">Bhutan</option ><option value="BO">Bolivia (Plurinational State of)</option ><option value="BQ">Bonaire, Sint Eustatius and Saba</option ><option value="BA">Bosnia and Herzegovina</option ><option value="BW">Botswana</option ><option value="BV">Bouvet Island</option ><option value="BR">Brazil</option ><option value="IO">British Indian Ocean Territory</option ><option value="BN">Brunei Darussalam</option ><option value="BG">Bulgaria</option ><option value="BF">Burkina Faso</option ><option value="BI">Burundi</option ><option value="KH">Cambodia</option ><option value="CM">Cameroon</option ><option value="CA">Canada</option ><option value="CV">Cabo Verde</option ><option value="KY">Cayman Islands</option ><option value="CF">Central African Republic</option ><option value="TD">Chad</option ><option value="CL">Chile</option ><option value="CN">China</option ><option value="CX">Christmas Island</option ><option value="CC">Cocos (Keeling) Islands</option ><option value="CO">Colombia</option ><option value="KM">Comoros</option ><option value="CG">Congo</option ><option value="CD">Congo (Democratic Republic of the)</option ><option value="CK">Cook Islands</option ><option value="CR">Costa Rica</option ><option value="CI">Côte d'Ivoire</option ><option value="HR">Croatia</option ><option value="CU">Cuba</option ><option value="CW">Curaçao</option ><option value="CY">Cyprus</option ><option value="CZ">Czech Republic</option ><option value="DK">Denmark</option ><option value="DJ">Djibouti</option ><option value="DM">Dominica</option ><option value="DO">Dominican Republic</option ><option value="EC">Ecuador</option ><option value="EG">Egypt</option ><option value="SV">El Salvador</option ><option value="GQ">Equatorial Guinea</option ><option value="ER">Eritrea</option ><option value="EE">Estonia</option ><option value="ET">Ethiopia</option ><option value="FK">Falkland Islands (Malvinas)</option ><option value="FO">Faroe Islands</option ><option value="FJ">Fiji</option ><option value="FI">Finland</option ><option value="FR">France</option ><option value="GF">French Guiana</option ><option value="PF">French Polynesia</option ><option value="TF">French Southern Territories</option ><option value="GA">Gabon</option ><option value="GM">Gambia</option ><option value="GE">Georgia</option ><option value="DE">Germany</option ><option value="GH">Ghana</option ><option value="GI">Gibraltar</option ><option value="GR">Greece</option ><option value="GL">Greenland</option ><option value="GD">Grenada</option ><option value="GP">Guadeloupe</option ><option value="GU">Guam</option ><option value="GT">Guatemala</option ><option value="GG">Guernsey</option ><option value="GN">Guinea</option ><option value="GW">Guinea-Bissau</option ><option value="GY">Guyana</option ><option value="HT">Haiti</option ><option value="HM">Heard Island and McDonald Islands</option ><option value="VA">Holy See</option ><option value="HN">Honduras</option ><option value="HK">Hong Kong</option ><option value="HU">Hungary</option ><option value="IS">Iceland</option ><option value="IN">India</option ><option value="ID">Indonesia</option ><option value="IR">Iran (Islamic Republic of)</option ><option value="IQ">Iraq</option ><option value="IE">Ireland</option ><option value="IM">Isle of Man</option ><option value="IL">Israel</option ><option value="IT">Italy</option ><option value="JM">Jamaica</option ><option value="JP">Japan</option ><option value="JE">Jersey</option ><option value="JO">Jordan</option ><option value="KZ">Kazakhstan</option ><option value="KE">Kenya</option ><option value="KI">Kiribati</option ><option value="KP">Korea (Democratic People's Republic of)</option ><option value="KR">Korea (Republic of)</option ><option value="KW">Kuwait</option ><option value="KG">Kyrgyzstan</option ><option value="LA">Lao People's Democratic Republic</option ><option value="LV">Latvia</option ><option value="LB">Lebanon</option ><option value="LS">Lesotho</option ><option value="LR">Liberia</option ><option value="LY">Libya</option ><option value="LI">Liechtenstein</option ><option value="LT">Lithuania</option ><option value="LU">Luxembourg</option ><option value="MO">Macao</option ><option value="MK">Macedonia (the former Yugoslav Republic of)</option ><option value="MG">Madagascar</option ><option value="MW">Malawi</option ><option value="MY">Malaysia</option ><option value="MV">Maldives</option ><option value="ML">Mali</option ><option value="MT">Malta</option ><option value="MH">Marshall Islands</option ><option value="MQ">Martinique</option ><option value="MR">Mauritania</option ><option value="MU">Mauritius</option ><option value="YT">Mayotte</option ><option value="MX">Mexico</option ><option value="FM">Micronesia (Federated States of)</option ><option value="MD">Moldova (Republic of)</option ><option value="MC">Monaco</option ><option value="MN">Mongolia</option ><option value="ME">Montenegro</option ><option value="MS">Montserrat</option ><option value="MA">Morocco</option ><option value="MZ">Mozambique</option ><option value="MM">Myanmar</option ><option value="NA">Namibia</option ><option value="NR">Nauru</option ><option value="NP">Nepal</option ><option value="NL">Netherlands</option ><option value="NC">New Caledonia</option ><option value="NZ">New Zealand</option ><option value="NI">Nicaragua</option ><option value="NE">Niger</option ><option value="NG">Nigeria</option ><option value="NU">Niue</option ><option value="NF">Norfolk Island</option ><option value="MP">Northern Mariana Islands</option ><option value="NO">Norway</option ><option value="OM">Oman</option ><option value="PK">Pakistan</option ><option value="PW">Palau</option ><option value="PS">Palestine, State of</option ><option value="PA">Panama</option ><option value="PG">Papua New Guinea</option ><option value="PY">Paraguay</option ><option value="PE">Peru</option ><option value="PH">Philippines</option ><option value="PN">Pitcairn</option ><option value="PL">Poland</option ><option value="PT">Portugal</option ><option value="PR">Puerto Rico</option ><option value="QA">Qatar</option ><option value="RE">Réunion</option ><option value="RO">Romania</option ><option value="RU">Russian Federation</option ><option value="RW">Rwanda</option ><option value="BL">Saint Barthélemy</option ><option value="SH">Saint Helena, Ascension and Tristan da Cunha</option ><option value="KN">Saint Kitts and Nevis</option ><option value="LC">Saint Lucia</option ><option value="MF">Saint Martin (French part)</option ><option value="PM">Saint Pierre and Miquelon</option ><option value="VC">Saint Vincent and the Grenadines</option ><option value="WS">Samoa</option ><option value="SM">San Marino</option ><option value="ST">Sao Tome and Principe</option ><option value="SA">Saudi Arabia</option ><option value="SN">Senegal</option ><option value="RS">Serbia</option ><option value="SC">Seychelles</option ><option value="SL">Sierra Leone</option ><option value="SG">Singapore</option ><option value="SX">Sint Maarten (Dutch part)</option ><option value="SK">Slovakia</option ><option value="SI">Slovenia</option ><option value="SB">Solomon Islands</option ><option value="SO">Somalia</option ><option value="ZA">South Africa</option ><option value="GS">South Georgia and the South Sandwich Islands</option ><option value="SS">South Sudan</option ><option value="ES">Spain</option ><option value="LK">Sri Lanka</option ><option value="SD">Sudan</option ><option value="SR">Suriname</option ><option value="SJ">Svalbard and Jan Mayen</option ><option value="SZ">Swaziland</option ><option value="SE">Sweden</option ><option value="CH">Switzerland</option ><option value="SY">Syrian Arab Republic</option ><option value="TW">Taiwan</option ><option value="TJ">Tajikistan</option ><option value="TZ">Tanzania, United Republic of</option ><option value="TH">Thailand</option ><option value="TL">Timor-Leste</option ><option value="TG">Togo</option ><option value="TK">Tokelau</option ><option value="TO">Tonga</option ><option value="TT">Trinidad and Tobago</option ><option value="TN">Tunisia</option ><option value="TR">Turkey</option ><option value="TM">Turkmenistan</option ><option value="TC">Turks and Caicos Islands</option ><option value="TV">Tuvalu</option ><option value="UG">Uganda</option ><option value="UA">Ukraine</option ><option value="AE">United Arab Emirates</option ><option value="GB">United Kingdom</option ><option value="US">United States of America</option ><option value="UM">United States Minor Outlying Islands</option ><option value="UY">Uruguay</option ><option value="UZ">Uzbekistan</option ><option value="VU">Vanuatu</option ><option value="VE">Venezuela (Bolivarian Republic of)</option ><option value="VN">Viet Nam</option ><option value="VG">Virgin Islands (British)</option ><option value="VI">Virgin Islands (U.S.)</option ><option value="WF">Wallis and Futuna</option ><option value="EH">Western Sahara</option ><option value="YE">Yemen</option ><option value="ZM">Zambia</option ><option value="ZW">Zimbabwe</option> </select> </li> </ul> </fieldset> <fieldset class="u-no-margin--bottom"> <legend class="u-off-screen">About your company</legend> <h2 class="p-heading--3">About your company</h2> <ul class="p-list"> <li class="p-list__item"> <label for="company">Company name:</label> <input required id="company" name="company" maxlength="255" type="text" /> </li> <li class="p-list__item"> <label for="job-title">Job title:</label> <input required id="job-title" name="title" maxlength="255" type="text" /> </li> </ul> </fieldset> <fieldset class="u-no-margin--bottom"> <legend class="u-off-screen">Your comments</legend> <h2 class="p-heading--3">Your comments</h2> <ul class="p-list"> <li class="p-list__item"> <label for="Comments_from_lead__c">What would you like to talk to us about?</label> <textarea required id="Comments_from_lead__c" name="Comments_from_lead__c" rows="5" maxlength="2000"></textarea> </li> <li class="p-list__item"> <label class="p-checkbox"> <input class="p-checkbox__input" value="yes" aria-labelledby="canonicalUpdatesOptIn" name="canonicalUpdatesOptIn" type="checkbox"> <span class="p-checkbox__label" id="canonicalUpdatesOptIn">I agree to receive information about Canonical's products and services.</span> </label> </li> <li class="p-list__item">In submitting this form, I confirm that I have read and agree to <a href="/legal/data-privacy/contact">Canonical's Privacy Notice</a> and <a href="/legal/data-privacy">Privacy Policy</a>.</li> <li class="u-off-screen"> <label class="website" for="website">Website:</label> <input name="website" type="text" class="website" autocomplete="off" value="" id="website" tabindex="-1" /> </li> <li class="u-off-screen"> <label class="name" for="name">Name:</label> <input name="name" type="text" class="name" autocomplete="off" value="" id="name" tabindex="-1" /> </li> <li class="p-list__item"> <button type="submit" class="p-button--positive" onclick="dataLayer.push({'event' : 'GAEvent', 'eventCategory' : 'Form', 'eventAction' : 'iot contact-us', 'eventLabel' : 'snapcraft.ioappstore', 'eventValue' : undefined });">Submit</button> </li> </ul> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="formid" value="{{formid}}" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="returnURL" value="https://snapcraft.io/about/thank-you" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="Consent_to_Processing__c" value="yes" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_campaign" id="utm_campaign" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_medium" id="utm_medium" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_source" id="utm_source" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_content" id="utm_content" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="utm_term" id="utm_term" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="GCLID__c" id="GCLID__c" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" name="Facebook_Click_ID__c" id="Facebook_Click_ID__c" value="" /> <input type="hidden" aria-hidden="true" aria-label="hidden field" id="preferredLanguage" name="preferredLanguage" maxlength="255" value="" /> </fieldset> </form> </script> <script> window.addEventListener("DOMContentLoaded", function() { Raven.context(function () { try { snapcraft.public.storeDetails.initExpandableArea(); } catch (e) { Raven.captureException(e); } try { snapcraft.public.storeDetails.screenshots('#js-snap-screenshots'); } catch(e) { Raven.captureException(e); } try { snapcraft.public.storeDetails.videos('.js-video-slide'); } catch(e) { Raven.captureException(e); } try { snapcraft.public.storeDetails.initReportSnap( '.js-modal-open', '#report-snap-modal', document.getElementById('report-snap-form').action ); } catch(e) { Raven.captureException(e); } try { snapcraft.public.storeDetails.initEmbeddedCardModal('spotify'); } catch(e) { Raven.captureException(e); } try { snapcraft.public.storeDetails.channelMap('#js-channel-map', "spotify", {"amd64": {"latest": [{"channel": "stable", "confinement": "strict", "released-at": "11 March 2025", "risk": "stable", "size": 193155072, "version": "1.2.56.502.ga68d2d4f"}, {"channel": "candidate", "confinement": "strict", "released-at": "13 March 2025", "risk": "candidate", "size": 193654784, "version": "1.2.59.514.g834e17d4"}, {"channel": "edge", "confinement": "strict", "released-at": "13 March 2025", "risk": "edge", "size": 193654784, "version": "1.2.59.514.g834e17d4"}]}}, "latest"); } catch(e) { Raven.captureException(e); document.querySelector('.js-open-channel-map').style.display = 'none'; } }); }); </script> <script src="/static/js/dist/global-nav.js?v=091031d"></script> <script type="application/ld+json"> { "@context": "http://schema.org/", "@id": "https://snapcraft.io/#organization", "@type": "Organization", "name": "Snapcraft", "logo": "https://assets.ubuntu.com/v1/e635d1ef-snapcraft_green-red_hex.png", "url": "https://snapcraft.io", "sameAs": [ "https://developer.ubuntu.com/snapcraft", "https://github.com/snapcore/snapcraft", "https://en.wikipedia.org/wiki/Snappy_(package_manager)", "https://twitter.com/snapcraftio", "https://www.facebook.com/snapcraftio/", "https://www.youtube.com/snapcraftio" ] } </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@id": "https://snapcraft.io/#website", "@type": "WebPage", "name": "Snapcraft", "url": "https://snapcraft.io/spotify" } </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "spotify", "description": "Music for everyone", "datePublished": "2025-03-11T09:58:41.551185+00:00", "applicationCategory": "Music and Audio", "image": "https://dashboard.snapcraft.io/site_media/appmedia/2017/12/spotify-linux-256.png", "operatingSystem": "linux", "offers": { "price": 0.00, "priceCurrency": "USD" }, "author": { "@type": "Person", "name": "Spotify" }, "softwareVersion": "1.2.56.502.ga68d2d4f", "fileSize": "193.2 MB", "license": "Proprietary" } </script> </body> </html>