The Road to Version 1.0 - TheAppgineer/roon-extension-manager GitHub Wiki

A version 0.x retrospective

Back in June 2017 I released the first version of the Roon Extension Manager, at that time all that could be installed with it was my Alarm Clock extension. Shortly after, extensions from other developers were added to the repository and over the years it continued to grow to the point it is now. I think the time is right to reflect a bit and share my ideas on how I would like to move forward from here.

The project Wiki specifies the goal of the project as:

The goal of the project is to make it (much) easier for developers to distribute their extensions and for users to put them into use.

I tried to reach this by getting the Extension Manager running on as many platforms as possible, but over the years I learned about new possibilities that could not really be combined with the cross-platform approach it initially had. So it is time to make some choices on technology. To do this let's go first through some of the milestones that were reached:

The project milestones

  • June 2017: Version 0.1.0 released
  • June 2017: First third party extension added to repository
  • August 2017: Windows installer released
  • September 2017: Linux setup script released
  • January 2018: Extension categories introduced to keep overview
  • June 2018: Docker image released
  • July 2018: Roon Extension Manager included in DietPi
  • December 2018: Docker image for ARM released
  • February 2019: Support for Docker based extensions added
  • March 2021: Plans for Roon Extension Manager version 1.0 announced

The time-line shows that the Extension Manager can be considered feature complete since February 2019, after which the maintenance phase took off. This includes the maintenance on all the different platforms, installers and underlaying tools, which brings me to the following:

Too many maintenance tasks

Different installers / operating systems

Especially the Windows installer turned out to be difficult to maintain, mainly caused by my lack of Windows development skills (and not feeling a need to gain those skills). Typical issues being the instability of the Windows service and letting it survive Windows updates. And even without these issues it is still only able to run a subset of the extensions as the Docker based extensions can't be run on Windows.

For macOS the situation is even more troublesome, as I don't own any Apple devices I just cannot support this.

Different npm versions

Although Extension Manager only uses the basic npm features, every major update has introduced compatibility issues. Also the update frequency is pretty high while on the other hand Linux distributions are pretty slow in including those newer versions. The result being that a wide range of versions have to be supported.

The version 1.x approach

As said, the approach for version 1.0 is to make choices on technology in order to streamline development. The choices made are:

  • Support for extension distribution via npm/git will be dropped
  • Extension distribution is performed via Docker images
  • Docker images are of the Linux variant

What does this bring?

Making these choices gives the opportunity for a big clean-up of the source code, all the code that is no longer there doesn't have to be maintained :)

Besides that, streamlining development gives room for new features, a few that pop in mind:

  • Running multiple instances of an extension, e.g. connect two CD-ROM drives and rip two CDs in parallel
  • Managing the resources available to extensions, providing a more robust integration on resource limited and audio critical platforms

What's the impact for users?

Users that run a Linux based system have to perform an upgrade. While Docker was optional for version 0.x it is mandatory for version 1.x. On the other hand git and npm are no longer needed.

If you don't have a Linux based system then the recommended approach, especially if you are not that tech savvy, is to buy a Raspberry Pi and use that to run your extensions.

Windows and macOS users that really have to stick to these platforms have to run the Extension Manager in a Linux Virtual Machine. There is already a description available on how to do this with DietPi. You can already give this a try today.

What's the impact for extension developers?

npm distributed extensions have to be converted to Docker images, at least when they get updated. A description on how to do this and a template Dockerfile will be provided to support the transition.

As a side effect, this transition will also make clear which extensions are no longer maintained.

One "npm legacy" extension, with snapshots of npm based extensions, might be provided to smoothen the transition and to serve users that rely on no longer maintained extensions.