Anderson Mesquita f3c6af0b7b fix(macos): bundle SDL3 for sdl2-compat at install time
Homebrew replaced its `sdl2` formula with `sdl2-compat`, a compatibility
layer that provides the SDL2 API by `dlopen`-ing the real SDL3 library
at runtime. The macOS CI build (`build-macos.yml`) pulls this via `brew
install mpv`, so the app now links `libSDL2-2.0.0.dylib` which is
actually `sdl2-compat`, and every nightly ships it in
`Contents/Frameworks`.

SDL3 is not a linker dependency, so it never shows up in `otool -L`
output and the `CompleteBundleMac` fixup loop never copies it into the
app bundle. At runtime `sdl2-compat` looks for `libSDL3.dylib` relative
to its own loader path, cannot find it, prints "Failed loading SDL3
library." and aborts during dyld initialization, since the library is
missing. This regression appeared once Homebrew's SDL2 became the
`sdl2-compat` shim, so older nightly builds (built against genuine SDL2)
are unaffected.

This detects `sdl2-compat` inside the bundle (it is the only
`libSDL2-2.0.0.dylib` containing the `libSDL3.dylib` loader string) and
explicitly copies libSDL3 from the Homebrew prefix into
`Contents/Frameworks/libSDL3.dylib`, using the same `install-id`
convention as the other bundled dylibs so `codesign` and the existing
fixup steps keep working. If SDL3 cannot be found at install time a
warning is printed instead of failing silently.

Fixes #1225
2026-08-12 22:38:42 -04:00
2025-12-14 05:26:31 -05:00
2025-12-30 18:52:14 -05:00
2025-12-23 00:53:53 -05:00
2026-08-08 18:02:08 +02:00
2026-03-15 22:46:15 -04:00
2025-11-23 02:09:33 -05:00
2025-12-14 05:26:31 -05:00
2015-10-13 11:06:01 +02:00
2025-12-14 06:19:37 -05:00

Jellyfin Desktop

Jellyfin desktop client built with Qt WebEngine and libmpv. Supports audio passthrough, hardware decoding, and playback of more formats without transcoding.

Screenshot of Jellyfin Desktop

Downloads

Development Builds

Built from the latest commit on master.

macOS

Windows

Linux

Building

See dev/ for platform-specific build instructions.

File Locations

Data is stored per-profile in a profiles/<profile-id>/ subdirectory. The main configuration file is jellyfin-desktop.conf. You can also add mpv.conf to configure MPV directly.

Windows:

  • Config: %LOCALAPPDATA%\Jellyfin Desktop\profiles\<profile-id>\
  • Cache: %LOCALAPPDATA%\Jellyfin Desktop\profiles\<profile-id>\
  • Logs: %LOCALAPPDATA%\Jellyfin Desktop\profiles\<profile-id>\logs\

Linux:

  • Config: ~/.local/share/jellyfin-desktop/profiles/<profile-id>/
  • Cache: ~/.cache/jellyfin-desktop/profiles/<profile-id>/
  • Logs: ~/.local/share/jellyfin-desktop/profiles/<profile-id>/logs/

Linux (Flatpak):

  • Config: ~/.var/app/org.jellyfin.JellyfinDesktop/data/jellyfin-desktop/profiles/<profile-id>/
  • Cache: ~/.var/app/org.jellyfin.JellyfinDesktop/cache/jellyfin-desktop/profiles/<profile-id>/
  • Logs: ~/.var/app/org.jellyfin.JellyfinDesktop/data/jellyfin-desktop/profiles/<profile-id>/logs/

macOS:

  • Config: ~/Library/Application Support/Jellyfin Desktop/profiles/<profile-id>/
  • Cache: ~/Library/Caches/Jellyfin Desktop/profiles/<profile-id>/
  • Logs: ~/Library/Logs/Jellyfin Desktop/<profile-id>/
Languages
C++ 65.7%
JavaScript 15.2%
CMake 9.8%
Objective-C++ 2%
Batchfile 1.8%
Other 5.4%