Skip to main content

Platform Support

Audience: End users, system administrators, technical stakeholders Last Updated: 2026-04-06 Version: 2.0.0


Table of Contents

  1. Overview
  2. Supported Platforms
  3. How Platform Detection Works
  4. Feature Comparison
  5. Mobile Experience
  6. Desktop Experience
  7. Web Experience
  8. Hardware Integration
  9. Permissions & Privacy
  10. Performance Adaptations
  11. Technical Specifications
  12. Known Limitations
  13. Related Documentation

Overview

Llamafin runs on four distinct platforms — Web, Android, iOS, and Desktop (Windows/macOS/Linux) — using a single codebase that adapts its behaviour to each platform's unique capabilities and limitations.

Why It Matters

Rather than maintaining four separate apps, Llamafin uses a unified approach:

  • Consistent Features: Every platform gets the same core functionality
  • Platform-Specific Optimizations: Each platform gets tailored performance settings
  • Native Integration: Mobile and desktop versions access device hardware (haptics, audio outputs, file system)
  • Simplified Updates: A single code change improves all platforms simultaneously

Platform Architecture

All platforms share the same Angular 16 web application, but each adds a different "wrapper":

PlatformWrapperWhat It Adds
WebNone (runs in browser)Nothing — pure web app
AndroidCapacitor 5Native APIs (haptics, file system, status bar, share)
iOSCapacitor 5Native APIs (haptics, file system, status bar, share)
DesktopElectron 25Node.js runtime, native window management, system audio device access

Supported Platforms

Minimum Requirements

PlatformMinimum VersionRelease DateNotes
Chrome (Desktop)79+December 2019Full PWA support
Chrome (Android)79+December 2019Full native features
Firefox70+October 2019Web Share API not available
Edge (Chromium)79+January 2020Full PWA supports
Safari (Desktop)14+September 2020Full PWA supports
Safari (iOS)14+September 2020Full native features
Android OS6.0 (API 23)October 2015Target: Android 15 (API 35)

Not Supported

PlatformReason
Internet ExplorerUses modern JavaScript (ES2022) not available in IE
iPad (optimised)Currently iPhone-only; runs in compatibility mode on iPad
Windows PhonePlatform discontinued

How Platform Detection Works

When the app starts, it detects which platform it's running on and configures itself accordingly.

Detection Process

App Starts


Step 1: Is this Electron?
├── Yes → Platform = 'electron'
│ Features: Window management, native audio devices, system tray

└── No → Ask Capacitor: What platform am I on?
├── 'android' → Platform = 'android'
│ Features: Haptics, status bar, native file system

├── 'ios' → Platform = 'ios'
│ Features: Haptics, status bar, native file system

└── 'web' → Platform = 'web'
Features: Browser APIs only, IndexedDB storage

What Changes Based on Platform

Detected PlatformKey Adaptations
ElectronFrameless window, always-on-top, custom audio output selection, system tray
Android/iOSHidden status bar, edge-to-edge content, haptic feedback, lower performance defaults, camera notch compensation
WebStandard browser window, no haptics, full performance defaults, IndexedDB storage

Feature Comparison

Complete Feature Matrix

FeatureWebAndroidiOSDesktop
Music Streaming✅ Yes✅ Yes✅ Yes✅ Yes
Offline Downloads✅ (browser storage)✅ (native file system)✅ (native file system)✅ (native file system)
Haptic Feedback❌ No✅ Yes✅ Yes❌ No
Lock Screen Controls❌ No (Media Session API only)✅ Yes✅ Yes❌ No
Audio Output Selection❌ Browser default✅ Bluetooth/wired✅ Bluetooth/wired✅ All system devices
CarPlay / Android Auto❌ No✅ Android Auto✅ CarPlay❌ No
Voice Search❌ No✅ Google Assistant✅ Siri❌ No
Native Sharing⚠️ Limited (HTTPS only)✅ Full✅ Full✅ Full
Server Discovery❌ Mock data only✅ mDNS/UDP✅ mDNS/UDP✅ mDNS/UDP
Window Resizing❌ Browser controlled❌ Full screen❌ Full screen✅ Custom sizes
Always on Top❌ No❌ No❌ No✅ Yes
System Tray❌ No❌ No❌ No✅ Yes
Keyboard Shortcuts❌ Browser defaults❌ No❌ No✅ Media keys
Camera Notch Compensation❌ N/A✅ Automatic✅ Automatic❌ N/A

