<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developers on Navidrome</title><link>https://pr-289.navidrome-website.pages.dev/docs/developers/</link><description>Recent content in Developers on Navidrome</description><generator>Hugo</generator><language>en</language><atom:link href="https://pr-289.navidrome-website.pages.dev/docs/developers/index.xml" rel="self" type="application/rss+xml"/><item><title>Development Environment</title><link>https://pr-289.navidrome-website.pages.dev/docs/developers/dev-environment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-289.navidrome-website.pages.dev/docs/developers/dev-environment/</guid><description>&lt;div class="pageinfo pageinfo-primary"&gt;
&lt;p&gt;This is just a summary on how to get started. If you are stuck or have any questions, please join our &lt;a href="https://discord.gg/xh7j7yF"&gt;Discord server&lt;/a&gt; and give us a shout on the &lt;code&gt;#dev&lt;/code&gt; channel&lt;/p&gt;

&lt;/div&gt;

&lt;p&gt;Any IDE with good support for GoLang and JavaScript/Node can be used for Navidrome development. We suggest using &lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt;, which has excellent support for both languages.&lt;/p&gt;
&lt;h3 id="using-vscode--dev-container-docker"&gt;Using VSCode + Dev Container (Docker)&lt;a class="td-heading-self-link" href="#using-vscode--dev-container-docker" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;The project includes a &lt;a href="https://code.visualstudio.com/docs/remote/containers"&gt;VSCode Dev Container&lt;/a&gt; configuration for using with &lt;a href="https://www.docker.com/products/docker-desktop"&gt;Docker&lt;/a&gt;. The Dev Container provides all dependencies out-of-the-box. If you prefer to install all dependencies yourself, or cannot/don&amp;rsquo;t want to install Docker for any reason, see the other sections below for step by step instructions for your OS.&lt;/p&gt;</description></item><item><title>Creating New Themes</title><link>https://pr-289.navidrome-website.pages.dev/docs/developers/creating-themes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-289.navidrome-website.pages.dev/docs/developers/creating-themes/</guid><description>&lt;p&gt;Themes in Navidrome are simple &lt;a href="https://material-ui.com/customization/theming/"&gt;Material-UI themes&lt;/a&gt;. They are basic JS
objects, that allow you to override almost every visual aspect of Navidrome&amp;rsquo;s UI.&lt;/p&gt;
&lt;h2 id="steps-to-create-a-new-theme"&gt;Steps to create a new theme:&lt;a class="td-heading-self-link" href="#steps-to-create-a-new-theme" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Create a new JS file in the &lt;code&gt;ui/src/themes&lt;/code&gt; folder that exports an object containing your theme. Create
the theme based on the ReactAdmin/Material UI documentation below.
See the existing themes for examples.&lt;/li&gt;
&lt;li&gt;Add a &lt;code&gt;themeName&lt;/code&gt; property to your theme. This will be displayed in the theme selector&lt;/li&gt;
&lt;li&gt;Add your new theme to the &lt;code&gt;ui/src/themes/index.js&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Start the application, your new theme should now appear as an option in the theme selector&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Before submitting a pull request to include your theme in Navidrome, please test your theme thoroughly and make sure
it is formatted with the &lt;a href="https://prettier.io/"&gt;Prettier&lt;/a&gt; rules found in the project (&lt;code&gt;ui/src/.prettierrc.js&lt;/code&gt;).
Also, don&amp;rsquo;t forget to add lots of screenshots!&lt;/p&gt;</description></item><item><title>Translations</title><link>https://pr-289.navidrome-website.pages.dev/docs/developers/translations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-289.navidrome-website.pages.dev/docs/developers/translations/</guid><description>&lt;a href="https://poeditor.com/"&gt;
&lt;p&gt;
&lt;img src="https://github.com/user-attachments/assets/c19b1d2b-01e1-4682-a007-12356c42147c"&gt;
&lt;/p&gt;
&lt;/a&gt;
&lt;p&gt;Translations are currently managed in &lt;a href="https://poeditor.com"&gt;POEditor&lt;/a&gt;.
If you want to contribute new translations or help reviewing/proofreading any of the existing
ones, please join our &lt;a href="https://discord.gg/xh7j7yF"&gt;Discord server&lt;/a&gt;, channel &lt;code&gt;#translations&lt;/code&gt;, for
translation efforts coordination and to get further instructions.&lt;/p&gt;
&lt;h2 id="contributing-with-a-pull-request"&gt;Contributing with a Pull Request&lt;a class="td-heading-self-link" href="#contributing-with-a-pull-request" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Alternatively, you can submit a pull request with your proposed changes directly
&lt;a href="https://github.com/navidrome/navidrome/tree/master/resources/i18n"&gt;to our project in GitHub&lt;/a&gt;. This method requires
you to have a GitHub account and some basic knowledge of Git.&lt;/p&gt;</description></item><item><title>Adding Client Apps to the Catalog</title><link>https://pr-289.navidrome-website.pages.dev/docs/developers/adding-apps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-289.navidrome-website.pages.dev/docs/developers/adding-apps/</guid><description>&lt;p&gt;Want to list your app in the &lt;a href="https://pr-289.navidrome-website.pages.dev/apps/"&gt;Compatible Client Apps&lt;/a&gt; catalog? This guide explains how to submit your app or update an existing entry.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;a class="td-heading-self-link" href="#prerequisites" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Your app must support the &lt;a href="https://opensubsonic.netlify.app/"&gt;OpenSubsonic&lt;/a&gt;, &lt;a href="https://subsonic.org/pages/api.jsp"&gt;Subsonic&lt;/a&gt;, or Navidrome API&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;ll need a GitHub account to submit a pull request&lt;/li&gt;
&lt;li&gt;Images must be in WebP format, max 1200px (PNG/JPEG needs to be &lt;a href="https://www.navidrome.org/docs/developers/adding-apps/#processing-images"&gt;converted&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="quick-start"&gt;Quick Start&lt;a class="td-heading-self-link" href="#quick-start" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Fork the &lt;a href="https://github.com/navidrome/website"&gt;navidrome/website&lt;/a&gt; repository&lt;/li&gt;
&lt;li&gt;Create a folder for your app in &lt;code&gt;assets/apps/&lt;/code&gt; using kebab-case (e.g., &lt;code&gt;my-awesome-app&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Add an &lt;code&gt;index.yaml&lt;/code&gt; file with your app&amp;rsquo;s metadata&lt;/li&gt;
&lt;li&gt;Add a thumbnail image and optional gallery screenshots&lt;/li&gt;
&lt;li&gt;Convert (or resize) images if needed:
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run convert:images my-awesome-app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Validate your entry using the provided scripts:
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run validate:app my-awesome-app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Submit a pull request&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="folder-structure"&gt;Folder Structure&lt;a class="td-heading-self-link" href="#folder-structure" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Each app has its own folder under &lt;code&gt;assets/apps/&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Subsonic API Compatibility</title><link>https://pr-289.navidrome-website.pages.dev/docs/developers/subsonic-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pr-289.navidrome-website.pages.dev/docs/developers/subsonic-api/</guid><description>&lt;h3 id="supported-subsonic-api-endpoints"&gt;Supported Subsonic API endpoints&lt;a class="td-heading-self-link" href="#supported-subsonic-api-endpoints" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Navidrome is currently compatible with &lt;a href="http://www.subsonic.org/pages/api.jsp"&gt;Subsonic API&lt;/a&gt;
v1.16.1, with some exceptions.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opensubsonic.netlify.app/"&gt;OpenSubsonic&lt;/a&gt; extensions are being constantly added. For an up to date list of
supported extensions, check &lt;a href="https://github.com/navidrome/navidrome/issues/2695"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a (hopefully) up-to-date list of all Subsonic API endpoints implemented in Navidrome.
Check the &amp;ldquo;Notes&amp;rdquo; column for limitations/missing behavior. Also keep in mind these differences
between Navidrome and Subsonic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navidrome will not implement any video related functionality, it is focused on Music only&lt;/li&gt;
&lt;li&gt;Navidrome supports &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/features/multi-library/"&gt;multiple Music Libraries (Music Folders)&lt;/a&gt; with user-specific access controls&lt;/li&gt;
&lt;li&gt;There are currently no plans to support browse-by-folder. Endpoints for this functionality (Ex: &lt;code&gt;getIndexes&lt;/code&gt;, &lt;code&gt;getMusicDirectory&lt;/code&gt;)
returns a simulated directory tree, using the format: &lt;code&gt;/Artist/Album/01 - Song.mp3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Navidrome does not mark songs as played by calls to &lt;code&gt;stream&lt;/code&gt;, only when
&lt;code&gt;scrobble&lt;/code&gt; is called with &lt;code&gt;submission=true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;IDs in Navidrome are always strings, normally MD5 hashes or UUIDs. This is important to
mention because, even though the Subsonic API
&lt;a href="http://www.subsonic.org/pages/inc/api/schema/subsonic-rest-api-1.16.1.xsd"&gt;schema&lt;/a&gt;
specifies IDs as strings, some clients insist in converting IDs to integers&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;System&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ping&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getLicense&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Always valid ;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Browsing&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getMusicFolders&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns all libraries accessible to the authenticated user&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getIndexes&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Doesn&amp;rsquo;t support &lt;code&gt;shortcuts&lt;/code&gt;, nor direct children&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getMusicDirectory&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getSong&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getArtists&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getArtist&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getAlbum&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getGenres&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getArtistInfo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Requires &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/integration/external-services/"&gt;external integrations&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getArtistInfo2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Requires &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/integration/external-services/"&gt;external integrations&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getAlbumInfo&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Requires &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/integration/external-services/"&gt;external integrations&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getAlbumInfo2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Requires &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/integration/external-services/"&gt;external integrations&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getTopSongs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Requires &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/integration/external-services/"&gt;Last.fm integration&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getSimilarSongs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Requires &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/integration/external-services/"&gt;Last.fm integration&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getSimilarSongs2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Requires &lt;a href="https://pr-289.navidrome-website.pages.dev/docs/usage/integration/external-services/"&gt;Last.fm integration&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Album/Songs Lists&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getAlbumList&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getAlbumList2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getStarred&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getStarred2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getNowPlaying&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getRandomSongs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getSongsByGenre&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Searching&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;search2&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Doesn&amp;rsquo;t support Lucene queries, only simple auto complete queries&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;search3&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Doesn&amp;rsquo;t support Lucene queries, only simple auto complete queries&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Playlists&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getPlaylists&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;username&lt;/code&gt; parameter is not implemented&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getPlaylist&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;createPlaylist&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;updatePlaylist&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;deletePlaylist&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Media Retrieval&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;stream&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;download&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Accepts ids for Songs, Albums, Artists and Playlists. Also accepts transcoding options similar to &lt;code&gt;stream&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getCoverArt&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getLyrics&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Works with embedded lyrics and external files&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getAvatar&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;If Gravatar is enabled and the user has an email, returns a redirect to their Gravatar. Or else returns a placeholder&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Media Annotation&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;star&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;unstar&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;setRating&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;scrobble&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Bookmarks&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getBookmarks&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;createBookmark&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;deleteBookmark&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getPlayQueue&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;current&lt;/code&gt; is a string id, not &lt;code&gt;int&lt;/code&gt; as it shows in the official Subsonic API documentation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;savePlayQueue&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Sharing&lt;/em&gt; (if &lt;code&gt;EnableSharing&lt;/code&gt; is &lt;code&gt;true&lt;/code&gt;)&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getShares&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;createShare&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;updateShare&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;deleteShare&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Internet radio&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getInternetRadioStations&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;createInternetRadioStation&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;updateInternetRadioStation&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;deleteInternetRadioStation&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;User Management&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getUser&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ignores username parameter, and returns the user identified in the authentication. Roles reflect actual server capabilities and user permissions. For example: &lt;code&gt;downloadRole&lt;/code&gt; depends on download being enabled, &lt;code&gt;jukeboxRole&lt;/code&gt; depends on jukebox being enabled, etc. Note that some features like ratings and favorites are always available to all users regardless of roles&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getUsers&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns only the user identified in the authentication&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;em&gt;Media library scanning&lt;/em&gt;&lt;/th&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;getScanStatus&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Also returns the extra fields &lt;code&gt;lastScan&lt;/code&gt; and &lt;code&gt;folderCount&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;startScan&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Accepts an extra &lt;code&gt;fullScan&lt;/code&gt; boolean param, to force a full scan&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item></channel></rss>