MCPcopy Create free account
hub / github.com/Frank-Friemel/ShairportQt

github.com/Frank-Friemel/ShairportQt @1.0.0.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.0.0.6 ↗ · + Follow
2,217 symbols 4,516 edges 107 files 220 documented · 10% updated 3mo ago1.0.0.6 · 2026-04-02★ 23210 open issues

Browse by type

Functions 1,843 Types & classes 374
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

ShairportQt

An AirPlay Audio-Receiver for your Personal Computer or ARM-SoC (e.g. Raspberry Pi).

Play audio content from your iPhone, iPad, iPod or iTunes on your PC with ShairportQt. AirPlay lets you wirelessly stream what's on your iOS device whenever you see the AirPlay symbol.

This desktop-software was originally only available for Windows. But now it's based on Qt and is therefore completely portable/cross platform. Additionally many bugs have been fixed - compared to the previous version (Shairport4w).

Please download precompiled binaries from Releases. If asked by your Firewall, you should grant access to your LAN if you are on a secure network. Protect ShairportQt with a password to be sure nobody is misusing this service.

Installation

ShairportQt consists of a single executable file. So, there's not much to install. Nevertheless I would like to provide some hints for the various operating systems which worked for me. When updating your existing installation, please do the same, but make sure to close the running instance of ShairportQt first.

Windows (x64)

The Releases section contains a setup executable. It will forward you to Apple's Bonjour download, if needed.

Alternatively you may install manually by just downloading the zip file and copying the file ShairportQt.exe to your filesystem and create a Desktop-Link. That's it.

Shairport depends on Apple's Bonjour. Just start ShairportQt... it will guide you in case Bonjour is not installed on your machine. Please retry to start ShairportQt.exe after installation of Bonjour.

Linux (x64)

The installation for Linux depends a bit on your Linux distribution. I myself am using Manjaro-Linux which worked out of the box and I would expect the same for all KDE-based distributions. You'll need at least Qt 6.7 installed on your machine.

The releases package contains an installation script. So, for now you need to unpack the zip file, open a terminal, change-directory to Linux_x64 and start script install.sh as superuser:

chmod a+x install.sh
sudo ./install.sh

Afterwards ShairportQt application should be available from your start menu.

Raspbian (arm64)

The releases package contains an installation script. So, for now you need to unpack the zip file, open a terminal, change-directory to Raspbian and start script install.sh as superuser:

chmod a+x install.sh
sudo ./install.sh

Afterwards ShairportQt application should be available from your start menu.

Problem reports

When you have issues with ShairportQt please provide the following information:

  • Operating System you're using.
  • The device/software which connects to ShairportQt
  • Detailed steps on how to reproduce.
  • a log file. Which may be enabled from the advanced options dialog. The log file ShairportQt.log will be created within your home folder. Alternatively start ShairportQt with command line option -log.

Building

ShairportQt is a CMake project. You'll need a complete c++ development environment and these packages to build it:

  • openssl
  • spdlog
  • sockpp
  • qtbase
  • WinToast
  • gtest

I recommend to use vcpkg in order to get them. It works very well on Linux and Windows.

On Windows just open ShairportQt as CMake project with Visual Studio. On Linux you may use Visual Studio Code or build from the command line (assumed you're using vcpkg):

git clone https://github.com/Frank-Friemel/ShairportQt.git
cd ShairportQt
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release
cmake --build .

Credits

Thanks to James Laird who implemented the original version of "Shairport". Special thanks to Japanese Translator maborosohin.

Screenshots

Usage Hints

Click on the time marker to the right of the progress bar to toggle between different display modes.

ShairportQt offers a tray icon which may be disabled. If the function Show "Now Playing" in Tray is switched on, title information will only appear in the tray if the main window is not visible on the desktop. To completely hide/restore the main window from the taskbar you have to click on the tray icon (for Windows users, a double click may work as well). A tray menu will show up when you right click on the tray icon. The option "Start minimized" will minimize the application window to the tray, if the tray icon is enabled.

The multimedia buttons at the bottom of the main window are being used to remotely control your connected device. This also applies to the volume buttons, so it's not your local volume which will increase/decrease.

ShairportQt allows you to start multiple process-instances with different configurations. All you need to do is to provide a name for your instance configuration by applying the command line parameter -config=MyConfigurationName. The allowed characters for the configuration-name are limited to characters A-Z, a-z and 0-9.

ShairportQt supports multiple languages. Your preferred language is being detected automatically, usually. In case you would like to set it manually ... please edit the file .ShairportQt_Config.json which is located in your home folder. The format is json. So, please be sure not to break the config when you're making changes (e.g. please add a comma, if it's not the last entry). You may set the key Language to one of these values:

  • en-EN for English
  • de-DE for German
  • es-ES for Spanish
  • ca-ES for Catalan
  • ja-JP for Japanese

Example forcing the language to be Japanese:

"Language": "ja-JP",

Important: Manually editing the config works only when ShairportQt is not running

System Integrated Media Control

ShairportQt integrates its controls into your system. Windows calls this SMTC, Linux calls it MPRIS. The purpose is the same — allowing the system or other applications to control installed media applications. If you don't need or want this feature, you may disable it by unchecking the checkbox in the options dialog.

Please keep in mind that ShairportQt is designed to act as a media server. The client is the device sending the music, which connects to ShairportQt. So if the remote device disconnects its controls from ShairportQt, those controls will also become unavailable to SMTC/MPRIS.

Avahi (aka Bonjour)

For Windows you may need to download and install Bonjour. When being asked during the installation ... just dismiss the option to automatically update Bonjour's files in the background. This may save you from having another unnecessary process running on your machine. A desktop-link for Bonjour is also completely unnecessary.

On my Raspbian ... I had to install libavahi-compat-libdnssd-dev.

sudo apt install libavahi-compat-libdnssd-dev

For other Linux distributions, the package name is different:

  • Fedora: avahi-compat-libdns_sd

Also you may need to enable/start the avahi-daemon:

sudo systemctl enable avahi-daemon
sudo systemctl start avahi-daemon

On some Linux distributions you may have to install avahi via their own desktop installation tool. Please see my Video Installation of ShairportQt on Suse.

Core symbols most depended-on inside this repo

Shape

Method 1,353
Function 490
Class 344
Enum 30

Languages

C++100%

Modules by API surface

inc/httplib/httplib_raop.h363 symbols
lib/internal_rapidjson/document.h229 symbols
lib/internal_rapidjson/schema.h208 symbols
inc/LayerCake.h135 symbols
lib/internal_rapidjson/reader.h87 symbols
lib/internal_rapidjson/encodings.h62 symbols
app/LinuxMultimediaStateReceiver.cpp62 symbols
app/MainDlg.cpp60 symbols
lib/LayerCake.cpp58 symbols
lib/internal_rapidjson/encodedstream.h49 symbols
lib/internal_rapidjson/writer.h47 symbols
lib/dnssd.cpp43 symbols

For agents

$ claude mcp add ShairportQt \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page