Skip to content
A cross-platform music playing app
JavaScript CSS
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Lyra Music Player

Lyra is a cross-platform music player app that can play songs on your computer and on YouTube.

Check out the lightweight version built with Neutrino!


  • Songs
    • Add songs on your computer and play them
    • Remove songs
  • Playback
    • Volume control
    • Shuffle
    • Skip forward / back 10 seconds
    • Skip to previous / next song
    • Media button shortcuts (Play, Pause, Skip)
  • Song metadata
    • Parses title and artist metadata
    • Edit metadata within the player
  • Playlists
    • Create and delete playlists
    • Add and remove songs to playlists
    • Play songs in a playlist
  • YouTube
    • Search for YouTube videos
    • YouTube video playback
    • Autoplay
    • Shows related videos
    • Add video to library
    • Download YouTube video as audio


Library Youtube


To run locally, clone the repo and run the following:

npm install
npm run dev

To build the executable, you have two options:

# Create unpacked release
npm run dist

# Create packaged executable
npm run pack


  • Keyboard shortcuts
    • Space to play/pause
    • Left/right arrow keys to skip 10 seconds


  • Screen display
    • currently, it's hacked together with playlists
    • playlists / all songs should be seperately handled from other screens (e.g. settings, youtube)
    • loading all songs is laggy due to reloading all songs again
      • bring getSongList into component, and only update if props change
    • new screen management:
      • currScreen: 'MAIN' | 'PLAYLIST' | 'SETTINGS' | 'YOUTUBE'
      • currSubScreen: PlaylistID | 'SEARCH' | 'PLAYING'

Minor fixes:

  • Scroll bar
    • Sidebar scroll bar should only scroll playlists?
  • Split up components/playback/index.js (big file)
    • Limit files to 200 lines?
  • Deleting playlist
    • Show confirmation modal?
  • Inconsistent action to open context menu
    • Youtube playing: click options icon
    • Library: right click


  • Uncontrolled to controlled component warning
    • On song item edit, switching focus for the first time
  • Sorting by name should ignore punctuation (like brackets)
  • If the song skips before related songs are loaded, it won't autoplay the next song
  • Linux:
    • If something else takes control of the media buttons and releases them, the media buttons won't work anymore

Song types:

  • Shared data format:

    • id
    • title
    • artist
    • duration
    • date
    • playlists
    • source
    • location
  • Locally sourced song

    • Data format
      • id: hash of filepath
      • source: "LOCAL"
      • location: filepath
  • Youtube video

    • Data format
      • id: video id
      • artist: channel name
      • views
      • thumbnail
      • source: "YT"
      • location: video id
      • local: whether it is downloaded or not ?
  • Downloaded Youtube song

    • Data format
      • id: video id
      • source: "YT-LOCAL"
      • location: filepath
  • new data

    • where the current song is playing from
    • all songs? playlist? youtube?
    • Add new sidebar item: "Now Playing"
    • opens the respective screen for the song

Long term features:

  • History
    • Pressing back should go back to start of current song
    • Pressing back again within ~2 sec of song starting should go back to previously played song
      • Need to store history of played songs
  • Music metadata
    • Edit metadata on song add
  • Drag and drop
    • Add songs to all songs
    • Add songs to playlists
    • Add songs into playlists
  • Youtube
    • Pagination
    • Open in browser
  • Online
    • Make account
    • Show songs saved online
    • Stream songs
    • Download songs
      • When listening to a Youtube song, download it in the background as a cache
      • Future playbacks and actual downloads will fetch from server's cache instead
    • Upload songs
  • Web App
    • Change storage to localStorage?


  • Song row interaction
    • Single click does nothing
    • Double click to play
    • Play button on left
      • Single click to play
    • Right click to open menu
      • Play, Edit
        • Edit is same
  • Download from Youtube
    • Server download, since it requires converting to mp3


  • Media button shortcuts don't work normally in Linux. To get around it, the player uses dbus to directly access shortcuts. dbus requires several other packages to install:
  • On macOS Mojave (and higher), access to media keys requires accessibility permissions. In this case, Lyra will display a dialog requesting permissions.
  • On Linux, running the AppImage for the first time will install the desktop file in ~/.local/share/applications/ for desktop integration. However, if the path to the AppImage has a space in it, the desktop file will have an incorrect value for TryExec, making it unable to run.
You can’t perform that action at this time.