OSMD UPGRADED – Introducing version 0.9.2. packed with chord symbols and spacing

It’s always important to listen to community feedback – recently we’ve been getting features and bug reports from our collaborators on Github. Common requests were centered around chord symbols and spacing for arrangements. At the time, the mentioned chord symbols were often a bit too complex for OSMD’s capabilities at the time – now we’re glad to say that thanks to the recent update we’ve managed to improve that.


Updating chord symbols might sound like a simple task, but with the help of some friend we’ve actually packed quite a bit of bigger and smaller changes that really make a difference.

For an overall view of bug fixes and updates check out the Changelog.

The highlights of the new OSMD version are:

  • Complex (Jazz) chords like G7(b9,#11) are now displayed correctly
  • ChordSymbols now have spacing, eliminating most chord symbol overlap
  • OSMD now supports SVG export, both in the browser and per node script
  • Pickup measures aren’t unnecessarily wide anymore, their width is proportional to their duration
  • Many unnecessary courtesy accidentals not given via XML are removed
  • The Cursor ignores hidden parts when advancing
  • Grace notes can show fingerings and arpeggios now


To successfully pull this off we had to tackle fixing problems in the code. The most challenging issues were regarding parameters like duration and accidentals for the pickup measure length.

Beyond that, every change needed to go through our testing system, including visual regression tests. By performing the mentioned tests, we see any visual change that we introduced over all of our test samples immediately –  after the around 3 minutes or so the visual tests take to process. Also, after every finished work unit, the code is checked for style and quality.

Finally, releasing OSMD involves around 20 steps – from merging, updating the changelog, to publishing on npm, and Github. The last step is a celebration of the new updates and improvements!



Extract of the new OSMD Chord Spacing Function Test



Screenshot for fixed pickup measure width, before/after Mozart – An Chloe

Mozart String Quartet (in G Major K. 387) shows fixes for both pickup measure width and unnecessary accidentals:



Before the fixed measure width and with unmercenary accidentals



After fixing the measure width and removing unnecessary accidentals



Usually, the OSMD developer team (spearheaded by Simon) takes care of the repository updates, this time we had community backup. Special thanks go to Hartman42 on Github – he single-handedly implemented the chord spacing and (jazz) chord naming improvements. All we had to do was review the code and suggest a few small adjustments. This huge amount of work resulted in a fantastic and highly visible enhancement of OSMD’s chord symbol display capabilities.

More improvements are in store, stay in the loop by following our blog. If you’d like to actively support OSMD in other ways, definitely have a look at our GH Sponsors page – awesome perks are included. 

Anything else you’d like to add? Join the OSMD discussion on Discord!