Legend

  • ✅ = Fully supported
  • ❌ = Not supported
  • ⚠️ = Partially supported (with limitations)

Mobile Experience

Android

Key Adaptations:

FeatureBehaviour
Status BarHidden completely for immersive experience. Content renders edge-to-edge behind the status bar area.
Back ButtonHardware back button handled by Angular router (not Ionic's swipe gesture). Swipe-to-go-back is disabled.
KeyboardWhen the keyboard appears, the app automatically resizes to keep input fields visible.
PerformanceOn first install, the app automatically applies performance-optimised settings (lower frame rates, fewer visual effects) to ensure smooth playback on mobile hardware. This happens once and is never repeated.
HapticsTactile feedback on button taps, modal interactions, seekbar drags, and multi-select operations. Can be disabled in settings.
File StorageRequires read/write storage permission. Permission is checked at startup and re-checked when the app returns from background.
SharingUses Android's native share sheet (same as any other app).

Android Permissions Requested:

  • Internet (for streaming)
  • Read/Write External Storage (for downloads)
  • Wake Lock (to prevent screen sleeping during playback)
  • Foreground/Background Service (for background playback and downloads)

iOS

Key Adaptations:

FeatureBehaviour
Status BarHidden completely for immersive experience. Content renders edge-to-edge.
Home IndicatorSafe area padding automatically applied on devices with home indicators (iPhone X and later).
Camera NotchAutomatic padding compensation for notch and Dynamic Island on supported devices.
KeyboardSame as Android — app resizes to keep input visible.
PerformanceSame as Android — automatic performance optimisation on first install.
HapticsSame as Android — uses Apple's Taptic Engine for precise feedback.
File StorageUses iOS sandboxed file system. Files stored in app's Documents directory.
SharingUses iOS native share sheet (AirDrop, Messages, etc.).
CarPlayLock screen controls and CarPlay integration via Media Session plugin.

iPhone Only: The app is optimised for iPhone. iPad users can run it in compatibility mode (2x phone size) but it is not natively optimised for tablet screens.

Mobile Performance Settings

On first install, the app automatically applies these optimizations to mobile devices:

SettingDesktop DefaultMobile optimisationWhy
Spectrum VisualizerHigh preset (60 FPS)Low preset (15 FPS, 16 bars)Saves battery and CPU
EQ FadersHigh fidelityLow preset (100ms throttle)Reduces rendering load
Rotary DialAnimatedStatic/lowFewer animations
Download PerformanceHighLowPrevents network congestion
Visualisations FPS60 FPS25 FPSSmooth but efficient
Text OverflowMarquee (scrolling)Truncated (static)Less CPU for text animation
Turntable AnimationFull detailPower saverReduces GPU load

These settings are applied ONCE and never changed again. Users can manually override them in Settings → Appearance.


Desktop Experience

Electron Desktop App

The desktop version wraps the web app in a native window with additional capabilities.

Window Management

FeatureBehaviour
Default Size268 × 513 pixels (compact music player size, similar to Plexamp)
Expanded Size412 × 660 pixels (full player with Visualisations)
FramelessNo title bar or borders — custom UI handles all window controls
Always on TopStays visible above other windows by default
Not ResizableSize changes only through player controls (not manual drag)
Not MaximizableDesigned for compact size, not fullscreen
ClosableCan be closed like any window

Window Controls

The app provides custom buttons for:

  • Shrink: Reduces to compact size (268×513)
  • Expand: Expands to full player (412×660)
  • Toggle Fullscreen: Enters/exits fullscreen mode
  • Quit: Exits the application

Audio Device Selection

Unlike mobile (which can only switch between Bluetooth and wired headsets), the desktop app can select any system audio output device:

  • Built-in speakers
  • Headphones (3.5mm jack)
  • USB DACs
  • Bluetooth headphones/speakers
  • HDMI/DisplayPort audio
  • Virtual audio devices

System Tray

When enabled, the app runs in the system tray:

  • Icon: Shows app icon in tray/menu bar
  • Click: Shows/hides the main window
  • Right-Click: Context menu with "Quit App" option
  • Background Operation: App continues playing music even when window is closed
PlatformMenu Style
macOSNative app menu (About, Services, Hide, Quit)
WindowsBasic file menu
LinuxBasic file menu

Desktop-Specific Features

FeatureDescription
Global Media KeysPlay/pause, next, previous work from any application
File System AccessDirect access to local files for downloads and library management
No HapticsDesktop devices don't have tactile feedback hardware
No Camera NotchDesktop monitors don't have notches or Dynamic Islands

Web Experience

Progressive Web App (PWA)

The web version is a fully-featured Progressive Web App that can be installed on supported browsers.

What You Get

FeatureDescription
InstallableAdd to home screen from browser menu (Chrome, Edge, Safari)
Offline SupportCached library, downloaded music, and service worker for offline browsing
Push NotificationsDownload completion and server alerts (on supported browsers)
App-Like ExperienceNo browser chrome when launched from home screen

Browser-Specific Behaviour

BrowserShare SupportNotes
Chrome✅ Web Share APIFull sharing support on HTTPS
Edge✅ Web Share APIFull sharing support on HTTPS
Safari✅ Web Share APIFull sharing support on HTTPS
Firefox❌ Not supportedWeb Share API not implemented in Firefox

Server Discovery on Web

The web version cannot perform actual mDNS/UDP network discovery (browsers don't have access to these protocols). Instead, it shows mock demo server data to illustrate the feature.


Hardware Integration

Haptics (Mobile Only)

The app provides tactile feedback for 25+ interactions across the interface:

InteractionHaptic StyleWhat It Feels Like
Button tapsLightGentle tap
Modal open/closeMediumNoticeable click
Seekbar dragMediumTactile feedback during scrubbing
Multi-selectSelection (start/change/end)Ticking feel during drag select
Download start/completeHeavyStrong confirmation
Settings togglesLightSubtle confirmation

Disable Haptics: Settings → Advanced → Haptics

Audio Output Devices

PlatformWhat You Can Select
WebBrowser's default output (cannot change from app)
AndroidBluetooth devices, wired headsets
iOSBluetooth devices, wired headsets, AirPlay
DesktopAll system audio devices (speakers, headphones, USB DACs, HDMI, virtual devices)

File Storage

PlatformStorage LocationPermission Required
WebIndexedDB (browser sandbox)None
Android/Documents/llama/ (shared storage)Read/Write External Storage
iOSApp's Documents directory (sandboxed)Implicit (iOS manages)
DesktopUser's Documents folderNone (full OS access)

Permissions & Privacy

Android Permissions

PermissionWhy It's NeededWhen It's Requested
InternetStream music from Jellyfin serverAutomatically granted at install
Read/Write External StorageDownload music for offline listeningRequested when you first try to download
Wake LockKeep screen on during playbackAutomatically granted at install
Foreground ServicePlay music in backgroundAutomatically granted at install

iOS Permissions

PermissionWhy It's NeededWhen It's Requested
Local NetworkDiscover Jellyfin servers on your networkWhen you open the server discovery page
File SharingAccess downloaded music via iTunes/FinderAutomatically enabled

Desktop Permissions

The desktop app runs with full user privileges and does not request any additional permissions. It has the same access as any other application on your system.

Permission Denial

If you deny storage permissions on mobile:

  • Downloads are blocked with a "Missing Permissions" error
  • The app prompts you to enable permissions in system settings
  • Streaming and library browsing continue to work normally

Performance Adaptations

Automatic Mobile optimisation

On first install, the app detects that you're on a mobile device (iOS or Android) and automatically applies performance-optimised settings. This ensures smooth playback and long battery life on mobile hardware.

What Changes:

  • Fewer visual effects (lower frame rates, simpler animations)
  • Truncated text instead of scrolling marquees
  • Power-saving mode for the turntable Visualisation
  • Reduced download concurrency to prevent network congestion

When It Happens: Only once — the very first time you install the app on a mobile device. A flag is stored to prevent it from running again.

Can I Change It?: Yes. Go to Settings → Appearance to manually adjust any of these settings back to higher quality if your device can handle it.

Desktop vs Mobile Defaults

SettingDesktop DefaultMobile DefaultReason
Visualisations FPS6025Battery life on mobile
Spectrum VisualizerHigh presetLow presetCPU/GPU conservation
Text OverflowMarqueeTruncatedLess CPU overhead
Turntable AnimationFull detailPower saverGPU conservation

Technical Specifications

Platform Detection

MethodPlatforms DetectedAccuracy
window.electronApi checkElectron100%
User Agent "Electron" checkElectron100%
Device.getInfo() (Capacitor)iOS, Android, Web100%

Supported Device Models (Camera Notch Compensation)

ManufacturerSeriesSupported Models
SamsungGalaxy SS10 through S25
SamsungGalaxy NoteNote 10, Note 20
SamsungGalaxy AA50, A51, A52, A53, A70, A71
GooglePixel4a through 9 Pro
AppleiPhoneiPhone 8 through iPhone 17 (including SE models)

Capacitor Plugins Used

PluginPurposePlatforms
AppApp state changes, deep linkingiOS, Android
BrowserOpen external URLsAll
DeviceDevice info (model, OS, UUID)iOS, Android, Web
FilesystemRead/write files, permission checksiOS, Android, Web
HapticsTactile feedbackiOS, Android
KeyboardKeyboard resize behaviouriOS, Android
NetworkNetwork status monitoringAll
ShareNative sharingiOS, Android, Web
Status BarHide status bar, overlay modeiOS, Android

Electron Features

FeatureImplementation
Window ManagementIPC between renderer and main process
Audio Device SelectionNative @russaffa/audio-device-manager module
System TrayElectron Tray API
Menu BarPlatform-specific (darwin vs others)
FullscreenElectron setFullScreen()
Auto-UpdateNot configured (manual updates only)

Known Limitations

LimitationPlatforms AffectedImpactWorkaround
No iPad optimisationiOSApp runs in 2x compatibility mode on iPadNone currently
No auto-updates for desktopWindows, macOS, LinuxUsers must manually download new versionsCheck for updates periodically
Web Share API not in FirefoxWeb (Firefox)Cannot share music from FirefoxUse Chrome, Edge, or Safari
No server discovery on webWebShows mock demo data instead of real serversUse mobile or desktop version for real discovery
Haptics not on desktop/webWeb, DesktopNo tactile feedbackNone (hardware limitation)
Battery optimisation not enforcedAndroidApp may be killed in background by AndroidDisable battery optimisation for Llamafin in Android settings
No deep linkingAllClicking app links doesn't open the appNot yet implemented
Permissive security policy (desktop)DesktopLess protection against XSS attacksOnly install from trusted sources


Last Updated: 2026-04-06 Version: 2.0.0

🎉 Documentation Project Complete!

All 30 sections are now fully documented with both AI technical deep-dives and user-facing documentation. This marks the completion of the Llamafin Docusaurus documentation project.

Final Statistics:

  • Sections: 30/30 (100%)
  • Files Created: 60 (30 AI + 30 User)
  • Estimated Lines: ~35,000+ lines of documentation
  • Features Documented: Every feature module, service, component, pipe, directive, interceptor, and platform adaptation in the Llamafin application