Developers' handbook

Getting started


Finding your way around

Packaging for different Operating Systems


Plugin development

Release notes


Feel free to adjust any content or add child pages. For more information about how to add pages etc., see the Administrative Guidelines.

Google Summer of Code

Google Summer of Code (GSoC) is a global program that offers student developers stipends to write code for various open source software projects. GSoC has worked with several open source, free software, and technology-related groups to identify and fund several projects over a three month period. Since its inception in 2005, the program has brought together over 11,000 students from 103 countries and over 7,000 mentors from over 100 countries worldwide to produce over 50 million lines of code.

Through Google Summer of Code, accepted student applicants are paired with a mentor or mentors from the participating projects, thus gaining exposure to real-world software development scenarios and the opportunity for employment in areas related to their academic pursuits. In turn, the participating projects are able to more easily identify and bring in new developers. Best of all, more source code is created and released for the use and benefit of all.

To learn more about the program, peruse the 2017 Frequently Asked Questions page. You can also subscribe to the Google Summer of Code Discussion Group to keep abreast of the latest announcements.

Steps toward a successful application

A lot of information is already available in the Google Summer of Code student guide. Do read it!

If you like to participate to Google Summer of Code with MuseScore, these are the steps you need to follow to apply:

  • Help us get to know you.
    If you aren't communicating with us before the application is due, your application will not be accepted.

    • Hang out in our IRC channel (#musescore on Ask questions, show us that you are motivated and well-prepared. There will be more applicants than we can effectively mentor, so do ask for feedback on your application to increase the strength of your proposal!
    • Join the developer mailing list and see what topics we discuss and how the developers interact with each other.
  • Find something that interests you.
    It's critical that you find a project that excites you. You'll be spending most of the summer working on it (we expect you to treat the SoC as a full-time job).
    Don't just tell us how interested you are, show us that you're willing and able to contribute to MuseScore. You can do that by fixing a bug or submitting a pull request well before the deadline, in addition to regularly interacting with MuseScore developers and users on the forum and IRC. Our experience shows us that successful GSoC students demonstrate their interest early and often.

  • Prepare your proposal with us.
    By working with us to prepare your proposal, you'll be getting to know us and showing us how you approach problems. The best place for this is the IRC channel.

  • Complete your application.
    Fill out our application template.
    Only the organization admin and the possible mentors will see this data. You can still edit it after submitting until the deadline!

Things you'll be expected to know or quickly learn

MuseScore is mostly written in C++ and use the Qt SDK. In addition to being familiar with C++, successful applicants will be familiar with or able to quickly learn about MuseScore's infrastructure. You can't spend the whole summer learning how to build MuseScore or prepare a changeset and still successfully complete your project.

  • The build system. CMake is used to build MuseScore.
    While you generally don't need to understand too much unless you actually want to change how MuseScore is built, you should be able to understand enough to get a general idea of how to build MuseScore. You must demonstrate that you are able to build the development version of MuseScore from sources before the application deadline. Steps to compile MuseScore are available in the developer handbook.

  • The version control system. We use git and GitHub.
    Git is the distributed version control system (DVCS) we use for managing our source code. You should have some basic understanding of how a DVCS works.

  • The procedure for contributing changes.
    You will be expected to follow the same procedures as other contributors. You will be helping current and future MuseScore developers by using our standard style for changes, commit messages, and so on.

  • The IRC channel.
    We have the #musescore IRC channel in Freenode.
    You should be familiar with IRC and the IRC channel. It's very helpful for new contributors (you) to get immediate feedback on ideas and code.
    Unless your primary mentor has a strong preference for some other method of communication, the IRC channel will likely be your primary means of communicating with your mentor and MuseScore developers.

  • Related skills.
    In addition, you probably should know some things about music and music notation and be able to read simple music. It's not mandatory and we already had successful students who couldn't but MuseScore is a tool for musicians, most of the developers are musicians too. Also music notation has a specific vocabulary that you should know or learn quickly (staff, stem, chord, beam, slur etc...)

Criteria by which applications are judged

These might vary somewhat depending on the mentors and coordinators for a particular Google Summer of Code, but typically the main factors considered would be:

  • Applicant has demonstrated an ability to make substantial modifications to MuseScore.
    The most important thing is that you've contributed some interesting code samples to judge you by.

  • Applicant shows understanding of topic.
    Your application should make it clear that you're reasonably well versed in the subject area and that you researched it before your application and won't need all summer just to read up on it.

  • Applicant shows understanding of and interest in MuseScore development.
    The best evidence for this is previous contributions and interactions.

  • Well thought out, adequately detailed, realistic project plan.
    "I'm good at this, so trust me" isn't enough. You should describe which steps you'll take to implement the feature and how you'll integrate with existing MuseScore code. You should also prepare a full timeline and goals for the midterm and final evaluations.

Application Template

Please read the "Writing a proposal" chapter from the GSoC student guide. The full guide is a must read if you want to apply.

Some more specific information for MuseScore.


Please provide your full name.

Email / IRC / WWW / GitHub

Where can we contact you? If you frequent our IRC channel (#musescore on please let us know what your nick is. If you don't, then you'd better connect and introduce yourself! If you have a web page you'd like us to know about, please include it. If you have a GitHub profile, or some other public places where you publish code, please include it.


A short description

Benefits to MuseScore

Describe how your project will benefit MuseScore. How will it benefit musicians using MuseScore to create scores? Will it be an aid for future MuseScore development?


Provide a user-level summary of the final output or results of your project. How does it integrate in MuseScore and how does it cooperate with the rest of MuseScore's features?

Project Details

A more detailed description.

Project Schedule

How long will the project take? When can you begin work?
Include an estimated timeline of the project with mini-milestones
Please also note any vacation time you expect to take during the project period.


Who are you, what are you studying (and where), and what activities do you enjoy? What is your experience using MuseScore or other music notation software? What (music) code development projects you've realized? What makes you the best person to work on this project? Are you a musician? Which instrument(s)? Google Summer of Code is about code. Did you participate to other open source project? Wrote something on your own?

Google Summer of Code 2017

MuseScore is part of Google Summer of Code 2017 (GSoC)! If you are a student and you have aspirations to help improve the open source MuseScore notation software during the summertime, this is a unique opportunity to work together with the MuseScore developers and get paid for it. Learn how GSoC works and read through the student manual

If you are considering applying, we have a list of ideas you can choose from. We'd love if you apply with your own idea. Don’t hesitate to contact the potential mentors from the ideas list or contact us via IRC (#musescore on, via the developer mailing list. We also have a document listing the Steps Toward a Successful Application, make sure to read it!

Don't let yourself be scared off by the knowledge prerequisites; you don’t need to be an expert in all domains, and there is some time for learning within the GSoC period. However, familiarity with Qt/C++ and interest in music and music notation will be helpful. If you still have doubts, read Am I good Enough?

* Application Template
* GSoC 2017 official website
* GSoC Student Guide
* MuseScore developer handbook
* Ideas for GSoC 2017
* Steps Toward a Successful Application

GSoC 2017 Student guide

What to do if you have been accepted as a student for Google Summer of Code 2017?

Create and write a blog

  • We will set up a blog for you on Come discuss the details with us (@lasconic) on IRC.
  • Start posting immediately. Begin with a description of your project. You can click here to post in your blog.
  • Announce your blog, your Git account, and a description of your project on and on the developer mailing list.
  • You should write a status report every week. The first weekly report is due on Sunday, June 4 2017 at 23:59 UTC and the subsequent reports at the same hour on a weekly interval. Don't be shy and feel free to post on your blog before this date.
  • Be online on IRC #musescore on as often as possible and interact with your mentor publicly.

Suggested sections for the status report are:

  • Key accomplishments last week
  • Key tasks that stalled
  • Tasks in the upcoming week

Weekly status reports are obligatory, if you fail to provide them, it can be a reason for not passing evaluation for Google.

Use IRC, the mailing list, and the forums

  • Subscribe to the mscore-developer mailing list if you have not already done so.
  • Introduce yourself. Include the link to your blog and Git repository there.
  • Describe your project in short.
  • Get an IRC client and connect as often as possible to the #musescore channel on If you need help getting on IRC, ask on the mailing list.

All your technical questions should go through this mailing list or IRC. If you need user feedback, or have questions related to MuseScore usage, use the forum or IRC.

Ask questions in public

We're an open community so unless you have a good reason, all communication should be public. Ask on IRC or on the mailing list unless you have a good reason to ask directly your mentor. If you are going to use IRC, stick around until you get an answer -- your mentor (or anyone else) may be sleeping, working, or away when you first ask but may respond when they return.

Publish a Git repository

  • Publish your changes immediately in your Git repository.
  • You have to use for sharing code. See Git Workflow.
  • State the location of your Git repository on mscore-developer mailing list and your blog.
  • Push every change you've done so that we can track your progress. GSoC has few deadlines, but we want to see (and if possible, merge) your code continuously!
  • Every commit should contain a single change, and the code should be working on every commit. Try to prevent huge breakages.
  • When you feel you've reached a point where part of your code should be merged to main repository, just open a pull request on GitHub or tell your mentor.

Benefit from the Community Bonding Period

  • Familiarize yourself with MuseScore's code base.
  • Contact your mentor and establish a plan for the upcoming weeks.

Be active

  • Be active; don't expect to be kicked and taken by the hand on every step.
  • Write weekly reports on time.
  • Submit your code early.
  • If you fail to communicate, it can lead your project being marked as failed and you won't receive any money from Google.

Don't forget documentation and tests

All new functionality you create should be documented and tested. The documentation and tests should be done as you code—do not wait until the last moment.

After the summer

Hopefully, your involvement with MuseScore will continue after GSoC!



This page is licensed under GNU GPLv2 and largely inspired by PhpMyAdmin's one

Ideas 2017

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come onto the IRC channel #musescore on, or contact us on the developer mailing list. Also check ideas from previous years.
Click "Edit" above, then copy and paste an idea below and change the text with your new idea for GSoC 2017

Crash reporting

MuseScore currently doesn't have any crash reporting facility. It would make the job of developers a lot easier if we could gather crash logs in a web interface. The first target would be Windows but the crash reporting system should be cross platform. MuseScore's development infrastructure would need to be updated accordingly.

We could use the Google Breakpad project as a basis, also check Crashpad since breakpad has problem on OSX (Chromium uses crashpad).
Breakpad is only part of a crash reporting system, and it doesn't offer a reporting mechanism or a client UI (only has manual tools for decoding crash dumps on Linux). For a server, see Mozilla's Socorro (Python) or Atom's mini breakpad server (Nodejs).

Other interesting resources:


When a score is growing, it's sometimes hard to know where you are located in the score, which part you worked on already etc... The idea would be to create a new panel, potentially to replace the navigator, which gives an abstract view of the score, showing squares for each measure on each instrument, with a different color if the measure is empty or not. Potentially, having one row for rehearsal mark, for tempo markings, time signatures, key signatures etc...

  • Difficulty:Medium to Hard
  • Skills: Qt
  • Possible mentor: Nicolas Froment (@lasconic)

Keyboard layout and shortcut management

Many shortcuts in MuseScore do have conflicts due to different international keyboard layouts. Example of such a conflict can be found with the French keyboard. To solve this problem, MuseScore needs a system which can detect the client keyboard layout and auto select the appropriate shortcut list. The developer challenge is to make this work for all international keyboard and if needed create for each of them a custom shortcut list. Additional challenges are the differences between Mac OS X and Windows/Linux. See #47361: [Mac OS X] Insert measure keyboard shortcut doesn't exist More related issue: *

  • Difficulty: Medium
  • Skills: Qt
  • Possible mentor: Nicolas Froment (@lasconic)

Plugin manager

MuseScore functionality can be extended by plugins. Discovering the compatible plugins and installing them however is currently a manual job. The goal is to create an App Store-like Plugin Manager from which it is possible to discover, (un-)install, (auto-)update plugins in an easy manner. The Resource Manager currently used to handle language packs could be extended for this purpose, and indeed already has some bare-bones code for plugins.

Since many (a little of 40%) of the current 2.x plugins are available on GitHub; we should consider using their releases-API for those plugins. At the same time, locally installed plugins must still be listed and integrated as well.
Another matter to address is how to know if a plugin is compatible with the current MuseScore version.

  • Difficulty: Medium
  • Skills: C++/Qt
  • Possible mentor:

Chord symbol style editor

MuseScore supports the entry of chord symbols like Gm7, C7b9, etc. It has a pretty flexible system for entering the chords, where you can type pretty much a human musician might understand and MuseScore will do its best to understand it as well. However, there are only limited controls for actually displaying the chord symbol. MuseScore provides two preset options - Standard and Jazz - and does not allow you to customize, for instance, how large the "G" should be relative to the "m" or the "7" in Gm7, or how much subscripting should be applied to the "b9" in C7b9. There was some preliminary work done on an editor years ago that could be leveraged in producing a more complete facility. There are also some improvement that could be considered in how chord symbols are handled with respect to transposition, linked parts, fretboard diagrams, capo, Nashville notation, MIDI import, MusicXML, etc.

  • Difficulty: Medium to Hard
  • Skills: C++/Qt
  • Possible mentor: Marc Sabatella (@MarcSabatella)

Page layout controls

MuseScore provides a number of global controls over page layout - you can set the page size and margins, staff size, control distance between staves, hide empty staves, etc. There are certain overrides possible like staff spacers to change the distance between two staves. However, sometimes there is still a need to for more control - override global settings for individual pages, or particular systems. You cannot have the overall staff size or default staff distance slightly smaller on one page than another, or designate certain systems to not hide empty staves, etc. This project would involve an investigation of how we might best expose controls like this to the user and then to design and implement the facility.

  • Difficulty: Medium to Hard
  • Skills: C++/Qt
  • Possible mentor: Marc Sabatella (@MarcSabatella)


Largely as a result of work done in a previous GSoC, MuseScore can be used to some extent by blind users via keyboard control and screenreader feedback. See for more information on what is currently possible. Mostly, one can navigate existing scores; most of the editing facilities still require use of a mouse which is not an option for blind users. There is still a lot of work that needs to be done before blind users can take full advantage of MuseScore. These include making the palettes fully keyboard accessible, also making it possible to access all score elements (including text, articulations, and other markings) via keyboard only. These enhancements will also benefit sighted users who prefer the keyboard for efficiency.

  • Difficulty: Medium to Hard
  • Skills: C++/Qt
  • Possible mentor: Marc Sabatella (@MarcSabatella)

Lyrics editor

As described here and partially implemented here, the Lyrics Editor would display all lyrics from the score as plaintext in an editable multiline text field. The contents of the text field would be doubly linked with the score, meaning that a change to lyrics in either the score or the Lyrics Editor would be reflected in the other. Users would be able to search for lyrics online and paste them into the lyrics editor, or copy lyrics from the editor to produce lyric booklets for choirs and church services.
Possible extensions: spell-checking, automatic hyphenation, verse extraction.

  • Difficulty: Easy to Medium
  • Skills: C++/Qt
  • Possible mentor: Peter Jonas (@shoogle)

Transcribe Assistant / Auto-transcribe / Interface with Sonic Visualizer or Vamp plugins for analysis of audio

This idea is bit open-ended, but the general desire is to facilitate musical transcription from audio with musescore. Considering that there is already a lot of prior knowledge on Automatic music transcription, it might make sense to focus on integrating with external tools rather than reinvent the wheel. Sonic Visualizer is a particularly powerful open source desktop application which has all sorts of methods to visualize the waveform. In particular it has a Peak Frequency Spectogram view mode, which is useful for visually identiying notes and creating them on the midi layer. Sonic Visualizer also can interface with "Vamp plugins" to do all sorts of analysis, in particlar there are a few which can help convert the audio into midi. It would be useful to interface Vamp plugins or Sonic Visualizer into musescore, so could see notation along with the analyzed midi and spectogram. And there is a standalone command line tool aubio that can detect note onset and interface with jack. But probably would need manual assistance for converting the messy analyzed midi into something that looks nice in musescore...might need to identifying things like time signatures and tempo changes and isolating instruments & voices. In addition to dealing with an entire file of pre-recorded music, it would be nice to be able to sing or play on a non-midi instrument in the middle of score writing and have an easy way to input that analyzed midi into the score, synced to the time sig and beat.

And rather than complete auto-transcribe, another approach is just an transcribe assistant, similar to the proprietary program Transcribe! but something that can interace or be incorporated maybe as a plugin into MuseScore. Would be useful would be to display the Constant-Q Transform of audio as the background for the piano-roll editor, that way can visually verify if notes in musescore match frequencies in the audio.

Aside: there is also a proprietary program AnthemScore which converts audio into MusicXML via a Convolutional Neural Networks described here which operates on entire file at a time, but since it is not open source it would be probably be hard to integrate into musescore. It also takes several minutes on a Quad-core machine to analyse, and it doesn't seem to handle tempo and time sig changes well (although pitch detection is almost spot on), and puts all note onto a single grandstaff.

Anyway maybe another approach is to simply focus on making musescore midi file input be much more smarter to be able to identify time sig changes, tempo changes, breaths/pauses, rubato, etc.

Sorry this is a bit rambling, but maybe there is a specific project description along any of these lines.

  • Difficulty: Medium to Hard
  • Skills: C++/Qt
  • Possible mentor: Eric Fontaine (@ericfontainejazz)

Google Summer of Code 2016

Update: Google Summer of Code 2016 is over. Read all about the results of GSoC 2016.

MuseScore is part of Google Summer of Code 2016 (GSoC)!

GSoC 2016 Logo.

Applications are now over and Google announced the selected students. MuseScore has 4 students.

Improving default playback

Johannes Wegener (hpfmn) will improve the default playback of MuseScore by updating our SF2 synthesizer (Fluidsynth) and improving our new SFZ synthesizer (Zerberus). Goals are updating fluidsynth to include features and fixes that went into upstream since the fork, adding legato support to fluidsynth (likely via Midi CC68), adding midi CC11 support to midi rendering (for rendering single note/chord (de)crescendo) and overall add a lot more opcodes to zerberus (mainly looping support and ADSR). Johannes will be mentored by Werner Schweer (wschweer).

Johannes' fork of MuseScore on GitHub:
Johannes' blog for GSoC 2016:

Semi-Realtime MIDI note entry

Peter Jonas (shoogle) will implement a new method of entering notes into MuseScore via computer/MIDI keyboard that is more natural to musicians than the existing “step-time” method. The new method will allow the user to play the piece into the computer as though they were giving a live performance, with additional steps taken to ensure the accuracy of the resulting notation. This should make the process of entering notes significantly faster. Peter will be mentored by Nicolas Froment (lasconic).

Peter's fork of MuseScore on GitHub:
Peter's blog for GSoC 2016:


Ruchit Agrawal (shredpub) will add tools to enable annotations within a score in MuseScore. These annotations could be textual or graphical, and would be very helpful in music education settings as well as for practice purposes. His will be mentored by Marc Sabatella.

Ruchit's fork of MuseScore on GitHub:
Ruchit's blog for GSoC 2016:

GSoC 2016: voice to part tool and extended Implode/Explode tool

Felix Brauchle (fbrauchle) will extend the existing tools for implode/explode and add the ability to create parts for voices. He will be mentored by Joachim ‘Jojo’ Schmitz (Jojo-Schmitz).

Felix's fork of MuseScore on GitHub:
Felix's blog for GSoC 2016:

* GSoC 2016 official website
* GSoC Student Guide
* MuseScore developer handbook
* IRC (#musescore on
* developer mailing list

Ideas 2016

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come onto the IRC channel #musescore on, or contact us on the developer mailing list. Also check ideas from previous years.
Copy paste an idea below and change the text with your new idea for GSoC 2016

Crash reporting

MuseScore currently doesn't have any crash reporting facility. It would make the job of developers a lot easier if we could gather crash logs in a web interface. The first target would be Windows but the crash reporting system should be cross platform. MuseScore's development infrastructure would need to be updated accordingly.

We could use the Google Breakpad project as a basis. Breakpad is only part of a crash reporting system, and it doesn't offer a reporting mechanism or a client UI. For a server, see Mozilla's Socorro (Python) or Atom's mini breakpad server (Nodejs).

Other interesting resources
* Qt and breakpad dev notes
* libcrashreporter-qt as used by Tomahawk player.

  • Difficulty: Medium to high
  • Skills: C++/Qt, Web technology and basic server administration skills
  • Possible mentor: Nicolas Froment (@lasconic)

Text utilities

  1. Search and replace - Ability to search and replace piece of text in staff text, lyrics etc...
  2. Lyrics hyphenation - Lyrics are displayed below each note per syllable. It's currently a manual job to hyphenate them. Some online tools exist for english. It would be good to include this capability in MuseScore, also for more language
  3. Spell checker. See
  • Difficulty: Could be more complex that it looks at first sight
  • Skills: C++/Qt
  • Possible mentor: Nicolas Froment (@lasconic)


When a score is growing, it's sometimes hard to know where you are located in the score, which part you worked on already etc... The idea would be to create a new panel, potentially to replace the navigator, which gives an abstract view of the score, showing squares for each measure on each instrument, with a different color if the measure is empty or not. Potentially, having one row for rehearsal mark, for tempo markings, time signatures, key signatures etc...

  • Difficulty:Medium to Hard
  • Skills: Qt
  • Possible mentor: ...

Virtual singer

Several users have requested a virtual singer in MuseScore. This feature would make MuseScore sing the lyrics in a score. It's useful for singers in choirs who like to rehearse with actual synthesized lyrics. There are several specialized (open source) software projects and libraries which do "sing synthesis".

An external tool that could process a MIDI, or MusicXML file created by MuseScore and make an audio file would be good for singers to practise along.

  • Difficulty: Hard
  • Skills: C++/Qt
  • Possible mentor: Nicolas Froment (@lasconic)

Explorer/Finder plugins to display scores information

MuseScore 2.0 now saves a thumbnail of the first page in the MSCZ file. A plugin for the different OS file explorer (Windows, Mac OS X, others) could display this thumbnail, and maybe other metadata. See for discussion.

  • Difficulty: Medium
  • Skills: C++ ?
  • Possible mentor: Nicolas Froment (@lasconic)


Many users use MuseScore to transcribe scores from paper. This project would be about aiding this use case by providing a side-by-side view of the digital score and a scanned score. A very limited implementation of this project (see screencast) has already been coded (see github) but much more work is needed to make it ready for general usage.

  • Difficulty: Hard
  • Skills: Qt
  • Possible mentor: Werner Schweer

Keyboard layout and shortcut management

Many shortcuts in MuseScore do have conflicts due to different international keyboard layouts. Example of such a conflict can be found with the French keyboard. To solve this problem, MuseScore needs a system which can detect the client keyboard layout and auto select the appropriate shortcut list. The developer challenge is to make this work for all international keyboard and if needed create for each of them a custom shortcut list. Additional challenges are the differences between Mac OS X and Windows/Linux. See #47361: [Mac OS X] Insert measure keyboard shortcut doesn't exist More related issue: *

  • Difficulty: Medium
  • Skills: Qt
  • Possible mentor: ...

Chord symbols playback

It's currently possible to add chord symbols on top of a staff in MuseScore. These symbols are ignored on playback. It's a frequent feature request to be able to realize these chord symbols as notes in a staff or to optionally "play" the symbols while listening the score. A simple implementation would just play the chord for the whole duration of the measure or until the next chord symbols.

  • Difficulty: Easy - Medium
  • Skills: Qt
  • Possible mentor: Marc Sabatella

Extract separate parts from voices on one staff

In an orchestral arrangement, it's common to save to save space in the score by combining multiple parts onto one staff. When it comes time to extract the parts, we would like to be able to extract separate parts for first and second horn as a courtesy to the players, as the separate lines get a little tangled on a single staff. See

Finale uses a complex system in the part extraction process to support this. We could take that route, or might achieve it just as well by improving layout when voices are made invisible (

  • Difficulty:
  • Skills:
  • Possible mentor:


Thanks in large part to work done as part of GSoC 2014, we have made significant progress in making the MuseScore interface usable by blind musicians as well as those with limited mobility. There is still much work to be done, however. Currently, a user can browse a score and hear the screenreader recite the names of the various score elements (notes, rest, barlines, etc), but actually editing the score still requires one to be able to see the score and use a mouse in order to click elements and operate the palettes. Having a freely available notation program that is fully keyboard accessible could be life changing for blind musicians. There is also the possibility of creating Braille music output, probably through integration with existing tools that can convert from MusicXML to Braille music.

  • Difficulty: Medium
  • Skills: C++/Qt
  • Possible mentor: Marc Sabatella

Searchable palette

This is kind of linked to Accessibility. The MuseScore palette has grown in the past versions. It would be very useful to be able to filter elements in the palettes or to search and hightlight them. If the search/filter capability is well designed, it could make it easier to add some elements to the score with the keyboard.
A possible design:
* Add a filter text field in the palette
* Add a shortcut to focus on this text field when a note is selected
* Enter "Fermata", the palette is filtered and only a couple of fermatas are displayed
* Use tab (or another shortcut) to go through the fermata
* Use Return (or another shortcut to enter the fermata)
* Use Esc (or another shortcut) to unfilter the palette and give the focus back to the score.

  • Difficulty: Medium
  • Skills: C++/Qt
  • Possible mentor: Marc Sabatella / Nicolas Froment (@lasconic)


Educators and others often like the add markings to a score such as comments or grades. They may also wish to highlight or circle specific passages of music. We could add one or more new element types to MuseScore to create text or shapes that can be attached to individual notes or to score ranges, and a user interface to create these elements. We would also want a way to easily show or hide annotations, possibly by integrating with an existing experimental Layers facility.

See for further discussion.

  • Difficulty: Medium
  • Skills: C++/Qt
  • Possible mentor: Marc Sabatella

Half/double durations

MuseScore currently doesn't provide any way to change the duration of many notes at once. It would be great to have a way to double or half all the durations in a selection. Depending on the student's skills, we could also implement the ability to change all half notes to quarter notes in a selection and provide more options. This might seem like a simple task but in MuseScore, measures have to be full, and MuseScore supports nested tuplets...

See for further discussion.

  • Difficulty: Medium
  • Skills: C++/Qt
  • Possible mentor: Nicolas Froment (@lasconic)

GSoC 2016 Student guide

What to do if you have been accepted as a student for Google Summer of Code 2016?

Create and write a blog

  • Set up a blog where you will communicate your results. It is okay to use an existing one.
  • Start posting immediately, begin with a description of your project.
  • Announce your blog, your git account, and a description of your project on and on the developer mailing list.
  • You should write a status report every week. The first weekly report is due on Sunday, 29 May 2016 at 23:59 UTC and the subsequent reports at the same hour on a weekly interval.

Suggested sections for the status report are:

  • Key accomplishments last week
  • Key tasks that stalled
  • Tasks in the upcoming week

Weekly status reports are obligatory, if you fail to provide them, it can be a reason for not passing evaluation for Google.

Use IRC, the mailing list, and the forums

  • Subscribe to mscore-developer mailing list if you have not already done so.
  • Introduce yourself. Include the link to your blog and Git repository there
  • Describe your project in short
  • Get an IRC client and connect as often as possible to the #musescore channel on If you need help getting on IRC, ask on the mailing list.

All your technical questions should go through this mailing list or IRC. If you need user feedback, or have questions related to MuseScore usage, use the forum or IRC.

Ask questions in public

We're an open community so unless you have a good reason, all communication should be public. Ask on IRC or on the mailing list unless you have a good reason to ask directly your mentor. If you are going to use IRC, stick around until you get an answer -- your mentor (or anyone else) may be sleeping, working, or away when you first ask but may respond when they return.

Publish a Git repository

  • Publish your changes immediately in your Git repository.
  • You have to use for sharing code. See [[Git Workflow]]
  • Write about location of your Git repository on mscore-developer mailing list and your blog.
  • Push every change you've done so that we can track your progress. GSoC has few deadlines, but we want to see and if possible, merge your code continuously!
  • Every commit should contain single change and the code should be working on every commit. Try to prevent huge breakages.
  • When you feel you've reached point where part of your code should be merged to main repository, just open pull request on Github or tell your mentor.

Benefit from the Community Bonding Period

  • Familiarize yourself with MuseScore's code base
  • Contact your mentor and establish a plan for the upcoming weeks

Be active

  • Be active, don't expect to be kicked and taken by the hand on every step.
  • Write weekly reports on time.
  • Submit your code early.
  • If you fail to communicate, it can lead your project being marked as failed and you won't receive any money from Google.

Don't forget documentation and tests

All new functionality you create should be documented and tested. The documentation and tests should be done as you code, do not keep it on last moment.

After the Summer

Hopefully, your involvement with MuseScore will continue after GSoC!



This page is licensed under GNU GPLv2 and largely inspired by PhpMyAdmin's one

Ideas 2015

Update March 2nd: Unfortunately MuseScore was not accepted for the 2015 edition of GSoC. We'll try again next year!

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come onto the IRC channel #musescore on, or contact us on the developer mailing list.

Also check ideas from previous years

Copy paste an idea below and change the text with your new idea for GSoC 2015

Virtual singer

Several users have requested a virtual singer in MuseScore. This feature would make MuseScore sing the lyrics in a score. It's useful for singers in choirs who like to rehearse with actual synthesized lyrics.

There are several specialized (open source) software projects and libraries which do "sing synthesis".

An external tool that could process a MIDI, or MusicXML file created by MuseScore and make an audio file would be good for singers to practise along.

  • Difficulty: Hard
  • Skills: C++/Qt
  • Possible mentor: Nicolas Froment (@lasconic)

Explorer/Finder plugins to display scores information

MuseScore 2.0 now saves a thumbnail of the first page in the MSCZ file. A plugin for the different OS file explorer (Windows, Mac OS X, others) could use this thumbnail and maybe other metadata to make the display of scores better looking.

  • Difficulty: Medium
  • Skills: C++ ?
  • Possible mentor: Nicolas Froment (@lasconic)

Context-sensitive help

Learning how to use MuseScore can be pretty challenging. A way to lower the barrier is by adding a context-sensitive help system which works in two ways. One way is to directly obtain explanatory information about any widget you come across in the UI. The other way is to perform a keyword search which directly jumps you straight where you need to be in the UI. Mac OS offers a Spotlight For Help search field,, but not only does this need to work for all platforms and it also needs to work for the menu, toolbars, popup and docked windows and the palette.

  • Difficulty: Medium
  • Skills: Qt
  • Possible mentor: Werner Schweer


Many users use MuseScore to transcribe scores from paper. This project would be about aiding this use case by providing a side-by-side view of the digital score and a scanned score. A very limited implementation of this project (see screencast) has already been coded (see github) but much more work is needed to make it ready for general usage.

  • Difficulty: Hard
  • Skills: Qt
  • Possible mentor: Werner Schweer


When a score is growing, it's sometimes hard to know where you are located in the score, which part you worked on already etc... The idea would be to create a new panel, potentially to replace the navigator, which gives an abstract view of the score, showing squares for each measure on each instrument, with a different color if the measure is empty or not. Potentially, having one row for rehearsal mark, for tempo markings, time signatures, key signatures etc...

Screenshot 2015-02-23 09.00.04.png

  • Difficulty:Medium to Hard
  • Skills: Qt
  • Possible mentor: ...

Keyboard layout and shortcut management

Many shortcuts in MuseScore do have conflicts due to different international keyboard layouts. Example of such a conflict can be found with the French keyboard. To solve this problem, MuseScore needs a system which can detect the client keyboard layout and auto select the appropriate shortcut list. The developer challenge is to make this work for all international keyboard and if needed create for each of them a custom shortcut list. Additional challenges are the differences between Mac OS X and Windows/Linux. See #47361: [Mac OS X] Insert measure keyboard shortcut doesn't exist
More related issue:

  • Difficulty: Medium
  • Skills: Qt
  • Possible mentor: ...

Chord symbols playback

It's currently possible to add chord symbols on top of a staff in MuseScore. These symbols are ignored on playback. It's a frequent feature request to be able to realize these chord symbols as notes in a staff or to optionally "play" the symbols while listening the score. A simple implementation would just play the chord for the whole duration of the measure or until the next chord symbols.

  • Difficulty: Easy - Medium
  • Skills: Qt
  • Possible mentor: Marc Sabatella

Google Summer of Code 2014

MuseScore has been selected for Google Summer of Code 2014 and has been allocated five students to work on

Read all about the results of GSoC 2014.

Ideas 2014

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come on IRC channel #musescore on, or contact us on the developer mailing list.

Also check ideas from previous years:

Accessibility for Visually Impaired Musicians

Blind musicians wishing to create scores in standard notation currently have very few options, since most notation software is not designed with accessibility in mind. It can also be difficult for blind or visually impaired musicians to obtain scores in Braille or other "accessible" formats (large print editions, electronic formats that read scores aloud, etc). MuseScore could be a revolutionary tool in the community of blind musicians if it were enhanced to address these concerns.

Some of the areas that need work:

  • Making all menus, dialogs, and windows keyboard and screen-reader friendly
  • Adding full keyboard control for score navigation, including the ability to traverse all score elements rather than just notes and rests
  • Enhance status line display or add new window, with screenreader support, to provide meaningful feedback during navigation
  • Making all score editing operations performable via keyboard
  • Improving automatic layout facilities to reduce need for a sighted user to identify places where manual adjustments are needed
  • Extending MusicXML export as necessary to better support automated MusicXML-Braille converters
  • Plugins or other automation for export to Braille or other accessible formats (via MusicXML using existing tools)

Some of these are relatively easy, others much more difficult. The whole job is very big, but implementing even portions of this could change the lives of many blind musicians.

For more on this topic, see the Accessible Music Notation Project site, and the MuseScore Accessibility document in particular.

Difficulty: Easy to Hard
Skills: C++/Qt
Possible mentor: Marc Sabatella

Better support of Guitar Pro import

Guitar Pro is a very popular software to create tablature. There are a lot of Guitar Pro files on the web. MuseScore 2.0 will be able to create tablature and has minimal support for Guitar Pro 3, 4 and 5 files. There is no support for Guitar Pro 6 format.
Importing these file formats will make available hundreds of thousands arrangements to MuseScore users. They would be able to play and edit them. No other free and open source tool support the 4 formats.

Some of the areas that need work:

Difficulty: Easy to Medium
Skills: C++/Qt
Possible mentor: Nicolas Froment (@lasconic) / Maurizio A. Gavioli (@Miwarre)

Virtual singer

Several users requested a virtual singer in MuseScore. This feature would make MuseScore sing the lyrics in a score. It's useful for singers in choir who likes to rehearse with actual synthesized lyrics.

There are several specialized (open source) software projects and libraries which do "sing synthesis".

An external tool that could process a MIDI or MusicXML file created by MuseScore and make an audio file would be good for singers to practise along.

Difficulty: Hard
Skills: C++/Qt
Possible mentor: Nicolas Froment (@lasconic)

Proofing tools for lyrics: spellcheck and hyphenation

Hyphenation is really simple in Spanish (and might be a good starting point), but it is really hyphenation checking in English that is the most valuable (since very few English speakers know how to hyphenate in English).

Hyphenation for lyrics (in English) isn't straight forward. There are plenty of hyphenation algorithms used in desktop publishing and LaTeX but they don't work for lyrics since they disallow one-letter syllables (which is the right choice for end-of-line hyphens but not correct for lyric hyphens, which divide every syllable regardless of letter length). A solution could be to to look up the hyphenation of every word in an English dictionary.

Spell checking lyrics also takes some work beyond simply hooking up a spellchecker. For example "ed-i-tor-in-chief" should pass spellcheck as "editor-in-chief". You have to preserve some hyphens and drop others before the spellchecker recognizes the word.

Ideally these proofing tools would mark up the score directly (with zig-zag underlines, etc.)

Difficulty: Medium
Skills: C++/Qt
Possible mentor: David Bolton

More flexible selection facility

MuseScore currently allows you to select regions and then copy, cut, paste, or delete the contents of that selection. However, the user has no control over which elements within the region are affected. So you cannot choose to copy only the notes but not the lyrics, or only the dynamics, hairpins, and breath markings but not the notes, etc. Other programs provide dialog boxes that allow you to control which element types are affected by operations on that selection. MuseScore could be extended to do this as well.

Difficulty: Easy
Skills: C++/Qt
Possible mentor: Marc Sabatella

Alternate notation styles for specified ranges

MuseScore currently provides a plugin to convert an existing passage into slash notation, but this approach is limited in a number of ways. MuseScore also allows you to specific the transposition for a staff, or to make a staff invisible, or specify the number of staff lines, but these properties are global for the staff throughout the score.

What is desired is to be able to select a region and then specify an alternate notation style for that region - slash notation, a different transposition, different number of staff lines, etc. This involves both defining a UI and mechanism for specifying what you want, as well as actually implementing native support for slash notation and perhaps other notation styles.

Difficulty: Easy to Medium
Skills: C++/Qt
Possible mentor: Marc Sabatella

GSoC 2014 Student Guide

What to do if you have been accepted as a student for Google Summer of Code 2014?

Create and write a blog

  • Set up a blog where you will communicate your results. It is okay to use an existing one.
  • Start posting immediately, begin with a description of your project.
  • Announce your blog, your git account, and a description of your project on and on the developer mailing list.
  • You should write a status report every week. The first weekly report is due on Sunday, 18 May 2014 at 23:59 UTC and the subsequent reports at the same hour on a weekly interval.

Suggested sections for the status report are:

  • Key accomplishments last week
  • Key tasks that stalled
  • Tasks in the upcoming week

Weekly status reports are obligatory, if you fail to provide them, it can be a reason for not passing evaluation for Google.

Use IRC, the mailing list, and the forums

  • Subscribe to mscore-developer mailing list if you have not already done so.
  • Introduce yourself. Include the link to your blog and Git repository there
  • Describe your project in short
  • Get an IRC client and connect as often as possible to the #musescore channel on If you need help getting on IRC, ask on the mailing list.

All your technical questions should go through this mailing list or IRC. If you need user feedback, or have questions related to MuseScore usage, use the forum or IRC.

Ask questions in public

We're an open community so unless you have a good reason, all communication should be public.
Ask on IRC or on the mailing list unless you have a good reason to ask directly your mentor.
If you are going to use IRC, stick around until you get an answer -- your mentor (or anyone else) may be sleeping, working, or away when you first ask but may respond when they return.

Publish a Git repository

  • Publish your changes immediately in your Git repository.
  • You have to use for sharing code. See Git Workflow
  • Write about location of your Git repository on mscore-developer mailing list and your blog.
  • Push every change you've done so that we can track your progress. GSoC has few deadlines, but we want to see and if possible, merge your code continuously!
  • Every commit should contain single change and the code should be working on every commit. Try to prevent huge breakages.
  • When you feel you've reached point where part of your code should be merged to main repository, just open pull request on Github or tell your mentor.

Benefit from the Community Bonding Period

  • Familiarize yourself with MuseScore's code base
  • Contact your mentor and establish a plan for the upcoming weeks

Be active

  • Be active, don't expect to be kicked and taken by the hand on every step.
  • Write weekly reports on time.
  • Submit your code early.
  • If you fail to communicate, it can lead your project being marked as failed and you won't receive any money from Google.

Don't forget documentation and tests

All new functionality you create should be documented and tested.
The documentation and tests should be done as you code, do not keep it on last moment.

After the Summer

Hopefully, your involvement with MuseScore will continue after GSoC!



This page is licensed under GNU GPLv2 and largely inspired by PhpMyAdmin's one

Accessibility with focus on visually impaired musicians

When we talk about music score editors, one of the most notable aspects is the fact that very few of them are designed with accessibility in mind, or scarcely do they provide support for it. If they indeed meet this need, most of them are quite expensive. This leaves blind or visually impaired musicians who wish to create scores in standard notation with very few options.
This project aims to add the necessary support for assistive technologies that visually impaired musicians use in order to create a mental picture of the interface. Also, I will make all the menus, buttons and paletts accessible by keyboard, from which will benefit not only blind musicians, but also the average or "power" users who want to use MuseScore efficiently.

Andrei Tuicu
Full Proposal:
My Blog:

Enhancing and testing the import of Guitar Pro files

John Pirie

Implementation of full JACK support

JACK Audio Connection Kit is a professional sound server daemon that provides real-time, low latency connections for both audio and MIDI data between applications that implement its API.

This is a great feature that gives an ability to connect with lots of synthesizers and Digital Audio Workstations. It is possible now to route MIDI and Audio signals, to do a real-time sound effects processing and a lot of other cool things.

Here is a list of features I've implemented while participating the GSoC 2014:

  1. JACK MIDI Out support (PR)
    This feature gives an ability to send MIDI events to one or several external synthesizers or VST plugins.
    • More realistic sound of score.
    • Adding realtime midi effects to the sound.
  2. JACK Transport (reposition) (PR)
    We provide current position in frames (samples) to JACK Transport, keep an eye on it and seek if position changed.
    • Seeking to some position in MuseScore causes seeking in all applications (audio/video players, DAWs, etc).
    • Seeking in any application connected to JACK causes MuseScore to seek.
  3. JACK Timebase Master (commit)
    Being the Timebase Master application could provide bar (measure), beat and tempo information to JACK.
    • Sync other applications working with midi to MuseScore, managing tempo.
    • More control over JACK Transport (not just seek, but slow down/accelerate).
  4. JACK Timebase Slave (commit)
    As a Timebase Slave we can read information about bar, beat and tempo and sync to any application connected to JACK as a Timebase Master.
    • More control over syncing to another application.
    • Adjusting tempo in real time to application / external automation tracks.
  5. Changing JACK preferences without restart (commit)
    This feature gives an ability to enable/disable JACK parameters like "Use JACK MIDI Out", "use JACK Audio" or "Become a Timebase Master" without restarting an application.
    • No need to restart MuseScore if you want change preferences related to JACK.
  6. Restoring JACK connections (commit)
    Now we can save audio and midi connections to other applications on exit or changing preferences and restore it when you run MuseScore again.
    • You don't need to connect all things again manually.
  7. Automatic control over JACK/ALSA MIDI Out ports (PR)
    This feature allows MuseScore to determine how many JACK MIDI and ALSA MIDI ports it should have and automatically add/remove ports when needed.
    • No need to manually control port number.
    • One more step to implementing ALSA MIDI.
  8. Assigning channels to instruments (not merged) (PR)
    With this feature users can assign any midi port and channel to instruments.
    • Channel information wouldn't be lost if you add new instrument, reorder staves or change midi program.
    • Better control over midi subsystem (you can even assign different ports for each instrument).
    • Ability to "compress" number of channels by assigning the same channel for a several, for example, piano staves.
    • Enhanced abilities to import and export scores (implemented import channels from *.ove, *.gtp*, import/export to *.mcsx, *.mscz, *.midi, *.mxl).
  9. Improved Instument Change element (not merged) (PR)
    Several Instrument Change elements with one midi program are "joined" together and shown as a single item in mixer.
    • No excess items in mixer (particularly important for big and complex scores).

Also, there were a lot of bug fixes, related and not related to JACK, improvements of UI, code optimisations and other things.

Maxim Grishin (igevorse)

My blog:
Github page:

Swing Playback

MuseScore 1.3 has minimal support for Swing Playback. However, MuseScore 2.0 has no such feature. The user can only hear his score in straight. Improvements we would like to implement are:
Ability to set the swing ratio, adding swing texts specifying the swing for different parts of the score, and saving the score in swing.
This way, we would like to enable full fledged Swing Playback support for MuseScore 2.0 as part of this project. This will be a great delight for all those jazz musicians using MuseScore looking for an option to listen to their score in swing.

My blog:
Github page:

Ruchit Agrawal (shredpub)

Google Summer of Code 2013

MuseScore was selected for Google Summer of Code 2013 and was allocated two students to work on:

Read all about the results of GSoC 2013.

Ideas 2013

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come on IRC channel #musescore, or contact us on the developer mailing list. To officially apply your summer project idea, follow this link.

Also check ideas from previous years:

MuseScore NaCl

Port a part of MuseScore to Native Client (NaCl). There are already some experiment with Qt and NaCl. It would mean the ability to display, play, transpose sheet music in the browser without any plugin.

Difficulty: Hard
Skills: C++/Qt/QML/NaCl/Chromium
Possible mentor: lasconic
Student: Apply here

MuseScore EmScripten

Port a part of MuseScore to Javascript using a language translation tool such as Emscripten. The goal could be to display and transpose a MSCZ file in the browser. Emscripten-Qt is a good start.

Difficulty: Hard
Skills: C++/Qt/Emscripten/LLVM/Javascript
Possible mentor: lasconic
Student: Apply here

MuseScore resources repository

MuseScore is highly customizable. Users can change soundfonts, add plugins, define workspaces, templates, palettes, languages etc... What if there would be an easy way to share all these resources in the cloud and a one click way to install/uninstall them in MuseScore.
Some resources to check OCS, Attica client library, KDE Bodega...

Difficulty: Medium
Skills: PHP/C++/Qt
Possible mentor: lasconic
Student: Apply here

Jianpu notation support in MuseScore

Jianpu notation/Numbered musical notation is widely used in China. A large amount of Chinese music is recorded in Jianpu and most Chinese people are more familiar with Jianpu than standard staff scores. But there are relatively limited software for editing Jianpu and they have obvious disadvantages. In sum, there's a need for high quality Jianpu notation software. For more information: Here.

Difficulty: Hard
Skills: C++/Qt
Student: Eli Yang
Possible mentor: lasconic, Rui Fan (aka Vanferry)

Improve MIDI import

MuseScore currently imports MIDI files quite badly. There are many areas in which MIDI import could be improved and most of them require smart algorithms. This project would target several key problems.

  • Tuplet import: Currently, MuseScore considers only binary note values.
  • Dot vs Tie: Currently, MuseScore always uses ties and never dots.
  • Drums import
  • Tempo changes
  • Swing import: if a MIDI file is played with swing, MuseScore should be able to recognize it and notate it as straight notes, but still play swing.
  • Voice separation: MuseScore puts everything under voice 1 currently.
  • Treble/Bass clefs discrimination for piano: MuseScore currently uses a fixed point to separate the treble and bass clef. A smarter algorithm could be found.

Difficulty: Medium
Skills: C++/Qt, AI
Possible mentor: werner

Fichier attachéTaille
shot_130418_125502.png19.34 Ko

MIDI import improvement project

=== The project goal is to improve MIDI import functionality ===

Current work

More "smooth" clef changes (for single notes, ...)


  • Availability of the original MIDI durations.
  • Quantization of slightly unaligned MIDI files.
  • - Use Simon Dixon's algorithm (C++) for automatic beat recognition.
    - Ask user to adjust, if necessary, the start and the end points of the first bar on piano roll or specify the time scale difference between MIDI events and the ideal grid.

Implemented features

Lyrics import from karaoke (.kar) files

Selectable lyric import option
Combo boxes in Lyrics column of MIDI import panel gives an opportunity to select the track to assign lyric to.
Example of karaoke file with one lyric track:

Another, manually created example shows multiple lyrics support (2 lyric tracks):

Drums import

Here is a MIDI import of drums:

Also there is an option of a drum staff splitting (thanks to chenlung for his idea):

Split without staff bracket:

Swing notation (without playback)

Here are some examples of swing detection results.

Triplet swing (2:1)

Shuffle (3:1)

Larger piece

Automatic clef selection within a staff depending on average chord pitch

Clef changes option is checked in the MIDI import panel by default.

Tuplet recognition for MIDI import

Below are some examples of automatic MIDI import.
Manual adjustments/highlights are made in a couple of cases to show that program correctly handles multiple voices.

MIDI file:
Triplets - piano roll

Result of the import:
Triplets - result of the import


Triplet when time sig = 3/4

Triplet when time sig = 5/4 (reply to Tuplet rhythms in MIDI import)

Duplet (time sig = 6/8)

Qaudruplet (time sig = 6/8)

Triplet and other shorter notes

Mixed triplets, including triplet with rest


Nonuplet (time sig = 3/4), requires 1/64 quantization

Nonuplet (time sig = 4/4), requires 1/64 quantization

2 voices - triplet and regular notes

2 quintuplets (rest is inside one of them) and manually space-adjusted case

2 voices - triplet and quintuplet.
Need to manually set quantization value to 1/32

3 voices - triplet, quintuplet and septuplet simultaneously
and manually space-adjusted case + highlighted case

Larger piece example (reply to Can't open a MIDI file with triplets)

"The Oxman Returneth" by Marc Sabatella - various triplets + pickup measure

-- Recognition of first and last tuplet tied notes --

First tied note:

Last tied note:

Tied tuplets:

Track reordering in MIDI import panel

For example, left piano track goes above right track that is incorrect, so we can move right track to the top.

Pickup measure support

Duration subdivision based on metrical analysis

Notes, rests + dots and ties are created according to strong/weak bar divisions.

=> Here are some examples of automatic MIDI import:

Half note at the center of 4/4 bar

Half rest at the center of 4/4 bar

Rests and chords near beats

Half rest at the start or at the end of 3/4 bar - divided into quarter rests

Example of larger piece of music

Last quarter rest in compound meters like 6/8 - splitted into 2 8th

12/8 compound bar

Rests of mixed duration

Left/right hand separation of piano track

In addition to fixed-pitch split there is an option to take into account the average hand width of the pianist.


UI panel to specify MIDI import operations

Apply operations on MIDI tracks and get the immediate result (see screenshots above).

MIDI import - for developers

Almost all MIDI import files begin with the “importmidi” prefix and are located in mscore/ directory.

Internally, MIDI import in MuseScore consists of two main stages:

  • track information extraction from the MIDI file to fill the track list in the MIDI import panel
  • import of “music” MIDI events with the default values of applied operations

All of the import is controlled by values of the MIDI import operations (default or user-defined). Those operations are stored in the MidiImportOperations class and may be different for each track. This class also contains MidiData class which is responsible for the storage of contents of the MIDI file (necessary because the user can switch between multiple open MIDI files). The object of MidiImportOperations class is stored in MuseScore Preferences class, which can be found in mscore/preferences.h.

The opening of a MIDI file is followed by a range of internal program actions, the main ones are:

  • musescore.cpp calls the MIDI import panel’s function setMidiFile that is located in importmidi_panel.cpp
  • the MIDI import panel invokes the meta track info extraction function (extractMidiTracksMeta) in importmidi.cpp
  • the importMidi function in importmidi.cpp is called, which performs all necessary calculations and adds the music information from the MIDI file to the new score

If the user changes the operations and clicks the Apply button, the doMidiImport function (from importmidi_panel.cpp) obtains the values of operations from the GUI model and saves it in the preferences.midiImportOperations object. After, the usual importMidi function is called. Immediately after the import function performs its job, the preferences.midiImportOperations object is cleared.

The MIDI “music” import stage reads the MIDI file information previously stored in preferences.midiImportOperations.midiData object and calls convertMidi function from the importmidi.cpp file. After, all operations and algorithmic manipulations are applied to the MIDI file content:

  • list of track objects is created; tracks without note events are omitted
  • each note is stored in object of MidiChord class
  • all notes with very close “on time” events are combined into chords, also in class
  • notes too short are cleaned up
  • overlapping notes of equal pitch are corrected to rid of their intersection (removeOverlappingNotes function, importmidi.cpp)
  • a tuplet search is performed (importmidi_tuplet.cpp); multiple voices are also taken into account
  • after that - quantization of all chords (importmidi_quant.cpp); tuplets and non-tuplet notes are quantized by different grids
  • removeOverlappingNotes is called once again
  • if the user decides - the track is subdivided into left/right hand parts (a purpose mainly for piano tracks) - importmidi_lrhand.cpp
  • chords with notes of different length are separated into different chords with equal notes (splitUnequalChords function in importmidi.cpp)
  • import of drums (importmidi_drum.cpp)
  • instruments are created
  • measures (bars) are created, so now it’s possible to find a bar by tick
  • chord durations are converted into music notation; metrical analysis is performed here to find preferable duration subdivision in bar according to strong/weak bar fractions (see importmidi_meter.cpp)
    after that track meta is set
  • tuplets are added to the score, according to recognized tuplet events that are stored in MTrack::tuplets multimap
  • key signatures are created
  • if the user chooses - the program tries to detect swing: to replace triplet [4th + 8th] by 2 straight 8ths (for usual swing, 2:1) or dotted 8th + 16th by 2 straight 8ths as well (for shuffle, 3:1); the search of patterns and note replacement is performed on score chord/rest segments; code for swing detection is in importmidi_swing.cpp
  • clefs are created, they are of two types: at the beginning of staff (mandatory clefs) and, if the user wishes, clefs may change (added) within a staff depending on average chord pitch to make the score more “smooth”. Tied notes are not supposed to be separated by the clef insertion - algorithm tries to check it (code is in importmidi_clef.cpp)
  • time signatures are created
  • lyrics are imported, if any - importmidi_lyrics.cpp (lyric can be a title, composer or text next to notes - like song words)

The score is then rendered by the MuseScore graphics engine.


Currently to add a new operation one should add some pieces of code to several places (maybe it will be possible to bring all this pieces into one place in the future):

  • register the new type of operation in impotmidi_operation.h - MidiOperation::Type
    add operation variable into the TrackOperations struct in importmidi_operations.h and set the default value in C++11 manner
  • insert a new node in importmidi_opmodel.cpp that will be shown in the MIDI import panel; connect to the controller if necessary; controller hides/shows the nodes according to some defined rules (for example, “Allow clef change…” is a hidden node for drum tracks)
  • add operation to the setNodeOperations function in importmidi_opmodel.cpp
  • add operation to the setTrackOperation function in importmidi_trmodel.cpp
  • add operation to the trackOperations function in the same file

The operation then becomes available for the MIDI import algorithms.


MIDI import tests are located in mtest/importmidi/tst_importmidi.cpp

To test functions that have only definition in cpp file, the auxiliary file mtest/importmidi/inner_func_decl.h header is used where the headers of such tested functions should be put.

MuseScore and Emscripten

libmscore ported to the browser using Emscripten

Google-Melange public project page: project page
Original Proposal: proposal
Git Repos:

  • libmscore port: Repo
  • EmbindGenerator script: Repo
  • Sha of last MuseScore commit, before branching: f9f8462d96

Documentation (how to set up libmscore with emscripten): here
Progress Log (archive): log

Google Summer of Code wrap-up/summary

You can find documentation on how to set-up your environment to begin using libmscore in Javascript here.

All of the work of getting emscripten to compile the libmscore code itself is completed and documented, even if all of that code isn't fully usable yet. This means that others should be able to reproduce the process of compiling libmscore to Javascript. If anyone attempts this process, I welcome all feedback so that I might improve it.

It is important to note that porting future versions of libmscore to emscripten (that is, versions of libmscore which now use qt5), will require additional work of first porting qt5 to Javascript. As of the time of writing, I'm not aware of any initiatives looking to complete this task. Qt5 was only fully "released" just over a year ago, and MuseScore itself did not make the complete switch over until just the past summer, so I think with time this task will be realized. From there, the process of porting over libmscore would follow a process very similar to the one I outlined for versions of libmscore using Qt4.8.

While I did not complete all of the goals outlined in my original proposal, libmscore is at a point where it is possible to load a simple score into the browser and verify some of the metadata. From here, it's a matter of debugging the remaining issues and exposing more libmscore functionality to Javascript. My hope is that outside of GSoC I can continue working on this project so that I can accomplish the goals outlined in the original proposal. I feel I am very close to those goals. I hope that someone more experienced with Qt5 will take up the task of porting Qt5 to emscripten, or perhaps maybe I could take up the task myself down the road. With Qt5 ported to emscripten, I still see many benefits of getting newer versions of libmscore to work in the browser. I would like to see that become a reality.

Progress Log

This was removed from the main page. It basically contains a log of the progress I made on the project over the summer.

Progress Log

Current Work (last updated 23 September 2013)

  • Continue debugging errors related to fonts.

Next Steps

  • Verify that the score has loaded correctly
  • Get a score to paint on the screen
  • Clean up the libmscore changes

Previous Work

  • (7 September 2013) Verified and loaded a score, but loading more complicated scores with text (as well as rendering) has presented issues with font loading, therefore I've been looking into that problem. It seems that QPF format fonts might be easier to load, but getting the makeqpf utility which creates those files proved complicated, as QPF doesn't seem very current with Qt. Talking to the creator of emscriptenqt, it seems the true-type font loading issue might be a problem within emscriptenqt itself, so I've been exploring the source trying to track it down. In the meantime I've created my own branch of emscriptenqt to track changes.
  • (23 August 2013) Continuing work on loading the score. Initialization seems to be working, but I had to comment out some methods to get that to work, which appear to be causing problems with the loading of a score. I now either must stub out all methods related to some of the graphical initialization which was skipped, or re-visit some of the initialization code. For the time being, stubbing out the methods seems to be the better option until I can get a score fully loaded and verified.
  • (15 August 2013) Currently working on loading a score and verifying the score loaded correctly (by printing out some meta info). Right now, I have exposed some methods to javascript which allow me to load the score, and I'm sorting out some bugs related to the transition from a traditional desktop app to a javascript one (embedded files, initialization, etc.).
  • I'm also working on creating a better testing process. I had looked into using PhantomJS, but it appears they're using an older version of webkit which doesn't have some of the javascript features required by emscripten. For now I'll just be using javascript files and the javascript console.
  • (updated 30 July 2013) Working on getting just one class (Score) to have some methods exposed so that I can load a score into the browser and then hopefully render it. So far I'm able to instantiate an instance of score in the browser, but I'm getting some weird thing about unbound types. Been getting help on the emscripten irc to sort through these errors. Hopefully this won't be too much of a set-back.
    • Relevant paste: paste
    • update: I've abandoned using embind for now, and I'm just using C wrappers and "EXPORTED_FUNCTIONS." This seems to be a lot simpler to expose more methods, although it's a little less flexible and not as streamlined.
  • UPDATE (24 July 2013): I've created a repository for the embindgenerator script here: repo
  • UPDATE (23 July 2013): Using the doxygen XML file I'm able to extract code structure from a collection of source files. I then feed that file into a node script I'm developing which parses the file (using xmldom, a node module) and traverses the document, generating a cpp embind file as it goes along. This script is not yet complete, but I'm making steady progress. The script is already able to identify structures which need to embind declarations generated for them.
    • Sample generated file: |sample
    • Here is another sample, this one is the "Page" class from libmscore, still have a few things to tweak: Page_EMBIND
  • UPDATE (19 July 2013) : Continuing experiments with embind lead mixed results. Succesfully got some example projects working with the "EXPORTED_FUNCTIONS" method, and when calling embind on a single file, but when trying to use embind on a project consisting of more than one file I'm having lots of problems. I successfully generate the bitcode, but it seems that these methods aren't getting exposed in javascript. I'm going to do some more experimenting and debugging as well as trying to find more documentation on embind and asking for help in the irc. I've also been looking into automated generation of the embind bindings. It seems someone created a tool for visual studio which does it (can be found here), but using visual studio is far from ideal. Talking to the creator, it seems that he got doxygen to generate an xml file containing the layout of the code, and then using that generated code structure created the embindings. I think creating a Node.js tool which generates these embindings would be something worthwhile. Once I get the bindings created manually working, I'm going to look into that.
    • UPDATE (20 July 2013): After quite some time of checking and re-checking my work, turns out I was using "--embind" as the compiler flag, instead of "--bind" which is the correct flag. Embind seems to be working as expected now and I plan to move on to creating a tool which will automatically generate embind files.
  • UPDATE (9 July 2013) : First taste of success -- generated bitcode out of the libmscore source using emscripten. Unfortunately, getting libmscore's c++ classes and functions exposed to Javascript may prove a bit tricky. It seems there are several routes to take. I'm going to do some research and possibly a little experimentation with these methods before committing to one.
    • Emscripten, interacting with code: link
    • Embind, a tool which exposes c++ classes: link

    Hopefully I can find a way to automate as much of this process as possible to make future patches simpler.

  • UPDATE (6 July 2013): Figured out how to get emscripten-qt to compile with support for SVG and QDeclarative stuff. After some experimentation, solidified that LLVM 3.4 will not work with emscripten, at least not without more patching to emscripten itself, which is likely outside the scope of this project. That left me with either rewrite parts of libmscore to use different data structures or modify some header files that used the atomic calls. Since everything in emscripten doesn't use multiple-threads, I can just modify some of the headers to do their literal sequential operations rather than use the (unsupported) atomic calls. This seems like the most likely solution right now. After I complete this, if everything seems to be working, I'm going to go back and clean up some of the libmscore changes I made which I don't think are necessary anymore.
  • Modify the header to stub out the atomic methods doing their simple sequential counterparts instead.
  • Create a qmake build for libmscore that uses emscripten-qt's qmake.
    • UPDATE (28 June 2013): Have been fighting with basically getting a square peg to fit in a round hole. Encountered a bug in llvm 3.2 in which some library functions for c++11 weren't yet implemented. These bugs were fixed in 3.4, but emscripten only supports llvm 3.2. A branch of emscripten supports llvm 3.3, which I've been trying to make work for llvm 3.4. Emscripten-qt's demos failed, but I decided to go ahead and try to build libmscore with this configuration anyway, but I've been encountering lots of inter-dependencies between libmscore and the rest of MuseScore. I've mostly been solving these by stubbing out methods and commenting out lines, tracking any changes I make in a log. If this configuration of emscripten and llvm doesn't work, I have talked with lasconic about several alternatives I might pursue.
    • Pursue alternative configurations, listed below.
      • Try to isolate the bugfix in 3.4, and fork llvm
      • Rewrite the parts of libmscore which are victim to the bug in llvm 3.2. It seems like it might be Map or atomic operations causing the problems.
    • UPDATE (21 June 2013): I've created a file, as well as some other files which are normally intermediately generated during a build (all.h and config.h), which seem to be working well. Now I'm just plowing through the innevitable rampant compiler-errors. I'm keeping track of all the changes I make from a "vanilla" libmscore build so that I can walk through all my steps as well as reproduce it. My goal is to get everything to compile with emscripten, and then once it's working go back and optimize.
    • For reference I will look at which also uses qmake to build libmscore.
  • UPDATE (18 June 2013): emscripten-qt configured and working. Wrote up a short summary of the steps to get emscripten-qt running attached as a child page.
  • UPDATE (17 June 2013): Continued attempts with emscripten-qt show light on a possible bug in emscripten, looking into work-arounds. Also began work on what will need changed in libmscore's build process (CMakeLists.txt and such) to use the qmake from emscripten-qt as well as emcc and emscripten's build tools. Should more or less still be on schedule with the original proposal timeline as long as I can solve these problems by the end of the week.
  • UPDATE (6 June 2013): having some difficulties getting emscripten-qt examples to run. I've been exchanging correspondence with Simon St James (creator of emscripten-qt) to sort through them, who has been extremely helpful. Making progress.
  • Setting up my work environment, git, etc..
  • Looking through libmscore code and reading relevant documentation (especially coding rules).
  • Reading Emscripten documentation
  • Learning the details of the libmscore build process

Setting up LLVM/clang, emscripten, and emscripten-qt


From, "the LLVM Project is a collection of modular and reusable compiler and toolchain technologies." It is used for the optimization of programs written in arbitrary programming languages. Clang is a C/C++ front-end for LLVM. Emscripten uses these technologies to convert C++ code into Javascript. Emscripten-qt adds support for Qt in Emscripten.

This guide will go through the process of setting up these tools, designed for a Linux environment, although many of the links have instructions for other operating systems as well.


Versions of software used:

  • Linux:
    • linuxmint-13-xfce-64
  • llvm:
    • LLVM (
      LLVM version 3.2svn
      Optimized build with assertions.
      Built Apr 15 2013 (11:06:21).
      Default target: x86_64-unknown-linux-gnu
      Host CPU: corei7
  • CLANG:
    • clang version 3.2 (tags/RELEASE_32/final)
      Target: x86_64-unknown-linux-gnu
      Thread model: posix
  • emcc (emscripten):
    • emcc (Emscripten GCC-like replacement) 1.4.9 (commit 0ad87244178badf26cd5c8e0ed88116e87026472)
  • node:
    • v0.10.0
  • qmake (emscripten-qt) :
    • QMake version 2.01a
      Using Qt version 4.8.4

LLVM and Clang

To get LLVM set-up, simply follow the steps provided on LLVM: Getting Started. Be sure that you meet all of the requirements listed on the requirements section, and then follow the steps outlined on getting started a summary.

After llvm/clang are finished compiling, add the directory where the binaries are to your path. Should be something like "/home/user/somewhereInHome/llvm/Release+Asserts/bin" then try these examples to make sure everything is working:
(the parts in [] are notes, don't type them)

clang --help
clang file.c -fsyntax-only             [check for correctness]
clang file.c -S -emit-llvm -o -        [print out unoptimized llvm code]
clang file.c -S -emit-llvm -o - -O3
clang file.c -S -O3 -o -               [output native machine code]

if everything ran successfully, then clang and LLVM are configured correctly and you can move on to the next step.

Emscripten and Emscripten-qt

For emscripten and emscripten-qt, just follow the instructions on the emscripten-qt wiki the section "how do I use it." The instructions are fairly detailed, and I will summarize them here:

Create a directory (probably somewhere in your home directory) for emscripten and emscripten-qt. For the sake of this guide, that directory will be referred to as "/home/user/emscriptenqt/", make sure to replace all instances of that directory with what your's actually is.
Enter the following commands, replacing /home/user/emscriptenqt

mkdir build-emscripten-qt
cd build-emscripten-qt
export EMSCRIPTEN_ROOT_PATH=/home/user/emscriptenqt/emscripten/
../emscripten-qt/configure -xplatform qws/emscripten-clang  -embedded emscripten -static -opensource -debug  -no-qt3support -no-opengl -no-openssl   -system-zlib -no-gif -qt-zlib -qt-libpng -no-libmng -no-libtiff -qt-libjpeg -no-accessibility -dbus -script -no-fpu -no-mmx -no-3dnow -no-sse -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-icu -no-rpath  -confirm-license -no-webkit -no-phonon -no-freetype -nomake demos -nomake examples -little-endian -no-feature-socket  -no-feature-codecs -no-feature-textcodecplugin -no-feature-systemlocale  -no-feature-qws_multiprocess -no-feature-sound    -no-feature-printpreviewwidget  -no-feature-printpreviewdialog  -no-feature-systemsemaphore -no-feature-sharedmemory -no-feature-localeventloop -feature-qws_clientblit -feature-qws_cursor  -depths 32 -make tools  --prefix=$(pwd)/install
make sub-tools-bootstrap && make install_qmake sub-moc-install_subtargets sub-uic-install_subtargets sub-rcc-install_subtargets && make  sub-corelib-install_subtargets sub-gui-install_subtargets install_mkspecs

Now you should have emscripten and emscripten-qt. You may wish to add /home/user/emscriptenqt/emscripten to your PATH, but it is not necessary. Next, we will run an example Qt app to make sure that everything is working correctly.

cd ..
mkdir qtdemos
cd qtdemos
export PATH=/home/user/emscriptenqt/build-emscripten-qt/install/bin/:$PATH
export QMAKESPEC=/home/user/emscriptenqt/build-emscripten-qt/install/mkspecs/qws/emscripten-clang
cp -R ../emscripten-qt/demos/chip .
cd chip
patch main.cpp < ../../emscripten-qt/emscripten-stuff/chip-emscripten-qt-patch.patch 
cd ..
mkdir build
cd build
qmake ../chip/
mkdir -p qt-fonts && cp ../../build-emscripten-qt/install/lib/fonts/helvetica_*.qpf ../../build-emscripten-qt/install/lib/fonts/fixed_*.qpf qt-fonts/
cp ../../build-emscripten-qt/install/lib/QtGui.a
cp ../../build-emscripten-qt/install/lib/QtCore.a
../../emscripten/emcc \
  chip.bc \ \
  -O2 \
  --closure 0 \
  --jcache \
  --pre-js ../../emscripten-qt/emscripten-stuff/pre-qt.js \
  --js-library ../../emscripten-qt/emscripten-stuff/pre-qt-library.js \
  --embed-file qt-fonts \
  -s EXPORTED_FUNCTIONS="['_main', '_EMSCRIPTENQT_resetTimerCallback', '_EMSCRIPTENQT_timerCallback', '_EMSCRIPTENQT_timerCallback_springboard', '_EMSCRIPTEN_canvas_width_pixels', '_EMSCRIPTEN_canvas_height_pixels', '_EMSCRIPTENQT_mouseCanvasPosChanged', '_EMSCRIPTENQT_mouseCanvasButtonChanged']" \
  -s TOTAL_MEMORY=67108864 \
  -o chip.html 

The emscripten-qt wiki goes into more detail about what all of the parameters and commands mean.

If all completes as it should, you should now have a chip.html file in that directory. Open it with a supported browser, and the chip's demo page will load. If so, then emscripten-qt is working as it should, and you're finished!

NOTE: you might notice that the generated canvas isn't large enough to display all of the chip's demo. Apparently emscripten-qt does not yet support dynamically resizing of the canvas, and the canvas must be set manually to the correct size. On about line 23 of the generated html file, you should find:

<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>

change it to something like:

<canvas width="800px" height="600px" class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>

Using emscripten to port libmscore to Javascript

Setting up Libmscore emscripten development[a]

Getting Started

First, follow all of the steps outlined here for how to set up LLVM/clang, emscripten, and emscriptenqt

Next, you can either clone a version of libmscore already set up for emscripten here or you can try to clone a pre-qt5 version of libmscore and follow the notes in appendix A of the necessary changes to use emscripten/qt.

As of the time of writing, emscriptenqt will not work with the latest version of LLVM/clang, however, using the compatible version will generate build errors because of unsupported atomic calls. Since everything done in emscripten is basically synchronous, this is not really an issue, and these atomic methods can be stubbed out. I have already created a file called “atomic_fixed” Move and rename this file (remove the “_fixed” suffix) to “emscripten/system/include/libcxx/atomic” where “emscripten” is the folder which contains your emscripten directory.

Once you have the libmscore code and emscripten and emscriptenqt set up, open up the “” file (or obtain one here), and edit the “EMSCRIPTEN_FOLDER” to point to your folder which contains the emscripten and emscripten-qt folders.

When the file is set up correctly, you can simply run “./” and that will generate a “libmscore.js” file which contains libmscore code converted to javascript. Make sure that you have the valid EXPORTs from the emscripten setup process:

export PATH=/path/to/emscriptenqt/build-emscripten-qt/install/bin/:$PATH
export QMAKESPEC=/path/to/emscriptenqt/build-emscripten-qt/install/mkspecs/qws/emscripten-clang
export PATH=/path/to/emscriptenqt/emscripten/:$PATH

You will need these exports everytime before you build. Replace “path/to/emscriptenqt” with the path to your emscriptenqt folder.I recommend creating a simple shell script containing those lines, which you can simply run before the build.

Exposing Libmscore’s C++ methods to Javascript

Once libmscore.js has been generated successfully, there are still more steps to expose libmscore methods to Javascript. Any desired methods must be exported during the compile step (part of, and they must be added to Module in Javascript. Also, it’s usually useful to wrap C++ methods in an extern “C” {} section and stick to C-style calls, as these are easier to export.

For my purposes, I found it easiest to put all my wrapped functions into “embinds/classScore.cpp” : classScore.cpp. There you can see how I wrap C++ class methods and such, and the basic naming convention that I followed. This was mostly to prevent conflicts with existing libmscore code and for ease of use of exporting to javascript.

Next, add this method to the “-s EXPORTED_FUNCTIONS” array in the file: this line. Note, you do have to add a “_” before the function name when listing it in this array, even though that method doesn’t have a “_” in the source.

Finally, you call “Module.cwrap” from Javascript, before calling your method. This is explained in better detail here. Following my examples in test.html should be fairly straightforward: test.html. I put all my cwraps into one large “Libmscore” object.

It’s important to note that “Module.cwrap”, the emscripten functionality that allows calling these methods, only understands basic types: number, boolean, and String (for char*). Any pointers to objects are just treated as a number as an index to the emscripten’s heap object. So it’s perfectly fine to pass that number in and out of wrapped methods, but you can’t expect to do anything with that pointer in regular javascript, because to JS it will just be a number. With Strings, emscripten works some magic that copies a passed in string to its internal memory structure, and then passes that created pointer to the C++ method.

After you have successfully exported the method and cwrap’d it, you can call from normal javascript, like in test.html.

Appendix A: Modifying libmscore for emscripten

Foreward: this is a collection of my notes detailing the steps I took to convert a normal clone of MuseScore into the codebase I used for compiling with emscripten/qt. I don’t imagine these exact steps will work with any other version of MuseScore except for the specific one I used, but the process should be similar. It is therefore my hope that these notes may be useful for any interested party to replicate the process for a different version of MuseScore.

First I cloned MuseScore from this sha. I then copied the entirety of the “libmscore” folder out of that directory and into a different one. I then created a new repository in that directory. This allowed me to keep most of what I was doing separate from the rest of MuseScore, while pulling in only the pieces I needed.

I created a qmake project file more or less following a template similar to mscoreserver's project file. I removed things which were not necessary for the emscripten port. The current .pro file I’m using (at the time of writing) looks like this. Of particular interest will be the cxxflags, sources and includes, the “QT += svg declarative”, and the precompiled header. I added “-std=gnu++11” and “-stdlib=libc++” lines, and removed “-fno-rtti.”

I also copied over the “all.h” precompiled header from the MuseScore repo into the new repo. This file could probably be generated during the build process, but for my purposes I did not pursue this route. There were some files I needed to remove from “all.h”, these included:
QWebView, QWebFrame, QtXml, QAbstractMessageHandler, QXmlSchema, QXmlSchemaValidator, QXmlStreamReader, QNetworkAccessManager, QNetworkReply, QNetworkCookieJar, QHostAddress, QUdpSocket, QHttpPart, QHttpMultiPart, QDeclarativeEngine, QDeclarativeComponent, QDeclarativeItem, and QDeclarativeView. “all.h” should end up looking something like this.

I copied over “” from the MuseScore repo into the new repo, and renamed it “config.h” I had to mess around with some of the defines, such as USE_ALSA and other audio flags, resulting in this.

I had to add some missing includes to all.h ( and ).

Lots of methods which had to deal with midi events and synthesizer stuff had to be stubbed and commented out. Mostly inside of “instrument.h”, “undo.h”, “undo.cpp”, “instrtemplate.h”, “instrtemplate.cpp”, “instrument_p.h”, “instrument.cpp”, “keyfinder.cpp”, “layout.cpp”, “pitchspelling.cpp”, and “rendermidi.cpp”

Edited the synthesizer source files to remove and reference to “effects/effect.h” stuff, then removed that include from those files.

I had to rename “QZipReader”, “QZipWriter”, and “CentralFileHeader” because of conflicts with emscriptenqt classes. I simply added an “M” onto the end of all these classes.

I commented out the chord list loading stuff in “style.cpp”

I commented out a lot of the fonts in mscore.cpp so that I could test loading one font at a time to see which were giving issues.

After these steps I was able to get a very basic score file to load (this score) and was able to verify some of the meta tags associated with it.

Ideas 2012

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestions, come on IRC channel #musescore, or contact us on the developer mailing list

Instrument Editor

  • read instrument description files (done)
  • build a GUI to display and edit all instruments
  • show list of instruments
  • display all attributes of currently-selected instrument
  • make all attributes editable
  • create new instrument, use currently-selected instrument as a starting point
  • remove instrument
  • change currently-selected instrument
  • save instrument descriptions
  • save as

Difficulty: Easy to Medium
Skills: C++ / Qt. No detailed knowledge of MuseScore internals is required, except for the InstrumentTemplate class usage. The code is mostly independent of MuseScore core development.
Estimated LOC required is 4000.
Possible mentor: lasconic

Beam mode editor

A UI to edit the rules of beam groups and a way to assign the rules to measure, staff etc... similar to time signature (measure based, different by staff)

Difficulty: Moderate
Skills: C++ / Qt. A bit of knowledge of MuseScore internals.
Possible mentor: lasconic

Symbol Editor

Create an editor for MuseScore specific graphical symbols which are in SVG format.
A specialized (simplified) variant of this project is to create an editor for note heads.

Difficulty: Moderate to Hard
Skills: C++ / Qt. Requires some knowledge of MuseScore internals.

Integrate Breakpad

What is BreakPad
"Breakpad is a library and tool suite that allows you to distribute an application to users with compiler-provided debugging information removed, record crashes in compact "minidump" files, send them back to your server, and produce C and C++ stack traces from these minidumps. Breakpad can also write minidumps on request for programs that have not crashed. Breakpad is currently used by Google Chrome, Firefox, Google Picasa, Camino, Google Earth, and other projects."

Difficulty: Moderate to Hard
Skills: C++ / Qt
Possible mentor: lasconic

Ideas 2011

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestion pass by the IRC channel #musescore or contact us on the developer mailing list

Implement a plugin manager in MuseScore

See plugin manager

  • Define a plugin package and write documentation for plugin developers
  • Create interface in MuseScore to list, install, uninstall plugins
  • Need to deal with security
  • Bonus: Update and compatibity management

Difficulty: Moderate to Hard
Skills: C++ / Qt
Possible mentor: lasconic

Offer self installable language packs on

MuseScore software is translated in more than 20 languages thanks to the drupal based site at The languague files are provided as qm file on this website, but fur a lot of users it would be more convenient to download an auto installable language file.
Difficulty: Moderate
Skills: Depending on your proposition C++ / CMake / NSIS
Possible mentor: lasconic

Setup automated testing

MuseScore being an interactive software, it needs UI testing to improve his stability. MuseScore community has setup a wiki page to gather information about this topic. Your role will be to choose the right tool, write testing scenarii etc...
Difficulty: Moderate to hard
Skills: Depending on your proposal
Possible mentor: david

Improve MIDI file import

Improvements in this area could include:

  • Triplet handling
  • Voice and staff separation

Difficulty: Hard
Skills: AI, C++, Music
Possible mentor: werner
Additional information: Current state of MIDI import by Kevin Hylee.

Enhance the Audio Widget Library for better user experience

The Audio Widget Library contains the controls for Volume, Mixer etc... Users will benefit a more usable and good looking set of controls.
Difficulty: Easy
Skills: C++, Qt, ergonomy
Possible mentor: lasconic

Ideas 2010

Your proposal

We strongly believe that the best proposal for you is the one you'll do. If you have any suggestion pass by the IRC channel #musescore or contact us on the developer mailing list

Add fretboard & tabstaff support in MuseScore

Difficulty: Hard
Skills: C++ / Qt graphics, guitar theory
Possible mentor: Werner
Status: Fretboards partially implemented in development builds for MuseScore. See Implemented

Extend the Qt Script based plugin framework

The plugin framework is still very young but there are already some plugins. Plugin developers have a lot of ideas to bring more features to MuseScore.
Difficulty: Moderate
Skills: C++ / Qt
Possible mentor: lasconic
Status: Implemented

Implement a plugin manager in MuseScore

See plugin manager

  • Define a plugin package and write documentation for plugin developers
  • Create interface in MuseScore to list, install, uninstall plugins
  • Need to deal with security
  • Bonus: Update and compatibity management

Difficulty: Moderate to Hard
Skills: C++ / Qt
Possible mentor: lasconic

Offer self installable language packs on

MuseScore software is translated in more than 20 languages thanks to the drupal based site at The languague files are provided as qm file on this website but a lot of users it would be more convenient to download an auto installable language file.
Difficulty: Moderate
Skills: Depending on your proposition C++ / CMake / NSIS
Possible mentor: lasconic

Automated upgrade of MuseScore

In MuseScore 0.9.6, a automated check for upgrade has been added. For next version, users would be able to check for update, download the upgrade package, install it and restart MuseScore
Difficulty: Moderate to hard
Skills: C++
Possible mentor: thomas_
Status: Implemented

Setup automated testing

MuseScore being an interactive software, it needs UI testing to improve his stability. MuseScore community has setup a wiki page to gather information about this topic. Your role will be to choose the right tool, write testing scenarii etc...
Difficulty: Moderate to hard
Skills: Depending on your proposal
Possible mentor: david

Improve MIDI file import

Improvements in this area could include:

  • Triplet handling
  • Voice and staff separation

Difficulty: Hard
Skills: AI, C++, Music
Possible mentor: werner

Enhance the Audio Widget Library for better user experience

The Audio Widget Library contains the controls for Volume, Mixer etc... Users will benefit a more usable and good looking set of controls.
Difficulty: Easy
Skills: C++, Qt, ergonomy
Possible mentor: lasconic

Play progressive dynamic and tempo changes

Currently MuseScore plays dynamic and tempo changes but can't deal with ritardando or crescendo
Difficulty: Easy to Hard depending on the proposal
Skills: C++, Qt
Possible mentor: lasconic
Status: Implemented

MuseScore 2.1 hit list

Blocking issues

New Features

(If they don't cause regressions or if we can document them well enough)


Windows packaging

Crashes and Corruptions

Let's have another look




View release notes draft here.

Follow commits to 2.1 here.

MuseScore 2.2 hit list

#202271: Copy-paste sextuplets/octuplets and their removal leads to corruption
#197131: Regression: Bass synthesizer and bass guitar create popping sounds
#198831: Regression: Cannot enter rests via mouse on drum staves
#212776: Unwanted string-like sounds when playing
#196321: Tenor Drum playback not functioning correctly
#197101: Ctrl+Home does not reposition view to first element
#195891: "Score Information" dialog too big for screen with 768 height

#211461: Editing a dynamic’s text disables it
#213221: Crash when adding fermata on barline in part for staff >1 when score has spanning barlines
#196771: Regroup Rhythms deletes various elements, even more lost on undo
#197716: Audio file will not upload to website
#78416: Tempo text oddities in score with linked parts until save/reopen
#81711: Scores saved in unexpected location if saved after MuseScore crashes and restores session
#196306: Metronome emphasizing wrong beat in some cases when using real-time (automatic) note input
#117486: wrong scrolling of 2nd and subsequent pages when playing a multi-page scrore with vertical page layout
#197466: Trombone Range edits
#167171: Make custom palettes based upon advanced workspace default to not enable editing
#195146: Rehearsal mark alignment changes to center after reload if added via palette double click
#151521: Crash due to bad selection after undo of operation originally performed in linked score
#163691: Crash after removing and undoing a staff in file with elements linked to themselves
#23369: Support 6/9 and other chord symbols with embedded slashes
#12971: Same note in different voices and lengths plays only the length of the shortest note
#112376: Offset Tremolo is not saved correctly.
#219521: Add a SVG file by double-click, then clear it in the palette, leads to crash
#222031: Crash after undo on a tied deleted/copied-pasted note belonging to a chord
#224031: Crash by undoing the removal failure of the repeats palette symbols separating multimeasure rests
#224781: Create a tuplet on a selected mmrest leads to corruption
#224806: Can't remove spacer after reordering instruments
#224451: Mismatch between "To Coda" and "Fine" when the first is deleted before enable mmrests
#223531: Offsets in text frame are lost if combinated with text frame margins
#223406: Blank part tab name after part export or copy
#222181: Changing the duration of rests doesn't work consistent inside tuplets via toolbar
#222176: When splitting a measure the note stays selected.

#209331: Update Preferences > Shortcut entries for enharmonic shortcuts
#209596: Screencapture + Copy + Transparency issue
#189736: On copy/paste measure(s) with slur(s) in score, the slur(s) get(s) lost in part

New features

#5163: Option to select the MIDI Output ?
#17615: Delete in menu
#198486: Copy and paste multiple Fretboard Diagrams
#175886: Do not require fretboard diagrams to be attached to a note

Une question sans réponse ? Postez la sur le forum.

Getting started

See also: Command line options

Your first code contribution

So, you want to help develop and improve MuseScore? Welcome to a passionate and dedicated team of volunteers from around the world.

This is how it generally works:

  1. If you see an area that could benefit from improvement, then jump right in!
    • There are a number of issues that have been identified as a good entry point for beginners here.
  2. If you become unsure, ask questions.
  3. If you are about to make a significant, or potentially controversial change, discuss it beforehand.
  4. Share your improvements early and openly. That way, people can let you know if you're on the right track.

How to write a good bug report: step-by-step instructions

Isolate bug

The first step in in writing a bug report is to identify exactly what the problem is. Saying "something is wrong" is not helpful; saying exactly what is wrong, and how to reproduce it, is. If you can tell exactly what is wrong, and reliably reproduce an example of the problem, you've isolated a bug.

Check if you are using the latest version

Bug reports should be based on the the latest nightly build. If you are using a released version or an out-of-date build, please update to the latest revision and check to see whether or not the bug still exists.

Check if the bug is known

Please check whether the bug you are experiencing is already documented in the issue tracker. If it is already documented, you may click "subscribe" to follow any developments. If your bug is different than any others recorded in the issue tracker, "Create a new issue".

File each issue separately

If you have multiple issues, it is better to file them separately so they can be tracked more easily.

Create a new issue

Sign into and go to the issue tracker (a link is found on the right side of every page). Click on "Create a new issue".

There are a number of initial questions that are used for filing a bug report - answers to these allow progress.


The first question is which project your bug applies to. If in doubt, select "MuseScore", then "Next" to continue.


The version of MuseScore in which you discovered the bug (e.g., 2.0.3, or 3.0-dev). If you can reproduce the problem in more than one version, select the earliest.


Selecting the component is sometimes difficult. When in doubt, select "Code".


A "bug report" is usually for when MuseScore does something contrary to what is expected: An example of a bug could be: open a specific file, but it instead crashes. Almost everything in the issue tracker consists of bug reports.

Tasks, feature requests and support requests are beyond the scope of this article, but generally it is recommended to discuss them first on the forum, instead of adding them directly to the issue tracker.


Every bug will have a different priority.

"Critical" is used if any of the following happens:

  • Data loss
  • Corruption
  • Score no longer opens
  • Inability to save work
  • Certain irreversible operations
  • Hangs and crashes


  • Common feature incorrectly/not functioning
  • Otherwise critical issues, if they happen only in some very rare and esoteric corner cases

All other bugs are considered "normal" or "minor" priority. Bear in mind that while a bug that you are experiencing is important to you, developers have to balance it with all the other known bugs.


The status of new bug reports should generally be marked as "Active".


If you intend to provide a fix, you can select your username. If otherwise, leave it 'unassigned'.


The title should describe the problem as best as possible. Remember that the title is read more often than any other part of the bug report.

Poor title: Notes don't display correctly
This title is not specific enough for someone to look at it a month from now, and remember what the bug report is referring to.

Good title: Stems too short for 32nd and 64th notes
This title is an improvement over the previous title, because it specifies the type of notes that are affected and identifies the display problem.

After submitting the issue, it is possible to improve the title.


Steps to reproduce bug

A bug report requires clear instructions, so that others can consistently reproduce it. Many bugs require some experimentation to find the exact steps that cause the problem you are trying to report. If you aren't able to discover these, try obtaining some help on the forums instead.

A good set of instructions includes a numbered list that details each button press, or menu selection. The following bug reports are good examples to mimic:

Note: the following bugs have all now been fixed

It can also be helpful to test your own instructions, as though someone else is trying them (as they will).

Expected behavior

Describe what should happen if the bug was fixed.

Actual behavior

In contrast to the expected behavior, describe what currently happens when the bug is present.

Version number

In MuseScore, go to About (listed in a top menu, depending on your operating system) to find out the version of MuseScore you are using. For example: "Version: 2.0.0, Revision 6e47f74, Nightly Build".

In the development builds the commit code can be obtained via 'About' and clicking the 'Copy to clipboard' button (results in something like 6e47f74, or in 'Help'>'Report a bug'.

Alternately, please state if you have compiled the source code and detail the versions of the third party tools.

Operating system

Name the operating system and version you are using, such as "Windows XP SP3", or "Mac OS X 10.7.5".

File attachments

If you can supplement your bug report with an MSCZ score, image, audio, or crash log that helps others reproduce the issue, attach these files.


"Save" to submit your bug report to the issue tracker.

Following up

Once a developer marks a bug as fixed, it is a good idea to ensure that it is completely fixed. To test, download the latest nightly build.

How to use a debug version of MuseScore

Note: This page is from 2010 and out of date. Nightly builds can be downloaded from If want to run in "debug" mode, execute MuseScore from a terminal with " -d" as a command line option. However, this doesn't print out all the qDebug messages. If you want that, you will have to self compile MuseScore:

A special "debug" version of MuseScore displays messages about each step that is happening inside the software. It can be useful for finding the source of bugs or problems with the software. The instructions below show how to use a debug version that is pre-built.

Important: the debug version is not a stable release and is only intended for testing a specific problem. Please use other versions of MuseScore for creating or editing normal scores.

Instructions for Windows

Download the "debug" version of MuseScore.

After you download the file, you will need to decompress the file using 7-Zip (as explained on the Windows nightly builds page).

When the "debug" version is running it displays detailed information in a separate window called a "command prompt". The "command prompt" usually appears as a small window with white text on black background.

  1. Open the uncompressed "mscore-debug" folder
  2. Double-click "runDebug.bat". This should open the main MuseScore window and the debug window
  3. Follow the exact steps that are causing problems for you in MuseScore and then choose File > Quit

The command prompt should remain open after you close the main MuseScore window. It is sometimes helpful to share the contents of the command prompt text when discussing a bug. However, the text is often lengthy so it is probably best to only share it if requested or if you notice something important. Copying text from the command prompt is different from any other program in Windows so the remaining steps describe this procedure.

  1. Right click on the command prompt window and choose "Mark"
  2. Click and drag to select the text. Make sure you get all the text
  3. Press Enter. The text is now copied
  4. You can now paste this text in other programs via the normal methods (Edit > Paste)

Command line options

This page is a duplicate of Command line options in the MuseScore Handbook, which is more complete.

You can launch MuseScore from the command line by typing

mscore <options> <filename>

<options> and <filename> are optional.

The following options are available

Displays the current version and revision numbers for MuseScore (Linux only)
Starts MuseScore in debug mode
Enables the plugin script debugger
Disables the integrated software synthesizer
Disables MIDI input
Starts with the new score wizard regardless of preference setting for start mode (0.9.6 or later)
Starts MuseScore in debug layout mode
Displays all MIDI input on the console
Displays all MIDI output on the console
-o <filename>
Exports the currently opened file to the specified <filename>. The file type depends on the filename extension. This option switches to the "converter" mode and avoids any graphical interface. You can also add a filename before the -o if you want to import and export files from the command line. For example mscore "My Score.mscz" -o "My Score.pdf"
-r <dpi>
Determines the output resolution for the output to "*.png" files in the converter mode. The default resolution is 300 dpi
-S <style>
Loads a style file; useful when you convert with the -o option
-p <name>
execute named plugin
Use only the standard built-in presets or "factory-settings". For details, see Revert to factory settings
Enable experimental features
Load icons from the file system. Useful if you want to edit the MuseScore icons and preview the changes
writeWorkspaceFile and converterMode
-c <pathname>
set config path
enable Test Mode
-a <driver>
use audio driver: jack alsa pulse portaudio

Qt Toolkit Options

-style = style
Determines the style of the GUI application. Possible values are "motif", "windows" and "platinum". Depending on the platform other styles may be available
-style style
As above
-stylesheet = ss
Sets the application stylesheet. The value of "ss" is a path to a file that contains the stylesheet
-stylesheet ss
As above

Translating MuseScore

The translation server plays the central role in localizing MuseScore. It's the translation server which is in charge of committing the translations to the code repository and the translation server only.

Help translating

Translating MuseScore is done via the web interface of the translation server at This is done collaboratively by translating string per string. In the future it will also be possible to import a complete po file.

Technical workflow

  • The translation server will hold a release for each stable MuseScore version. These are never updated. The trunk on the other hand is checked out on daily basis.
  • For each release and language, there will be a qm file available so the latest version can be tested locally by downloading the qm file into the MuseScore directory.
  • At regular times, the ts files of the trunk release will be committed to the repository.



Compile instructions (Windows - MinGW) - Git


Compile instructions (macOS) - Git

Linux & BSD

Compile instructions (Linux & BSD) - Git

Most instructions for Linux and BSD are the same regardless of which distribution you use, but you'll need to read the distribution-specific instructions below for any aspects that are unique to your distribution (usually only the method of installing dependencies). If no page exists for your distribution then feel free to create one - use the closest matching distribution as a starting point. If the instructions for one distribution work for a different one (or only require a few minor changes) then just add a note to the top of that page rather than creating a new one.

Compile instructions (Windows - MinGW) - Git


From revision 5b7c72a onwards, committed 9 March 2017, the development version of MuseScore (master) on Windows requires Qt 5.8 or newer and a C++11 capable toolchain.
The 2.x branches require Qt 5.4 however.

To prevent any compatibility issues, it is essential to compile MuseScore with the same type and version of compiler as was used to build Qt.

N.B. The instructions on this page are only applicable to MuseScore from the above revision onwards. If you are compiling MuseScore 1.3, or an older revision of the git repo, you need to follow the older version of these instructions, as it may require different versions of Qt and GCC.

What you need


The following tools need to get installed on your computer.

7-Zip utility

Some of the files to be downloaded are compressed using 7-Zip compression. If necessary, download and install 7-Zip.

MinGW 5.3.0 and Qt 5.8

Fresh install:
Download the Qt Online Installer for Windows.

NB There a number of Windows installers on this page - make sure it is the Online Installer you are downloading.

Run the installer and install Qt in C:\Qt. You just need the Qt libraries for MinGW 5.3.0 and the MinGW 5.3.0 toolchain.


(optional) Add the following to your %PATH%


Update to Qt 5.8
Launch the Qt Maintenance Tool (C:\Qt\MaintenanceTool.exe).
First this tool will need to update itself, so select the Update components option. Once you've gone through all the steps, press the Restart button.

For this 2nd pass, select the Add or remove components option. In the select components screen, your currently installed components are preselected. Make sure to add ticks for the Qt libraries for MinGW 5.3.0 and that toolchain (see image from fresh install above).


Download the latest version of windows binaries for CMake. Choose the Windows (Win32 Installer) version. You need at least version 3.0. Versions up to 3.8.0 are known to work too. 3.5.1 is known to cause issues if not last in PATH.

Install in the default location (probably C:\Program Files\CMake or C:\Program Files (x86)\CMake) and optionally put the bin subdirectory in your PATH.
For 3.5 and later make sure it us in PATH after the 3 Qt mingw directories (see above).

Source Code

Get the source code from GitHub. If you need a Git client, you can try Git for Windows or the GitHub windows client.
git clone git://

If you plan to contribute to MuseScore, you can setup your own fork on GitHub and clone it instead. See the Git Workflow page.

Note: Directory names with spaces in them cause the build to fail; so avoid spaces in the name of your clone directory.

(optional but recommended) In your clone directory, copy the file build/git/hooks/post-checkout to the directory .git/hooks in order for mscore/revision.h to be maintained automatically by git. See build/git/hooks/README for details. Note that the .git directory is hidden.

Change default paths (optional)

The following two steps should not be necessary if using the default paths given above for Qt and MinGW.
Change build\mingw32.mingw.cmake to suit your Qt and mingw install

set (CROSS C:/Qt/Tools/mingw530_32)
set (CROSSQT C:/Qt/5.8/mingw53_32)

%PATH% summary

You must have the following in your %PATH%:

  • C:\Qt\Tools\mingw530_32\bin;C:\Qt\Tools\mingw530_32\lib (or wherever MinGW is installed for you)
  • C:\Qt\5.8\mingw53_32\bin (or wherever Qt is installed for you)
  • C:\Program Files\CMake\bin (or wherever you installed CMake)
  • And if you want to launch QtCreator from the command line C:\Qt\Tools\QtCreator\bin

NOTE: You can add path elements to cmd shells via Computer / System Properties / Advanced System Settings / Environment Variables. However, the make process can be sensitive to the rest of the contents of your %PATH% as well. If you encounter issues like mingw32-make immediately terminating with error code 0xc00000fd, then try stripping your path down to only the above elements, plus perhaps C:\Windows and C:\Windows\System32. You might consider running the build from a batch file that temporarily sets your %PATH% to just the required elements.

A good approach to doing so is to create the following batch file in the "C:\Qt" folder:


@echo off
echo Setting up a MinGW/Qt only environment...
echo -- Set QTDIR to C:\Qt\5.8\mingw53_32
set QTDIR=C:\Qt\5.8\mingw53_32
echo -- Set PATH to %QTDIR%\bin
set PATH=%QTDIR%\bin
echo -- Adding C:\Qt\Tools\mingw530_32\bin;C:\Qt\Tools\mingw530_32\lib to PATH
set PATH=%PATH%;C:\Qt\Tools\mingw530_32\bin;C:\Qt\Tools\mingw530_32\lib
echo -- Adding C:\Program Files (x86)\CMake\bin
set PATH=%PATH%;C:\Program Files (x86)\CMake\bin
echo -- Adding to C:\Qt\Tools\QtCreator\bin
set PATH=%PATH%;C:\Qt\Tools\QtCreator\bin
echo -- Adding %SystemRoot%\System32 to PATH
set PATH=%PATH%;%SystemRoot%\System32
echo -- QMAKESPEC set to win32-g++
set QMAKESPEC=win32-g++
rem un-rem the following line to start Qt Creator immediately
rem using /low makes sure you can still work with the PC
rem -lastsession gets you back where you left
rem start /low qtcreator -lastsession

Then create a shortcut to this batch file somewhere in the Programs menu. If starting QtCreator immediately, the shortcut can be set to "Start minimized".

(Note: if you don't want to launch qtcreator from a bat file, you can still set MAKEFLAGS to a hardcoded value directly inside of qtcreator by going to Projects->Build->"Build Environment" and adding a variable MAKEFLAGS with value "-j 4" for 4 or any number of compile threads.)


In addition to Qt, MuseScore depends on:

  • portaudio to access Windows audio
  • JACK to connect to JACK Server for MIDI and audio
  • libsndfile for wav/ogg/flac output
  • Ogg and Vorbis for support of ogg soundfonts
  • LAME for support for MP3 (only the header files)

I choose to put most of these dependencies directly in the MinGW include path. It's ugly but convenient. Either follow the below instructions or install just Jack and for the rest take and unpack it into C:\.

libVorbis, libVorbisFile, libOgg

The latest source also requires libraries for Vorbis and Ogg.

  1. Get the library files for libVorbis and libOgg from:
  2. Copy the directories: include\vorbis and include\ogg into C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include (Copy the entire directory so that you end up with C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include\vorbis and C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include\ogg)
  3. Get the Vorbis Tools and copy libogg.dll, libvorbis.dll and libvorbisfile.dll into C:\Qt\Tools\mingw530_32\lib (You need to decompress the .7z file using 7 Zip)
  1. Get portaudio.dll from a previous MuseScore install (bin directory) and copy to C:\Qt\Tools\mingw530_32\lib
  2. Get portaudio.h from the current version at and copy to C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include. You need to decompress the .tar.gz file using 7 Zip, as before.
  1. Download the Windows installer (32-bit) for JACK from
  2. Install
  3. The build process assumes you installed in a directory Jack in your program files directory. The name of the program files directory can vary depending on the version and language of Windows. The environment variable %ProgramFiles% or %ProgramFiles(x86)% is used to find the directory. On an English version of Windows this will result in looking in C:\Program Files\Jack or in C:\Program Files (x86)\Jack on a Windows 64-bit
  1. Windows binary available, choose Win32
  2. Install and go to the installation directory. The installation process is required to be run in administration mode.
  3. Copy include\sndfile.h into C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include
  4. Copy bin/libsndfile-1.dll into C:\Qt\Tools\mingw530_32\lib
  1. Download the current source files for LAME:
  2. You need to decompress the .tar.gz file using 7 Zip, as before
  3. Create a new folder in the C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include directory called lame
  4. Copy include\lame.h into C:\Qt\Tools\mingw530_32\i686-w64-mingw32\include\lame


If you wish to use the QtCreator IDE, follow the instructions in section "Qt Creator IDE", below.

Open a command line, possibly using a batch file such as qt.bat given above.
Browse to the directory where you checked out musescore

mingw32-make -f Makefile.mingw release


mingw32-make -f Makefile.mingw debug

Note that the two options internally set different flags for the compiler. In debug mode the QT_DEBUG flag is used, so conditional code controlled by #ifdef QT_DEBUG is compiled. In release mode NDEBUG is set. Unless you are building a release, it is suggested that you use the "debug" option, like in the section on the Qt Creator IDE (below).

Be patient ... On my Vista laptop (Intel T7550) it takes more than one hour to build. Build times on Windows can be more than twice as long as build times on Ubuntu (using the same computer). Once the compilation finishes, the MuseScore executable can be found in build.release/mscore/MuseScore.exe or build.debug/mscore/MuseScore.exe. So long as C:\Qt\Tools\mingw48_32\lib is in the PATH, it should not be necessary to copy any DLLs. However, it has been found necessary to copy the complete directories iconengines and imageformats from %QTDIR%\plugins to the build.release/mscore or build.debug/mscore directory (resulting in, for example, build.debug/mscore/iconengines. This should be sufficient for most development work.

Note: You may need to go into the preferences, and fix the paths to have Windows-style slash characters (backslash), or you may see error messages about not being able to open files. [Is this a bug?]

If you need the language files, instrument list, templates, and the normal directory structure of a installed version of MuseScore then type:

mingw32-make -f Makefile.mingw install

or, for a debug build:

mingw32-make -f Makefile.mingw installdebug

Once install has finished look in the current directory for win32install/bin/MuseScore.exe. In this case there is no need to copy DLLs or the plugins directories, as they are already copied during the make process.

Qt Creator IDE

Note: These instruction are know to work up to QtCreator 3.6.1. For instructions for QtCreator 4.x see Qt Creator 4.x compile instructions instead.

Once you setup everything above, you can open Qt Creator, either by typing start qtcreator from within a command prompt started as above, or by creating a separate batch file with start qtcreator as the last command.

Go to File => Open File or Project....

Choose CmakeLists.txt file type and open the file CmakeLists.txt from your source directory.

Now it will take you through a pathwizard:

  1. Build Location:
    For the first Cmake run, it will offer a build directory such as MuseScore-build, if MuseScore is your checkout directory. Change this to choose a build directory of MuseScore/build.qtc instead.
    Please make sure the name of your build directory does not contain spaces.
  2. Choose CMake Executable:
    Browse to where you installed CMake (i.e. C:\Program Files (x86)\CMake\bin)
  3. Run CMake:
    Then input the following arguments for CMake:

    -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_TOOLCHAIN_FILE=build/mingw32.mingw.cmake -DCMAKE_INSTALL_PREFIX=../win32install

Note: the `-DCMAKE_TOOLCHAIN_FILE=build/mingw32.mingw.cmake` is needed the first time, but leads to a warning about being unused on subsequent times...

As for the manual build, the supplementary DLLs should be found via C:\Qt\Tools\mingw530_32\lib in the PATH, so no further setting of environment variables should be required.

Before your first build or debug session, you will need to configure the Build, Deploy, and Run steps. Click Projects at left, then Build toward the top of the screen. Under Build Steps, expand the Details button and add a checkmark next to the lrelease target.
Then go back to the top of the screen and click Run. On this screen, you will first need to click Add Deploy Step. Select Make, then select install under Targets. Finally, you will need to click the Add button under Run Configuration to add a custom executable, and set it to %{sourceDir}\win32install\bin\MuseScore.exe.

To compile the debug build and start debugging go to Debug => Start debugging => Start debugging or simply click the debug icon. You have access to Qt help, completion, and debugging features!

Known problems

Note that there is a bug in the Qt Creator debugger. In some cases it will crash when a QPrinter object is instantiated ( This happens when you print (of course!).
There's a problem with the linker in Qt 5.8 and/or minGW 5.3.0, while linking MuseScore.exe it emits 10 errors of the form ".rsrc merge failure: duplicate leaf: type:...", the linking succeedes regardless and the resulting program runs just fine though, so it seems safe to ignore these errors for now. See

Fichier attachéTaille
Qt-additions.zip2.75 Mo

Qt Creator 4.x compile instructions


This page is a walkthrough for setting up MuseScore debugging with Qt Creator 4. It assumes you have completed all steps from Compile instructions (Windows - MinGW) - Git before starting.


Once you setup everything above, you can open Qt Creator, either by typing start qtcreator from within a command prompt started as above, or by creating a separate batch file with start qtcreator as the last command.

Go to File => Open File or Project....

Choose CmakeLists.txt file type and open the file CmakeLists.txt from your source directory. This will lead to a screen to start configuring the project.

Build Location

Make sure to change the build directory to be build.qtc directly under the directory of your git clone. Please make sure the name of the build directory does not contain spaces.

In the screenshot, the project was cloned into MuseScore_git, so this results in the following setting: 01_configure.png
Click on Configure Project to continue.

Build Settings

Navigate to Projects => Build & Run => Build to adjust the following two CMake settings:

DEBUG (Prior to cd19c84 for master and cba1df2 for 2.2 mind the uppercasing!)

Click on Apply Configuration Changes

On that same tab, go to Manage Kits…. Select the default kit and click the Change… button for the CMake Configuration setting. In the edit popup window, add CMAKE_TOOLCHAIN_FILE:STRING=build/mingw32.mingw.cmake or CMAKE_TOOLCHAIN_FILE:FILEPATH=build/mingw32.mingw.cmake as a new line and OK out of both popup windows.
CMake will automatically run. You'll see a spinner over the CMake settings while it does.
Note: You might get a warning from CMake about QT_QMAKE_EXECUTABLE not being used.

Scroll a bit down to the Build Steps area. Expand the Details of that area and select the lrelease target.

Run Settings

At the top of the screen, click on Run to switch to the Run Settings. We will add a Deploy Step of the type Build
If the Details for the newly created step aren't visible, expand them. Check the install target.

Finally, we have to say where the Executable can be found for the Run step (located just below the deployment step we created above). Set its value to %{sourceDir}\win32install\bin\MuseScore.exe


To compile the debug build and start debugging you can do either one of the following:
* Go to Debug => Start debugging => Start debugging
* Click the debug icon. (green arrow with bug on top of it in the bottom left of Qt Creator)
* Press F5

Parallel Build

If you have a multi-core/threading processor, compilation can be sped up significantly by allow Qt Creator to launch multiple parallel build processes. To achieve this, you can set -jnumber_of_parallel_processes in the Tool arguments for both the Build Steps as the Deployment Steps.
On a quad-core hyperthreading processor you could go up to -j8 to maximize the processor load. It might be wise to set the number to be one lower than your maximal number of processes, allowing you to perform another program while the build is running.

Compile instructions (macOS) - Git

Use these instructions to compile MuseScore master branch on MacOS 10.8+.

From revision 5b7c72a onwards, committed 9 March 2017, the development version of MuseScore (master) requires Qt 5.8 or newer and a C++11 capable toolchain.
The 2.x branches require Qt 5.4 however.

Setting the build and development environment

  1. Install the latest version of Xcode from the Mac App Store.
  2. Launch Xcode and accept the licence
  3. In Xcode, go to Preferences -> Download and install the Command line Tools. With Xcode 5, you might need to run xcode-select --install instead.
  4. Install the dependencies. If you prefer Homebrew (advised),
    $ ruby -e "$(curl -fsSL"
    $ brew install libogg libsndfile libvorbis pkg-config portaudio jack lame cmake git
  5. If you prefer MacPorts, choose the DMG of your OS and install MacPorts
    Open a terminal and enter the following (in your home):

    $ sudo port install git libsndfile pkgconfig lame portaudio jack cmake
  6. Qt 5.8 is normally shipped via an online installer, which you should use if you are running the current version of macOS. Download the open source version of Qt (not the commercial version), open the DMG and run the online installer. By default it will install Qt 5.8 in your home directory. If you want to build a 2.x version of MuseScore, you also need to make sure to check Qt 5.4.2 for installation. If you are using an older version of macOS, the Qt installer may crash at startup, so you will need to download Qt 5.8 directly. To build MuseScore 2.x on older macOS versions, you should also download Qt 5.4.2 directly.
  7. Append the following line to ~/.profile (or alternatively ~/.bash_profile if you already have it)

    and run

    source ~/.profile
  8. Clone the repository from GitHub:
    git clone git://

    If you plan to contribute to MuseScore, you can setup your own fork on GitHub and clone it instead. See the Git Workflow page.

Building MuseScore

  1. In a terminal, enter:
    cd MuseScore
  2. Set the revision SHA1 for this build
    make -f Makefile.osx revision
  3. Start the actual compilation. It takes more than one hour on a MacBook 2 GHz but it's pretty fast on a MacBook Pro Core i7 (4 to 5 minutes max).
    make -f Makefile.osx release
  4. Call the install target. The bundle is copied from the Release directory into the applebuild directory. All resources (such as help and templates) are added to it
    make -f Makefile.osx install
  5. The package step. This target calls a script derived from this one. It creates a self-contained bundle, thanks to macdeployqt, by adding and stripping the Qt libraries into the MuseScore bundle. It also adds Qt plugins, PortAudio and libsndfile. A DMG file is the result
    make -f Makefile.osx package

Debugging and developing MuseScore

If you are a developer, look at the xcode target in the makefile. It generates a xcodeproj file. You can open this xcodeproj file and use the Apple IDE for tasks such as modifying, debugging and compiling MuseScore code.


make -f Makefile.osx xcode

Then open the xcodeproj bundle in Xcode

open build.xcode/mscore.xcodeproj

In Xcode, run the ALL_BUILD scheme. It will compile all the files. Then run the install scheme. It will install the required files (fonts, images etc...) for runtime. Debug by running the mscore scheme.

If MuseScore won't start

You may get this error message on the Xcode Console when you try to run the mscore scheme:

This application failed to start because it could not find or load the Qt platform plugin "cocoa".

This mean MuseScore can't find the Qt plugins. You need to edit the mscore scheme to set the environment variable QT_PLUGIN_PATH to point to your Qt plugins directory. The default value for Qt 5.8 is:


The actual value you need to set depends on your Qt version and where you installed it earlier on. You may also need to expand the tilde (~) to it's full value /Users/<username> to point to your home directory.

If MuseScore doesn't start for any other reason then try reverting to factory settings, but make sure you revert the compiled mscore debug build rather than the official version if you have it installed.

Debugging in Xcode 5+

In Xcode 5+, you might need to uncheck “Allow debugging when using document Versions Browser” in Product-->Edit Scheme .. -->Run Otherwise --NSDocumentRevisionsDebugMode YES gets passed to MuseScore, and it doesn't know how to handle it.

In Xcode > 5, you'll find the menu item elsewhere. Product-->Scheme->Edit Scheme..
Select Run (on the left hand side), and select Options along the top of the form.
Then you'll find "Allow debugging when using document Versions Browser" in the form. Uncheck the checkbox.


The preferred way to contribute is via a Pull Request on GitHub. Patches are also welcome on the Developer Mailing List, or on the Issue Tracker.

Building a release for distribution

Dependencies built with Homebrew will not run on older versions of macOS. Here is a zip file with the dependencies as "bottles" built on Mac OS X 10.7. They can be installed with brew install {file}.tar.gz

Fichier attachéTaille
bottles_MuseScore-2.0.zip2.79 Mo
bottles-MuseScore-3.0.zip2.91 Mo

Compile instructions (Mac OS X 10.5) - SVN trunk

Here are the steps to create an universal binary from MuseScore SVN trunk.
Please note that some steps might not be required but I document them because it works on my system by following them.
These instructions have been tested on Mac Intel with Mac OS X 10.5.8.


The whole build process takes 1 hour and 30 minutes on a Macbook 2GHz. Downloading and installing all the tools and dependencies can take one hour more but it's just a one time process.
The result of the build process is a DMG file ready to be distribute and suitable for PPC and Intel on Mac OS X Tiger and Leopard.

Setup the build and development environment

  1. Install the Developer Tools from Apple. They are included with OS media. Developer Tools includes a command line svn client and Xcode, the Apple IDE. The last version for 10.5 is Xcode 3.1.4 Developer Tools.
  2. Open a terminal and in your home
    mkdir musescore
    cd musescore
    svn co mscore 
  3. Install Cmake 2.8.2. The dmg installation is ok.
  4. Install Qt SDK 4.6 from the dmg file. Choose the SDK not the Framework only download.
  5. Install macports 1.9.1. Dmg is fine as well.
  6. Configure macports to install 10.4 compliant ports by changing these lines in /opt/local/etc/macports/macports.conf
    universal_target  10.4
    universal_sysroot      /Developer/SDKs/MacOSX10.4u.sdk
  7. In a terminal, install portaudio and libsndfile with macport. Pkgconfig is also required to help cmake finding these libs.
    Note the +universal for libsndfile to generate universal binaries. It's default for portaudio apparently.

    sudo port install pkgconfig
    sudo port install portaudio
    sudo port install libsndfile +universal
    sudo port install lame
  8. Install JackOSX and copy the pkgconfig file to the good place.

    sudo cp /usr/local/lib/pkgconfig/jack.pc /opt/local/lib/pkgconfig/

Build MuseScore

  1. In a terminal, go into mscore directory
    cd ~/musescore/mscore
  2. Set the revision number for this build.
    make revision
  3. Start the actual compilation. It takes more than 1 hour on macbook 2Ghz
    make -f MakeFile.osx release

    if you are a developer, take a look to the release target in the makefile. You'll see that it generates a xcodeproj file and calls xcodebuilder to build it as a command line. Of course, you can open this xcodeproj file and enjoy the Apple IDE to modify MuseScore code, correct bugs, compile, debug etc... Patches are welcome on the dev mailing list.

  4. Call the install target. The bundle is copied from Release directory into applebuild directory. All resources (help, templates etc...) are added to it.
    make -f MakeFile.osx install
  5. Package step. This target calls a script derived from this one. It creates a self contained bundle thanks to macdeployqt by adding and stripping the Qt libraries into the MuseScore bundle. It also adds Qt plugins, portaudio and libsndfile. A dmg file is created with a nice background and well positioned icons.
    make -f MakeFile.osx package

Happy building!

Compile instructions (Linux & BSD) - Git

This guide is for compiling MuseScore from the source code for testing and/or contributing purposes. If you just want to test (and not contribute code changes) then you may find using a pre-compiled Nightly Build easier than compiling.

You shouldn't use this method to install MuseScore for everyday score editing. Instead, get the latest official release from the Downloads page. (Of course, if there's no package for your distribution then you have no choice but to compile.)

Install dependencies

Dependencies are the other programs, libraries and packages that are needed to compile and run MuseScore and its plugins. Dependencies can be:

Build dependencies
  • Needed to compile MuseScore's code but not necessarily needed to run the compiled program.
  • Needed by developers but not by end users.
Runtime dependencies
  • Needed to run the program but not necessarily needed to compile the code.
  • Needed by developers and users.
Optional dependencies
  • Could be needed at build or runtime to enable certain features.
  • If these are missing the the program can still be compiled/run but the relevant features will be disabled.
  • Most users will want these!

The exact dependencies needed, and the method for getting them, will be different for each distribution. See the relevant page for instructions specific to your distribution. (If no page exists for your distribution then try the instructions for a similar distribution and feel free to add a note to that page if the instructions worked or only required a minor adjustment to work. If the instructions require more significant changes then create a new page for your distribution.)

Get the source code

MuseScore uses Git for version control. Use these commands to get MuseScore's source code for building and testing purposes. (If you want to make changes to the code then substitute the clone URL for the URL of your own fork of MuseScore on Github, and also read Git Workflow.)

To get the latest code:

git clone git://
cd MuseScore

Note: the "git clone" command will put the code in a new folder called "MuseScore", so we use "cd" to enter the MuseScore directory. All subsequent commands in this guide should be run from the "MuseScore" directory.

To get a specific branch or tag:

# Fetch only the files required by (for example) the v2.0.2 tag:
# Note: Simply remove "--depth 1" if your git doesn't have that argument.
git clone --depth 1 git:// --branch v2.0.2
cd MuseScore

This is useful if you were forced to compile MuseScore because no package was available for your distribution, or if you are building a package. Tags are more stable than development branches so their use is recommended in this situation.

Build an executable file

Firstly, you should update the revision number that will be displayed in MuseScore's Help -> About dialog. This is useful for tracking issues so this step should be done by everyone, including package maintainers. Simply do:

make revision

If you don't already have a copy of MuseScore installed on your machine then you can compile the usual way:

# These cause conflicts if multiple versions are present and so are NOT RECOMMENDED
sudo make install

This creates an executable file /usr/local/bin/mscore which can be run by typing mscore in the terminal.

However, if you do have (or plan to have) another version of MuseScore installed (e.g. via your distribution's package manager) then you'll probably want to be able to distinguish between them, so do this instead:

# Use SUFFIX and LABEL if multiple versions are installed to distinguish between them
make SUFFIX="-self" LABEL="Self Build"
sudo make SUFFIX="-self" LABEL="Self Build" install

This creates an executable file /usr/local/bin/mscore-self which can be run by typing mscore-self in the terminal. Alternatively, you can click on the relevant icon from your desktop launcher:


The label "Self Build" allows you to distinguish your compiled version from any other versions you might have installed (e.g. official releases or nightly builds). You can set SUFFIX and LABEL to anything you want (but no spaces in SUFFIX).

Additional information

You can stop reading here if you want. The following section is not required. However, it may give you some tips about custom installation or optional post-installation tasks.

Custom installation path

Note: it is no longer necessary to use PREFIX to avoid $PATH conflicts when installing multiple versions (you can use SUFFIX and LABEL instead). Of course, you might have other reasons for using PREFIX.

If you want to install MuseScore elsewhere (not in the default location /usr/local), you can specify the path as follows:

make revision
make PREFIX=$HOME/software
make PREFIX=$HOME/software install

In this example, a local installation (only for the current user; no root privileges needed) is done. The resulting executable file is bin/mscore, located in the folder specified during build. For the above example, this gives $HOME/software/bin/mscore.

Keeping the source code up-to-date

Note: for more info about the development process with git, see Git Workflow.

The source code previously downloaded with git can be updated locally. Only new commits will be retrieved:

cd MuseScore
git pull

Note about the first command: the folder MuseScore is the one created by git and where you performed the compilation.

After updating you will need to compile again using:

# Remember to change SUFFIX and LABEL here if you set them to something else previously
make revision
make SUFFIX="-self" LABEL="Self Build"
sudo make SUFFIX="-self" LABEL="Self Build" install

'make' is clever and it will only get the compiler to compile the new files; unchanged files and files where no dependency has changed will not be recompiled, so it should be much faster than the initial compile. However, sometimes errors occur during compilation and it will be necessary to start again from scratch. To do this you must delete all of the intermediate object files (of which there are many!) that are created in the source code folder during compilation. Fortunately, there is a simple command to do this for you:

make clean

The next time you try to compile the code, it will start anew.

Note: before using make clean you should read the notes for "Uninstalling MuseScore" (immediately below).

Uninstalling MuseScore

There is a Makefile target to uninstall, so removing MuseScore is effortless:

sudo make uninstall

Obviously you must run this from within the MuseScore source code folder (created by git) where you performed the compilation.


  • You should always run make uninstall before you run make clean because it is not possible to do so afterwards.
  • When running make uninstall or make clean it is not necessary to specify any variables (PREFIX, SUFFIX, etc.) even if you specified them during compilation.

Tools for editing and debugging

MuseScore is a sophisticated program made up of millions of lines of code split among thousands of files. Although it is possible to edit the code in any text editor and build from the command line, there are specialised tools to make the challenge of coding and spotting errors in such a huge project much easier to manage:

Qt Creator IDE - method 1

This is the normal way (but not necessarily the best way) to configure Qt Creator for a CMake project.

  • If you haven't already, checkout MuseScore's code using Git (see main compilation guide above).
  • Within Qt Creator, open ./CMakeLists.txt as your project file.
  • When QT Creator asks for command line options for cmake, use
    -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=DEBUG
  • When QT Creator asks to Choose CMake Executeable, it's probably located at

The advantage of method 1 is that Qt Creator will do most of the setup and configuration for you. The disadvantages are that it makes it more difficult to compile MuseScore from the Terminal should you need to do so, and the CMake configuration can break from time-to-time when MuseScore's CMakeLists.txt is changed. This method also does not properly "install" MuseScore, so certain features will be unavailable (e.g. the SoundFont).

Qt Creator IDE - method 2

This method bypasses Qt Creator's built-in handling of CMake and simply specifies some Terminal commands to build and run MuseScore. This makes it easier to build MuseScore outside of Qt Creator and ensures that you always use an up-to-date CMake configuration. This method properly installs MuseScore so all features are available for testing.

  • If you haven't already, checkout MuseScore's code using Git (see main compilation guide above).
  • Add these lines to .git/info/exludes so that Git will ignore Qt Creator project files:

    Note: the ".git" folder is hidden by default on Linux.

  • Within Qt Creator, go to File -> New File or Project
  • Select "Import Project" and "Import Existing Project". Click "Choose".
  • Name: "MuseScore", location: "~/src/MuseScore" (or wherever the Git repo is on your system). Click "Next".
  • Leave the suggested file selection as it is and click "Next".
  • Add the project to Git version control and click "Finish".
  • Now click the "Projects" button on the left side of the Qt Creator window and modify the build and run configurations as follows:

Build settings

Build directory: ~/src/MuseScore

Build steps:
    make revision
    make installdebug PREFIX=install SUFFIX=-qt LABEL="QtCreator Build" UPDATE_CACHE=FALSE

Clean steps:
    make uninstalldebug
    make clean

Build environment: Use System Environment and set:

Run settings

Executable: build.debug/install/bin/mscore-qt
Working directory: %{buildDir}

Using the Makefile means that you always use the same build configuration as Travis. If the CMake options are changed by a PR then your configuration is updated automatically when you fetch and merge the changes from upstream.

Eclipse CDT

  1. Download Eclipse CDT bundle or install the CDT on a previous eclipse install.
  2. Edit ./CMakeLists.txt and change Project name to something different than "mscore" (if not, Eclipse will not find the mscore binary to run)
  3. Create a musescore_build directory in the workspace and run Cmake to generate Eclipse project
    mkdir musescore_build
    cd musescore_build
    cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../MuseScore
  4. Open Eclipse.
    • Import project using Menu File->Import
    • Select General->Existing projects into workspace
    • Browse where your build tree is and select the root build tree directory. Keep "Copy projects into workspace" unchecked.
    • You get a fully functional eclipse project. Be patient, Eclipse will index all cpp files and build the project.
  5. To debug, right click on the project and choose Debug as -> Local C/C++ Application
  6. Go to debugger tab, share libraries tab and uncheck Load shared library symbols automatically and Stop on shared library events
  7. You should be able to debug.
  8. If you lack sound, in Preferences->I/O, you can try to check PortAudio, APi: Alsa, Device: Pulse
  9. More information:

Compile instructions (Ubuntu 12.04) - Git

This page contains only the compilation instructions that are specific to Ubuntu 12.04 LTS.

Tested working on: Ubuntu 12.04 LTS Desktop and Server editions.

Install dependencies

Install GCC 4.8+

GCC 4.8 or higher is needed. On Ubuntu 12.10 and higher, it's the default compiler. On Ubuntu 12.04, you will need to install it.

sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get  update
sudo apt-get install g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

Install Qt 5.3.2

Download and install Qt 5.3 from
Add Qt bin directory in your $PATH.

For 32-bit:

echo "PATH=~/Qt5.3.2/5.3.2/gcc/bin:$PATH" >> ~/.bashrc
source  ~/.bashrc

or for 64-bit:

echo "PATH=~/Qt5.3.2/5.3.2/gcc_64/bin:$PATH" >> ~/.bashrc
source  ~/.bashrc

Install remaining dependencies

sudo apt-get install git cmake
sudo apt-get install alsa libsndfile1 
sudo apt-get install libasound2-dev portaudio19-dev libsndfile1-dev zlib1g-dev libfreetype6-dev
sudo apt-get install lame libmp3lame-dev
sudo apt-get install libssl-dev

In Ubuntu 13.04 you need to install these additional libraries:

sudo apt-get install libdrm-dev libgl1-mesa-dev

Note: In some cases, libgl1-mesa-dev(and/or libegl1-mesa-dev) needs to be installed in Ubuntu 12.04 desktop edition too. Install this library if you get the following error while making:

Failed to find "GL" in "".


sudo apt-get install libpulse-dev
sudo apt-get install doxygen

Get the source code and compile

Now follow the generic instructions for compiling on Linux.

Compile instructions (Ubuntu 9.10) - SVN trunk

This page is deprecated and kept for reference. The current development of MuseScore is done on Git and the SVN repo is abandoned. You can find instructions to build the most up to date version in the developer handbook

The following steps explains how to build and install MuseScore trunk on Ubuntu 9.10 Karmic Koala.
These instructions have been tested on a clean Ubuntu server distrib.

Qt 4.7 PPA: deb lucid main

Setup build environment

  1. Update your repository sources.
    sudo apt-get update
  2. Install Subversion
    sudo apt-get install subversion
  3. Get MuseScore last source code
    mkdir musescore
    cd musescore
    svn co .
    cd ..
  4. Get Qt 4.6. This is only necessary if you are running Ubuntu Karmic without any mscore PPA. Otherwise, skip the next (four) steps until "Install MuseScore dependencies" below.
    If you are running a 32-bit OS
    chmod a+x qt-sdk-linux-x86-opensource-2010.05.1.bin

    If you are running a 64-bit OS
    chmod a+x qt-sdk-linux-x86_64-opensource-2010.05.1.bin
  5. Install Qt4.6. User home is fine. Install everything
    If you are running a 32-bit OS
    If you are running a 64-bit OS
  6. Put qmake in the $PATH
    Append the following to ~/.bashrc
    if [ -d ~/qtsdk-2010.05/qt/bin ] ; then

    Then run
    source .bashrc
  7. As written at the end of Qt installation process, install Qt dependencies
    sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev

Install MuseScore dependencies

sudo apt-get build-dep musescore

If this magic command doesn't work, try to install the following dependencies manually:

  1. ALSA
    sudo apt-get install alsa
    sudo apt-get install libasound2-dev
  2. Libsndfile for flac, ogg, wav export
    sudo apt-get install libsndfile1
    sudo apt-get install libsndfile1-dev
  3. Portaudio (optional)
    sudo apt-get install portaudio19-dev


Type the following to compile and install MuseScore. It will take quite some time to compile. On a 1.7Ghz CPU, it takes more than an hour.
cd musescore
make revision
make release
sudo make install

Further upgrades

Are easier... Use the update subcommand of svn and don't forget make revision to have the right revision number in the about box.
If the build environment didn't change (Qt version etc...), type the following

svn update
make revision
sudo make install

If you want to build from scratch :
cd musescore
svn update
make clean
make revision
make release
sudo make install

Debug with Eclipse CDT

  1. Download Eclipse CDT bundle or install the CDT on a previous eclipse install.
  2. Check out MuseScore code from SVN in Eclipse into a directory named "musescore". You'll need a source tree linked to SVN in your workspace to get updates.
  3. Edit mscore/CMakeLists.txt and change Project name to something different than "mscore" (if not, eclipse will not find the mscore binary to run)
  4. Create a musescore_build directory in the workspace and run Cmake to generate Eclipse project
    mkdir musescore_build
    cd musescore_build
    cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../musescore
  5. Open Eclipse.
    • Import project using Menu File->Import
    • Select General->Existing projects into workspace
    • Browse where your build tree is and select the root build tree directory. Keep "Copy projects into workspace" unchecked.
    • You get a fully functional eclipse project. Be patient, Eclipse will index all cpp files and build the project.
  6. To debug, right click on the project and choose Debug as -> Local C/C++ Application
  7. Go to debugger tab, share libraries tab and uncheck Load shared library symbols automatically and Stop on shared library events
  8. You should be able to debug.
  9. If you lack sound, in Preferences->I/O, you can try to check PortAudio, APi: Alsa, Device: Pulse

More information:

Qt Creator IDE

  • open mscore/CMakeLists.txt as your project file.
  • when QT Creator asks for command line options for cmake, use
    -G"Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ../mscore

Compile instructions (Ubuntu) - 0.9.3

Here are the required steps for compiling 0.9.3 on Ubuntu 8.04 Hardy:

First install the required dependencies (if you do not already have them)

sudo apt-get build-dep mscore

Download the source from Sourceforge, uncompress, compile and install :

bunzip2 mscore-0.9.3.tar.bz2
tar xf mscore-0.9.3.tar
cd mscore-0.9.3


[go drink a coffee until it's finished]

cd build
make lupdate
make lrelease
sudo make install

the revision of cmake coming with ubuntu (currently 2.4) may be not sufficient. To build mscore cmake rev. 2.6 is required.
Set the following two variables in mscore/CMakeLists.txt to false;

set(BUILD_SCRIPT_INTERFACE false) # this requires qt >= 4.4 && cmake 2.6

To set

set(QT45 false) # set to true if you use qt >= 4.5.0

may be also helpful.

Compile instructions (Ubuntu 14.10) - Git

This page contains only the compilation instructions that are specific to Ubuntu and related Debian-based distributions.

Tested working on: Ubuntu 14.04 LTS and Ubuntu 16.04 LTS

It should also work with the various Ubuntu flavours, including Ubuntu MATE, Ubuntu Studio, Kubuntu and Xubuntu, etc.
It should work on derivatives such as Linux Mint, and it may also work on the corresponding Debian and Debian-derived distributions like Raspian.

Install dependencies

Recent distributions have up-to-date versions of most of the necessary packages are in the default repositories.

sudo apt-get install git cmake g++
sudo apt-get install libasound2-dev portaudio19-dev libmp3lame-dev libsndfile1-dev libportmidi-dev
sudo apt-get install libssl-dev libpulse-dev libfreetype6-dev libfreetype6

If you get an error message like this while compiling:

Failed to find "GL" in "".

Then try installing these additional libraries:

sudo apt-get install libdrm-dev libgl1-mesa-dev libegl1-mesa-dev

Important Note: It is now necessary to install Qt 5.8, or later

MuseScore uses Qt to achieve a consistent look and feel across different platforms (Mac, Windows & Linux). Qt is updated more frequently than any other dependency. Having an out-of-date version of Qt is the most common cause of problems as far reaching as strange window behaviour, keyboard shortcuts not working, or the code failing to compile outright.

If your repository has Qt version 5.8, or later, you can get Qt from your repository:

sudo apt-get install libqt4-dev qtbase5-dev qttools5-dev qttools5-dev-tools qtquick1-5-dev \
qtscript5-dev libqt5xmlpatterns5-dev libqt5svg5-dev libqt5webkit5-dev

If your repository does not have 5.8, or later then follow these steps to install it:
(Note that having two different versions of Qt installed can cause difficulties. If you installed using "apt-get install" above, then you may want to remove that before following these steps.)

  1. Download the latest version of Qt (currently 5.8) from The file you download is actually an installation script called something like "". (It will be called something different for 32-bit machines).
  2. Move the installer (file you downloaded) to your Home directory and open a terminal window (Ctrl+Alt+T on Ubuntu).
  3. Give the installer execute permissions:
         sudo chmod +x
  4. Run the installer ("sudo" is not required if you choose to install to your Home directory in Step 5):
         sudo ./
  5. Follow the installation wizard and write down the installation directory (default: "/opt/Qt". You can choose somewhere else if you want but make sure it doesn't have spaces anywhere in the path). Finish the install.
  6. In your file browser, navigate to the installation directory and find the path to the Qt "bin" directory. (Mine is "/opt/Qt/5.8/gcc_64/bin". This will be different on different machines.)
  7. Add the "bin" directory to your $PATH environment variable so that MuseScore knows where it is. (Modify the following command with the correct path as appropriate.):
         echo 'export PATH=/opt/Qt/5.8/gcc_64/bin:$PATH' >> ~/.bashrc
  8. Load your new $PATH variable.
         source ~/.bashrc

You can check the Qt installation and version by typing "qmake -version" in a terminal.

If you experience any problems with MuseScore, first check you have the latest copy of the MuseScore source code, and then check you have the latest copy of Qt. Only once you have confirmed this (and done the same for the other dependencies) should you consider creating a bug report in the issue tracker.

Compiling the code

Now follow the generic instructions for compiling on Linux.

The remaining steps on this page are optional. Read them if you experience problems or wish to completely uninstall MuseScore and it's dependencies.

Uninstall dependencies

Remember all the packages installed previously in order to compile MuseScore? Actually, even more were installed because each installed package has its own dependencies. If you don't want them anymore, here's how to remove them.

When you proceed with the installation, apt-get outputs in the terminal the complete list of packages that are to be installed. If you copy this list, the packages can be easily removed later with this command:

sudo apt-get remove --purge LIST

If you did not copy this output and still want to remove all the packages, it's a little more complicated but still feasible. For each command entered, for example:

sudo apt-get install git cmake g++

an entry is added in the following log file: /var/log/apt/history.log. Open it with a text editor and find the relevant entry. Example:

Commandline: apt-get install git cmake g++
Install: libstdc++-4.9-dev:amd64 (4.9.1-15ubuntu1, automatic), libc-dev-bin:amd64 (2.19-10ubuntu1, automatic), g++:amd64 (4.9.1-4ubuntu2), g++-4.9:amd64 (4.9.1-15ubuntu1, automatic), liberror-perl:amd64 (0.17-1.1, automatic), git-man:amd64 (2.1.0-1, automatic), git:amd64 (2.1.0-1), cmake:amd64 (, cmake-data:amd64 (, automatic), linux-libc-dev:amd64 (3.16.0-16.22, automatic), libc6-dev:amd64 (2.19-10ubuntu1, automatic)

Text that must be copied follows the key Install:

libstdc++-4.9-dev:amd64 (4.9.1-15ubuntu1, automatic), libc-dev-bin:amd64 (2.19-10ubuntu1, automatic), g++:amd64 (4.9.1-4ubuntu2), g++-4.9:amd64 (4.9.1-15ubuntu1, automatic), liberror-perl:amd64 (0.17-1.1, automatic), git-man:amd64 (2.1.0-1, automatic), git:amd64 (2.1.0-1), cmake:amd64 (, cmake-data:amd64 (, automatic), linux-libc-dev:amd64 (3.16.0-16.22, automatic), libc6-dev:amd64 (2.19-10ubuntu1, automatic)

To remove these packages:

sudo apt-get remove --purge $(echo "TEXT COPIED ABOVE" | sed -r 's/\s\([^\)]+\),?//g')

IMPORTANT: by doing so, you may remove some Qt packages needed to run MuseScore. The following command should ensure that you have all that is required:

sudo apt-get install libqt5core5a libqt5gui5 libqt5network5 libqt5xml5 libqt5xmlpatterns5 \
libqt5svg5 libqt5printsupport5 libqt5webkit5

Note about lrelease

When we invoke make, a call to the executable lrelease is done during the process. However, it's not the command /usr/bin/lrelease from the package qtchooser but the one from qttools5-dev-tools. That's why the package qttools5-dev-tools is added in the list of dependencies to install. If it was not installed, the following error would occur during the make invocation:

make[4]: Entering directory '/path/to/MuseScore/build.release'
/bin/sh: 1: /usr/lib/x86_64-linux-gnu/qt5/bin/lrelease: not found
CMakeFiles/lrelease.dir/build.make:49: recipe for target 'CMakeFiles/lrelease' failed
make[4]: *** [CMakeFiles/lrelease] Error 127
make[4]: Leaving directory '/path/to/MuseScore/build.release'

and the following during the make install invocation:

CMake Error at share/locale/cmake_install.cmake:36 (FILE):
  file INSTALL cannot find
Call Stack (most recent call first):
  share/cmake_install.cmake:43 (INCLUDE)
  cmake_install.cmake:45 (INCLUDE)

Makefile:62: recipe for target 'install' failed
make[1]: *** [install] Error 1
make[1]: Leaving directory '/path/to/MuseScore/build.release'
Makefile:92: recipe for target 'install' failed
make: *** [install] Error 2

Compile instructions (Fedora) - Git

This page contains only the compilation instructions that are specific to Fedora and related RPM-based distributions.

Tested working on: Fedora 21 and 22

Install dependencies:

# Note: Use "yum" instead of "dnf" on older systems.
sudo dnf install -y gcc gcc-c++ qt-devel pulseaudio-libs-devel alsa-lib-devel jack-audio-connection-kit-devel qt5-qtbase-devel qt5-qttools-libs-designercomponents qt5-qttools-devel portaudio-devel poppler-qt5-devel qt5-qtdeclarative-devel qt5-qtscript-devel qtermwidget-qt5-devel qt5-qtwebkit-devel qt5-qtxmlpatterns-devel qt5-qtquick1-devel qt5-qtsvg-devel qt5-qttools-devel qt5-qttools-static lame-devel libsndfile-devel freetype-devel texlive-scheme-basic qt5-qtwebengine qt5-qtwebengine-devel

Now follow the generic instructions for compiling on Linux.

Compile instructions (Fedora 20) - Git

Fedora 20 is deprecated and this page kept for reference only. You can find instructions to build the most up to date version in the developer handbook

Add the nonfree repository to yum, then:

sudo yum install qt5-qtwebkit-devel.x86_64 qt5-qtxmlpatterns-devel.x86_64 qt5-qtsvg-devel.x86_64 alsa-lib-devel.x86_64 jack-audio-connection-kit-devel.x86_64 portaudio-devel.x86_64 pulseaudio-libs-devel.x86_64 libsndfile-devel.x86_64 libvorbis-devel.x86_64 qt5-qttools-devel.x86_64 cmake.x86_64 cmake-gui lame-devel.x86_64

Or build lame from source and remove lame-devel from the yum install.

Change to the extracted or git cloned source directory, then:

  1. Run cmake
    I use cmake-gui to configure and generate, but cmake command line works also, if you're familiar with it.
  2. ./configure
  3. make release
  4. sudo make install

Finding your way around


Manual libmscore testing

MuseScore can run a series of tests for libmscore (i.e. the non-gui components of MuseScore). Instructions at

inside terminal

To run all tests in a linux terminal, run the following from your MuseScore git directory:

make debug && sudo make installdebug && cd build.debug/mtest && make && ctest

inside qtcreator

If want to run a particular test inside qtcreator's debugger, first configure the test deployment Build settings:

  1. click the "Project" tab in the panel on the left edge of the qtcreator window
  2. in the drop-down menu for "Edit Build Configurations" under "Build Settings", select "test"
  3. under "Build Steps", click details
  4. select only the particular module in "Targets" that you want to debug


then run your test deployment:

  1. in the bottom left corner of qtcreator window, click the computer icon (which controls deployment)
  2. select "Build" type as "Test"
  3. select the particular test program to Run, in this case "tst_barline"
  4. press the "Start debugging" button (the green triangle with a blue bug on it), or press "F5"


Automated libmscore testing

Currently any pull requests to will automatically get tested by Travis-CI, which will report the result of the test to that pull request page on github (and also send an email to core dev team if the test failed). If you would like to utilize Travis-CI to test your own branches before you submit a PR (to make sure your changes will pass in the same environment that Travis-CI runs), then read the MuseScore "Git Workflow" page subheading "Run-tests-on-personal-Travis"

Automated GUI testing

MuseScore does not yet have any automated GUI tests set up. Below are some notes to help keep track of some possible options.

Ubuntu / Linux


Cross platform

  • Systir. Tests written by hand in Ruby.

Exploring code and data structures

How to get started

After you have downloaded a Nightly Build or made you own version, you are ready to explore data structures and code.

In a score right click on a note or any other item and select "Object Debugger" from the right-click menu. This will give you an opportunity to explore the data structures.

Also, there is "Edit → Debugger", that lets you explore the data in a score.

Note: that debugger nowadays is only enabled when running MuseScore in 'experimental' mode, i.e. using the -e option, see also Command line options

Getting started in the source tree

The main part of the code lives in mscore/mscore and mscore/libmscore. A good point to start exploring is mscore/mscore/musescore.cpp. This is also where the main() function is located. In MuseScore::cmd commands are processed. Most commands that modify the score are passed off to ScoreView::cmd in scoreview.cpp.

If you put a breakpoint in ScoreView::cmd, you can find and then step into the function that processes a specific command.

Commands like cut, copy, paste are posted as a new event right at the start of ScoreView::cmd. These events are then processed in ScoreView:normalCut, ScoreView:normalCopy, ScoreView:normalPaste. The paste execution ends up in mscore/libmscore/cmd.cpp Score::cmdPaste. Note that copy and paste put content onto the clipboard through the interface provided by Qt (in ScoreView::normalCopy()).

Quite a few commands, like changing the duration of a note, are handled right at the end of this function where _score->cmd() is called.

In mscore/libmscore you find the source for the various classes and the layout algorithm. If you sort the directory by file size, you'll easily spot where most processing is done: measure.cpp, score.cpp, cmd.cpp, undo.cpp., layout.cpp. edit.cpp and chord.cpp.

Finding crashes

Crashes are annoying to users and don't shed a good light on the software. Generally, all crashes are classified as "critical" bugs in the issue tracker.

Crashes can be divided into two categories. Program errors where the operating system stops the further execution of a program, because the program has attempted to perform an illegal operation (for example a reference through a null pointer, accessing an non-allocated address or even a divide by zero). The other category is where the program logic tries to detect invalid conditions. That can either be in the MuseScore application code, or in the underlying Qt runtime. Qt provides a macro Q_ASSERT (). If during program execution the condition isn't met, a message is printed to the console (with qFatal) and the execution is aborted with abort(). The Qt runtime internally uses Q_ASSERT; MuseScore application code uses both Q_ASSERT and abort(), typically after printing a debug message to the console with (qDebug or qFatal). In Windows, that looks like this:

The crashes in the first category are usually easy to find. The debugger will just stop and show you the location of where the exception occurred in the call stack. You then inspect the program logic. If no apparent solution springs to mind, you report your analysis in the issue tracker.

Crashes in the second category are harder to find. Since MuseScore application code uses abort() in various places, you need to look at the debug message, and then search through the source to locate the abort(). This bug calls for the removal of direct use of abort () to facilitate the use of the next option. This option is to place a breakpoint in the message handler (see below). To catch an abort caused by Q_ASSERT, trapping the message handler can be the only way to breakpoint before the crash, since the Q_ASSERT can come from within the Qt runtime and it may not be possible to use a breakpoint.

On Windows in more recent Qt versions, the Qt runtime abort () no longer activates the debugger, so the program just aborts without giving the developer the opportunity to inspect the call stack. Regarding this, we read in a Qt forum: If somewhere in the code a Q_ASSERT() evaluates false, the application is stopped with an info, where the Q_ASSERT() is and what expression evaluates false. If the application was run with a debugger, debugger is also stopped. If the developer wants to inspect a call stack, he must call qInstallMsgHandler() with a new MsgHandler, set a breakpoint in it and reproduce the bug.

Such a message handler already exists - it is located just before the main() function in mscore/mscore/musescore.cpp. Set your breakpoint where indicated in the code. The message handler is also useful, if you see debug output (printed via qDebug) and want to find out where it originates.

Git workflow

The development of MuseScore uses GitHub to host the code and manage the collaboration of developers. GitHub is based on git, a popular SCM, initially designed and developed by Linus Torvalds for Linux kernel development.

If you're a developer who wants to work on the MuseScore source code and submit your changes to be merged into the main code, here's how. Thanks to Diaspora for their developer guide, which inspired this one.

Git references

Suggested workflow

If you don't have an account on GitHub, create one for free first. Also make sure you set up git on your computer. It's recommended to use SSH to access your own git fork.

This workflow is a command line workflow. If you prefer using a UI, GitHub also provides a UI tool for Mac and Windows that can automate some of the following operations.


  1. Fork on GitHub (click Fork button)
  2. Clone to computer, use SSH URL ($ git clone
  3. Don't forget to cd into your repo: ($ cd MuseScore/)
  4. Set up remote upstream ($ git remote add upstream git://
  5. Create a branch for new issue ($ git checkout -b 404-new-feature)
  6. Develop on issue branch. [Time passes, the main MuseScore repository accumulates new commits]
  7. Commit changes to your local issue branch. ($ git add . ; git commit -m 'commit message')
  8. Fetch upstream ($ git fetch upstream)
  9. Update local master ($ git checkout master; git merge upstream/master)
  10. Rebase issue branch ($ git checkout 404-new-feature; git rebase master)
  11. Repeat steps 6-11 until dev is complete
  12. Push branch to GitHub ($ git push origin 404-new-feature)
  13. Start your browser, go to your Github repo, switch to "404-new-feature" branch and press the [Pull Request] button

After having made a Pull Request don't pull/merge anymore, it'll mess up the commit history. If you (have to) rebase, use 'push --force' ($ git push --force) to send it up to your GitHub repository, this will update the PR too. Be careful not to do this while the core team is working on merging in your PR.

Note (to non-UNIX users): the "$ " of the commands mentioned throughout this page is (meant to be) the shell prompt and as such not to be typed in, your actual shell prompt may look different.

Fork MuseScore repo to your own account

This will create a copy of MuseScore repository to your own account. To fork, press the fork button in the top right corner on MuseScore GitHub page.

Clone your GitHub fork to your computer

Run a clone command against your GitHub fork. It will look something like this, except that it will use your GitHub account name, instead of "<you>":

$ git clone<you>/MuseScore.git
$ cd MuseScore

This command downloads your copy of MuseScore to a git repository on your development machine. Change directory into the new MuseScore directory.

To build MuseScore, you will need to install dependencies, and run the build process. Check the instructions for your platform in the developer handbook.

Note that the git clone command is using SSH in this case. You need to have SSH set up on your machine. A git:// URL would not work for your local fork, you will not be able to push on it. Alternatively you can use the HTTPS URL.

If you already cloned MuseScore main repository with

$ git clone git://

You can change the remote url of the origin to your fork with

$ git remote set-url origin

Choose something to work on

If you don't have a feature in mind, check out the issue tracker, or come ask in IRC (#musescore on

Create a topical development branch

Before you start working on a new feature or bug fix, create a new branch in your local repository that's dedicated to that change. Name it by issue number (if applicable) and description. For example, if you're working on issue #78359, a slur layout problem, create a new branch called 78359-slurlayout, like this:

$ git checkout -b 78359-slurlayout

Write some code!

We are able to offer much help here :). If you can, provide some tests. See the mtest directory.
When you have got something working, commit the changes to your branch on your local Git repo. Firstly add the files you want to commit, and then commit. Don't forget to put a meaningful message. Use git status and git diff to see which files can be added and committed.

$ git status
$ git status <filename>
$ git add <filenames>
$ git commit -m 'fix #78359: Some kind of descriptive message' 

If your commit message starts with fix #xxxxx, with xxxx the issue number in the issue tracker, the issue will be marked as fixed automatically when your commit is pushed in the main repository.

Keep your repo up to date with the main repo

In order to get the latest updates from the main repository, do a one-time setup to establish it as a remote by entering:

$ git remote add upstream git://

The main repo will be now known as upstream. Your fork is known as origin. The origin remote is automatically created after cloning your GitHub fork to your computer.

To verify that you have two remotes, you can type:

$ git remote

Rebase your branch on the latest upstream

To keep your development branch up to date, rebase your changes on top of the current state of the upstream master.

# get the changes from upstream
$ git fetch upstream
# switch to your local master branch
$ git checkout master
$ git rebase upstream/master
# switch to your topical branch
$ git checkout 78359-slurlayout
# make sure all is committed as necessary in branch before rebasing
$ git rebase master

Rebase will put all your commits in the branch on hold, get the last changes, and apply your commits on top of it. You might need to resolve conflicts if you changed a file that has been changed in the main repo. To do so, edit the files, then:

$ git add <filename>
$ git rebase --continue

Another (and shorter) way to update your development branch is $ git pull --rebase upstream master. Should you have changes that are not yet commited to your branch, use $ git stash before the rebase and $ git stash pop after.

Send your changes to MuseScore

When you are ready to send your modified code to MuseScore, push your branch in your origin remote.

$ git push origin 78359-slurlayout

Then do a pull request to MuseScore on GitHub. Go to your GitHub page, select the branch on the left, and press the Pull Request button at the top. Choose your branch, add a comment and submit your pull request. If you are fixing an issue from the tracker, set the issue's status to "patch (code needs review)" with a link to your pull request on GitHub. One of the developers with push rights on the main repo will merge your request ASAP. Important: If you haven't signed the MuseScore CLA yet, do this first as it's a requirement for your pull request to be accepted.

After having made a Pull Request don't pull/merge anymore, it'll mess up the commit history. If you (have to) rebase, use 'push --force' ($ git push --force) to send it up to your GitHub repository, this will update the PR too. Be careful not to do this while the core team is working on merging in your PR.

Advice & tips

Don't use git commit -a

$ git commit -a

This will perform git add for all unstaged files and commit. You probably don't want to do that. It's better to use git status and add files invidually before committing.

Delete a branch

To delete a local branch:

# will first check if the branch has been merged
$ git branch -d bugfix
# will delete the branch authoritatively
$ git branch -D bugfix

To delete a remote branch:

$ git push origin :newfeature

Squash your commits

Once you made a pull request, you might be asked to squash your commits together. For example, you might have created several commits to fix a single issue or to develop a single feature and it doesn't make sense to keep all these commits in the MuseScore repository history. You can follow this guide to use rebase to squash your commits.

Create and apply a patch

It's better to contribute with a pull request than a patch but if you need to make a patch for any reason here is how.
You have created a local branch with the following command, made some changes and commit locally one or more times.

$ git checkout -b 404-new-feature

To create a patch against the master branch, run

$ git format-patch master --stdout >  404-new-feature.patch

To apply the resulting patch,

# get stats about the patch without applying it
$ git apply --stat 404-new-feature.patch
# check if the patch can be applied without problem
$ git apply --check 404-new-feature.patch
# apply the patch
$ git am --signoff < 404-new-feature.patch 

Test someone else's branch

$ git checkout -b <branchname> master
$ git pull git://<someoneelse>/MuseScore.git <branchname>

Fetch all PRs submitted to upstream

If add this string to your MuseScore/.git/config under section [remote "upstream"]:

fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*

Then whenever you fetch upstream, git will fetch all PRs submitted to musescore. Then you can easily checkout by PR number ####:

$ git checkout upstream/pr/####

Fix multiple issues in single commit

If a commit fixes multiple issues, then include each issue number in the commit message, e.g.:

"fix #xxxxx, fix #yyyyy, fix #zzzz: message"

so that the issue tracker will update each issue and set their status to fixed.

Run tests on personal Travis

The musescore development infrastructure uses Travis Continuous Integration to run tests on every commit and PR submitted the upstream MuseScore repository, but now you can utilize Travis infrastructure for your own person github branches.

  1. Go to and create an account using your github account
  2. synchronize repositories with your github (should import all your github repos)
  3. enable the github->travis build hook for MuseScore in by turning on the switch next to username/MuseScore
  4. click the gear button (or go to to configure following settings for this repo
    1. enable travis setting for "build pushes"
    2. optional: add environment variable NOTIFICATION_EMAIL and set to your email address, if you want to get an email when the build completes

Now whenever you push to your github, it will trigger the .travis.yml script, and you can see the the status of the build at At this point, will just run tests, but if you would like to also produce a Linux AppImage, follow these next instructions to utilize Bintray:

Upload AppImages to personal Bintray

The above steps to run Travis builds actually also create a portable AppImage so you can test out your commits on (almost) any Linux machine. But are a few more things you need to configure in order for Travis to be able to upload the AppImages to Bintray.

  1. complete the steps above to run tests on personal Travis
  2. goto and create an account using your github account
  3. in settings for repository, create a new "generic" repository named "MuseScoreDevelopment" (this is where the AppImages will be uploaded to)
  4. goto, click on API key
  5. generate a bintray API key and copy to clipboard
  6. goto and add following environment variables:
    1. BINTRAY_API_KEY with value you paste from your clipboard
    2. BINTRAY_USER set to whatever your bintray user name is (should be same as github username if created travis & bintray accounts from github)
    3. APPIMAGE_UPLOAD_BRANCHES set to a list of branches (separated by spaces) that you want to upload builds for (or use the magical string "ALL" to upload builds from all branches).
    4. APPIMAGE_BUILD_ARCHS set to a list of cpu architectures, e.g "x86_64 i686 armhf" (enclosed in quotes), to build AppImages for.

Now try adding a commit to one of the branches you listed in APPIMAGE_UPLOAD_BRANCHES, and wait ~20 minutes. If an AppImage isn't uploaded, look at the bottom of the logs your most recent Travis-ci build jobs for upload sub-jobs.

These AppImages will be useful to share with anyone who you want to test our your new feature or bug fix! Please post the link as a comment to your PR, so other devs can easily try it out and provide feeback!

MuseScore coding rules

Note: This document is work in progress.

The coding rules aim to guide MuseScore developers in writing understandable and maintainable code, whilst minimizing confusion and surprise.

As usual, rules are not set in stone. If you have a good reason for breaking one, firstly, make sure that at least some other developers agree with you, especially if they are working on the same part of the codebase.

Submitting code

To submit code to MuseScore main repository, you need to sign the Contributor License Agreement. Your contribution can be a patch, or pull request, and should obey the following rules.

File format

  • All code is UTF8, only ASCII to be used in C++ code for max. portability.
  • Use UNIX linefeed.

Coding style

For historical reasons, MuseScore uses a special indenting scheme close to the Banner style. Take a closer look of the examples above to become familiar with it - particularly, the use of braces.

If you are using QtCreator, you can download and then import qt2-musescore.xml via Projects / Code Style / Import... to automate many of the behaviors described below.

Indentation & whitespaces

  • Use six (6) spaces for indentation, no tabs.
  • Use blank lines to group statements together where suited.
  • Always use only one blank line.
  • If a multiline conditional is required, use 3 spaces from the 2nd line on.
Pointers and references

For pointers or references, always use a single space after an asterisk (*) or an ampersand (&), but never before. Avoid C-style casts when possible:

char* blockOfMemory = reinterpret_cast<char*>(malloc(data.size()));
char *blockOfMemory = (char *) malloc(data.size());

Of course, in this particular case, using new is an even better option.

Operator names and parentheses

Do not use spaces between operator names and function names. The equation marks (==) are a part of the function name, and therefore, spaces make the declaration look like an expression:

operator == (type)
Binary operators

Use a space before and after every binary operator, except no spaces around "->", and only a space after ",":

for (int i = 0; i < firstScore->excerpts().count(); i++)
for (int i=0; i<firstScore->excerpts().count(); i++)
Expressions in parentheses

Do not put a space after opening parenthesis. Do not put a space before closing parenthesis:

( expression )
Function names and parentheses

Do not use spaces between function names and parentheses:

void mangle()
void mangle ()

Always use a single space after a keyword, and before a curly brace:

if (foo) {


As a base rule, place the left curly brace on the same line as the start of the statement and indent the closing one. This is know as Banner style indentation.

if (codec) {
if (codec)

Exception: Function implementations always have the left brace on a new line and indented. Class declarations don't.

static void foo(int g)
      qDebug("foo: %i", g);
class Moo {

Use curly braces when the body of a conditional statement contains more than one line, and also if a single line statement is somewhat complex. Otherwise, omit them:

if (address.isEmpty())
      return false;
for (int i = 0; i < 10; ++i)
      qDebug("%i", i);
if (address.isEmpty()) {
      return false;
for (int i = 0; i < 10; ++i) {
      qDebug("%i", i);

Exception 1: Use braces also if the parent statement covers several lines or if it wraps:

if (address.isEmpty()
   || !isValid()
   || !codec) {
      return false;

Exception 2: Use braces also in if-then-else blocks where either the if-code or the else-code covers several lines:

if (address.isEmpty()) {
else {
      qDebug("%s", qPrintable(address));


if (address.isEmpty())
else {
      qDebug("%s", qPrintable(address));
if (a) {
      if (b)


if (a)
      if (b)

Use curly braces when the body of a conditional statement is empty:

while (a) {}
while (a);


Use parentheses to group expressions:

if ((a && b) || c)
if (a && b || c)
(a + b) & c
a + b & c


Naming conventions are similar to Qt.
Names are of "camel" type, instead of "mops_klops" write "mopsKlops".
User defined types are capitalized. Start the names of non-type entities with lowercase. Preprocessor defines are all uppercase.

Do not encode type information in a name.

Typical prefixes

The prefix "r" like in Staff::rstaff() means "relative" - in this example the returned staff index is relative to the part.


Safer conversion

(Introduced in MuseScore 3)
Use safer type conversion:

Chord* chord = toChord(e);
Chord* chord = static_cast<Chord*>(e);
Static casting

When possible, static_cast is preferred over reinterpret_cast:

Measure* m = static_cast<Measure*>(measureBase);
Measure* m = reinterpret_cast<Measure*>(measureBase);

Type checking

(Introduced in MuseScore 3)
Shorter and easier to read:

if (e->isChord())
if (e->type() == Element::Type::Chord)



Use C++11's "for" instead of Qt's "foreach":

for (Element* e : m->el()) {
foreach (Element* e, m->el()) {

If you happen to be fixing some code and see a "foreach", please change that loop into a "for".

Other MuseScore 3 style changes

MuseScore 3 programming style changes may be found here:

Qt Debugging constructs

Q_ASSERT(bool test) should be used for errors for which musescore can still continue on. Q_ASSERT does nothing when built in release, but will halt execution when built in debug.

Fichier attachéTaille
qt2-musescore.xml1.93 Ko

Packaging for different Operating Systems

Packaging for Linux & BSD systems (maintainer wishlist)

Background - the Packaging Problem

Many Linux and BSD distributions place strict (and often contradictory) requirements on software intended for that system. These requirements can be technical, legal or moral in nature, and meeting them can be a challenging task. Traditionally, this job is left to each system's package maintainer who applies patches to the MuseScore code "downstream" to meet the requirements. As the "upstream" MuseScore code changes the patches can stop working and so they must be updated each time a new version of MuseScore is released. For this reason, Linux and BSD releases of MuseScore are often available much later than the Windows or Mac OS versions.

The Solution

To make life easier for the package maintainers long-term, and to make new MuseScore versions available sooner on Linux and BSD, all packaging tasks should be performed upstream (where possible). Ideally, package maintainers should not have any downstream patches. Anything that has previously been implemented via a patch should be sent upstream. Where necessary, suitable IF statements, Makefile variables and CMake options should be used to ensure that changes only affect the relevant distributions.

Linux & BSD packaging tasks

Please edit these lists wiki-style to keep them up-to-date. Anyone is welcome to attempt to implement the missing features via pull requests to the MuseScore:master branch on Github.

Maintainer Wishlist

Missing packaging-related features, packaging bugs or anything that maintainers currently have to provide downstream (e.g. through patches). Please state which distributions are affected.

  1. Updating the machine-readable copyright file (Debian, Ubuntu & related distros)
  2. Updating the build-depends and related lists (Debian, Ubuntu & related distros)
  3. Keeping man page ($ man mscore) up-to-date with Options de la ligne de commande (Linux & BSD)
  4. Automated translations of desktop file and man pages (Linux & BSD)
  5. Add MSCX, MSCZ and MusicXML (XML & MXL) to the xdg/shared-mime-info database (Linux & BSD - this would enable systems to recognise MuseScore files even when MuseScore is not installed).

Solved packaging issues

Move items from the wishlist to here when they get implemented in the MuseScore:master branch on Github.

  1. .desktop file (sets icon and declares mimetypes): #16275: .desktop needs work
  2. MuseScore app icon SVG
  3. Add MSCX, MSCZ, XML and MXL (MusicXML) to local MIME database
  4. MuseScore file icon and MusicXML file icon SVGs
  5. #59196: App icon doesn't scale on Ubuntu (and other Linux?)
  6. #57736: make mp3 support optional - required for packaging on many Linux because MP3 is non-free
  7. Solved conflicts when installing multiple versions of mscore in $PATH (you must override the $SUFFIX variable in Makefile).
  8. add an uninstall option to the make file
  9. #76331: Linux Makefile "uninstall" target doesn't remove directories


Design & implementation

There are only a few documents regarding MuseScore internals, except of course the code and its comments.

Element classes hierarchy

Click on the image to download as PDF

Elements and score objects model

Click on the image to download as PDF.

A score is represented by a Score object in memory. A Score object can have a parent Score if the score is an Excerpt. An Excerpt object is used to represent a part in part extraction. A Score also maintain a list of Excerpts if it has parts.

In a Score, notes are stored in a list of Measure objects. Measure inherits from MeasureBase together with the frames. A Measure represents a measure across all the staves of a system, it's a "vertical column" of music. The Score also stores the tempo change list (TempoMap) and the time signature change list TimeSigMap. A Score object is complex, and has several states variables for layout, audio rendering. It also stores score metadata, style etc...

Layers in a Score object are a way to hide or show some Element according to the selected layer. A Score stores a list of Layers.


Element positions

The screen position of a visible element is computed from three values:

AP Anchor position of element. This is usually the position of the parent element.
LO Layout Offset, computed in the layout engine. MuseScore calculates it as the normal position of the element
UO User Offset, created by dragging an element by the user

The display position is computed as:
Display Position = AP + LO + UO

The saved position in a MuseScore file is computed as:
Saved Position = LO + UO

On read the saved position is written to the UserOffset (UO). The LayoutOffset (LO) is set to zero. On the first call of layout() the values for UO and LO are reconstructed. The condition LO==0 is used to determine the first call to layout().
After first Layout the values are computed as (RP = read position from file)

void Element::adjustReadPos()
            if (RP != 0) {
		      UO = RP – newLO;
	            RP = 0;

As a consequence, if you are writing an import filter and want to override the automatic placement of elements on import, set Element->_readPos. After layout MuseScore will compute a proper userOffset out of it.

Older MuseScore versions (<= 0.9.6) do only save the UO value. If loaded with a different MuseScore version than created, the position of certain elements may differ, as the layout algorithm (and the LO value) may have changed. This is avoided with the above scheme.

Caveats: adjustReadPos() has to be applied after the first complete layout of an element. This also means that a second layout() call should not change any element position. The layout has to be done in one pass.

Playback and synthesizers

msynth is a wrapper for Fluid and Zerberus.
Fluid is a SF2/SF3 soundfont synthesizer. The SF3 format is not a standard and use by MuseScore only. It's exactly like SF2 except the samples are encoded in OGG instead of WAV.
Zerberus is a SFZ synthesizer. It's mainly tested with the salamander piano SFZ. Any work to add support for more opcode is welcome.

MuseScore internal score representation

This document gives an overview of how a score is represented in MuseScore. If you find it long on generalities and short on details, consider that a good thing, as details tend to change rapidly. So by keeping this fairly general, it is less likely to be out of date. This description was originally created shortly before the release of MuseScore 2.0.

All of the source files referenced in this document are found in the “libmscore” subfolder of the main repository unless otherwise noted.


A Score is the main top-level object. You can view score.h to see its definition. There are members here to store the style settings and other options associated with the score, and there are all sorts of other members to keep track of other things that seldom matter to most of the code. The main thing that usually matters is the list of measures – that’s where almost everything about the content of the score (even things like the title frame) are to be found. There is also a list of staves – one staff for each instrument in your score, normally, except for instruments like piano that may have two.

Aside from the lists of measures and staves, the next most interesting thing in a score are the various “maps” that MuseScore builds to keep track of things that might change over the course of the score – the time signatures, key signatures, tempo markings, etc. These allow code to quickly ascertain the current time signature (or whatever) at any given point in the score. There is also a map for elements called spanners – these are thing like slurs or crescendo markings that don’t just live in one place in the score but instead span from one place to another.

The Score object also contains a list of the pages for the score and the systems that make up those pages, but actually, these are not normally needed for most work. These data structures are created and managed by the layout engine.


In general, MuseScore is WYSIWYG, and if you see something on the page, there is probably an object for it. Element is the base class for all such objects. Elements are organized in a tree-like structure, where a Score contains Pages, each Page contains Systems, each System contains Measures, each Measure contains Segments, each Segment contains Chords, each Chord contains Notes, etc. Each element contains a pointer to its parent.

Elements generally have a layout() method to determine position and other charateristics; this is often a significant part of the implementation of any given element. Some elements are more abstract, like Staff, which defines the attributes of any given staff (number of lines, instrument to use, etc) but are not actually drawn directly.


As mentioned, the most important thing in a Score is the list of Measures. Actually, it’s a list of MeasureBases – this is the base class for both measures and frames. But for many purposes, you can ignore the frames. And even though measures are children of systems which are children of pages, you normally access the measure list for a score directly.

A Measure object (measure.h) contains a bunch of members you are unlikely to care about. But just as the most important member of the score is the list of measures, the most important member of a measure is a list of segments. See below


The Segment object (segment.h) is perhaps the most important data structure to understand in MuseScore. A segment represents a moment in time – which, by the way, is represented in MuseScore in units called “ticks” (480 of them per quarter note). A segment contains a list of elements that occur at that time position across all staves. So if your score has four instruments, two of which play a note at a particular moment in time, there will be elements for those two notes in the segment. Each element in a segment contains an indication of what staff it lives on, also what voice within the staff. Actually, these two pieces of information are combined into the notion of of “track”. Tracks 0-3 are the four voices for the first staff, tracks 4-7 are the four voices for the second staff, etc.

A segment contains an element for a given track only if something actually happens at the tick for the segment. So for instance, if one staff has a whole note while another has two half notes, there will be two segments total. The first segment, representing beat one (tick 0 within the measure) will contain the whole note for the first staff and the first half note for the second staff. The second segment, representing beat three (tick 960 within the measure), will contain the second half note for the second staff but will contain nothing for the first staff.

A segment can also contain annotations – markings like staff text, chord symbols, dynamics, etc. They also have a track to record what staff and voice they are associated with.

So far, I have been talking about one kind of segment only - the type that contains chords and rests (or more generally, chordrests, the parent class of both chords and rests). There are also separate segments for the clefs, time signatures, key signatures, and barlines. Much of the code in MuseScore ignores these and focuses only on the chordrest segments.


MuseScore makes a distinction between a chord and note that isn’t what you might expect. A Chord (chord.h) is a collection of one or more notes on a given track (staff/voice) at a given tick (moment in time). Basically, even single notes are chords to MuseScore. A chord has a list of the notes that make up the chord, so that list will just contain a single element for single notes. By definition, all notes of a chord share the same basic duration. Notes that occur at the same tick but have different durations must be entered into different voices – that’s how MuseScore and most other notation programs organize things both internally and in the user interface.

A chord has a duration and list of notes. It also has info about the stem, ledger lines, grace notes to apply to the chord, articulations, arpeggio, tremolo, glissando, etc. Two chords tied together are represented in MuseScore as two separate chords (each with its own duration) and a separate tie object, just as it looks.


As mentioned, a chord has one or more notes. The Note object (note.h) is where you find information about pitch, staff line, accidentals, playback information – anything that potentially differentiates one note within a chord from another.


The Rest object (rest.h) is a sibling of chord – they share the same parent, chordrest. A rest has a duration and that’s about it. Full measure rests are represented with a special duration value, so they can fill a measure of any time signature.


This page is extremely old and out of date.

Basic notation


The previous version of MuseScore made significant strides towards preparing MuseScore for use on ensemble scores such as orchestra or band. Below are some remaining hurdles.


The following hurdles make MuseScore impractical or difficult for creating professional-quality scores with lyrics.

User Experience Enhancements

Version information

Release date and revision number for each stable version of MuseScore. The list matches the file version with the MuseScore version number used in the Help → About dialog.

MuseScore version mscx file version Release date Revision
Version 2.1 2.06 2017-05-02 871c8ce
Version 2.1RC 2.06 2017-04-07 d2dda16
Version* 2.06 2016-10-06 6347ed6
Version 2.0.3 2.06 2016-04-01 3c7a69d
Version 2.0.2 2.06 2015-07-16 f51dc11
Version 2.0.1 2.06 2015-05-05 b25f81d
Version 2.0 2.06 2015-03-24 6e47f74
Version 2.0RC 2.06 2015-03-12 bf1ec31
Version 2.0b2 2.02 2014-12-22 a925ae0
Version 2.0b1 2.00 2014-08-26 1efc609
Version 1.3 1.14 2012-02-27 r. 5702
Version 1.2 1.14 2012-03-13 r. 5470
Version 1.1 1.14 2011-07-27 r. 4611
Version 1.0 1.14 2011-02-07 r. 3996
Version 1.14 2010-09-25 r. 3507
Version 1.14 2010-08-16 r. 3400
Version 1.14 2010-07-13 r. 3280
Version 0.9.6 1.14 2010-06-07 r. 3145
Version 0.9.5 1.11 2009-08-14 r. 2012
Version 0.9.4 1.10 2009-03-21 r. 1518
Version 0.9.3 1.9 2008-09-21 r. 1102
Version 0.9.2 1.9 2008-04-12 r. 888
Version 0.9 1.4 2008-01-24 r. 646
Version 0.8 2007-12-19
Version 0.7 2007-09-15
Version 0.6.1 2007-07-30
Version 0.6 2007-07-24
Version 0.5 2007-03-29
Version 0.5 2007-03-29

*Mac only

Scrapbook of feature changes and additions

Warning: this page is very outdated.


As feature changes are made to MuseScore, they may be listed here. This will help developers in tracking work, help testers in using the nightly builds to try out new features and perhaps provide feedback, and perhaps most importantly, it will also help serve as a checklist of features needing documentation as MuseScore approaches a new release. The distinction between new feature and bug fix is sometimes blurry, but if a change will require documentation, it should probably be listed here.

Users should understand that features listed here may still be experimental and subject to further change or even removal.

Developers: Feel free to list new features here whether completely implemented or not. You may indicate any known limitations or bugs if you like, as well as any further enhancements you are considering. You may also wish to indicate whether users may provide feedback on the feature, and if so, whether you would prefer they do so via the issue tracker, the forums, the developers list, private email, or by other means. Provide as much or as little detail as you like. Even just listing a feature name with no additional information would be useful for the purpose of making sure it does not fall through the cracks when it comes time to create documentation.

Note: This page itself is experimental and subject to change in form and direction. A template for feature changes/additions is provided as a starting point, but if a different format is deemed more appropriate, feel free to use one and even to update the template if you feel this would make sense for others.

Changed / Added Features

Constrained dragging

  • Description: allows you to limit a given drag operation to horizontal or vertical movement only
  • Usage: ctrl-drag to move elements horizontally; shift-drag to move them vertically
  • Known limitations/bugs/opportunities: element is first reset to original/default position
  • Feedback desired:

Notes: See

More flexible clef changes

Rev. 4080 implements more flexible clef changes. Example is a piano score where the top staff starts with a G clef and switches immediately to an F clef.

Drag/Drop elements on score view

Elements on the score view can be used like palette elements. For this press Shift+Ctrl and drag an element with left mouse button.
This also allows to drop elements from the score view to a palette. (First you have to make the palette changable; see palette context menu).

Continued Drop

If you press Shift+Ctrl and drag an element from the palette, the operation does not end on drop. You can can continue to drop to other locations. This is currently not implemented for all kind of elements. Tested with articulations.

Enhanced Clef Layout

Clef layout spacing was changed in revision 4101. In previous versions clefs looked like:
clef-layout2.png or clef-layout3.png
This is the new spacing:
clef-layout1.png and clef-layout4.png
The changes may have side effects and need testing.

Local Time Signatures

Time signatures can be different for different staves. An example here is Bach's 26. Goldberg Variation:


MuseScore has the concept of a global time signature and an actual (local) time signature. You change the global time signature by dragging and dropping a palette object to a staff. The global time signature is used to count beats (as shown in the status line) and is the reference for tempo markings. The global time signature is the same for all staves and normally identical to the actual time signature.

The actual time signature is set in the time signature property dialog and can deviate from the global time signature for every staff (left hand 18/16 in the example)


The text of the time signature can be set independent of the actual values.

A local time signature is set by dropping a time signature symbol with the Ctrl key pressed. The local time signature is set only for one staff. A global time signature is replicated for all staves.

Album Manager

The album manager allows to prepare a list of scores. The list can then be saved as an album file ("*.album").


The first implemented action for an album is "Print". The album scores are printed in order with the correct page numbers set overriding the page number offset values in "Page Style". The album is printed in one print job so double sided printing (duplex printing) also works as expected.


For the Open-Goldberg project I want to be able to create different versions of the score. One version is the "Urtext", a score which is close to the original version of Bach. A second version could be a Czerny variation, which in addition to the Urtext contains fingerings.

The layer feature allows to create different versions out of one score file. If you want to add fingerings you have to create a layer and tag the fingering elements with the layer name.

First create layers:


Second create a score variant:


Add the visible layer to the score variant. Then select all fingerings and tag them with the name of the score variant:


Default layer:

Czerny layer:


  • Description: You can switch a metronome on and off during playback and the cursor now moves beat by beat. It's a new button in the toolbar.
  • Usage: If you use MuseScore as a repeater, you now have a metronome
  • Feature request: #4199: Metronome on playback

Follow and unfollow the score during playback

  • Description: You can switch the following of the score on and off during playback. It's a new button in the toolbar
  • Usage: It's now possible to listen to a measure while scrolling around the score.
  • Feature request: #12331: Option to not pan the score while playing

Local Relayout

Notes and Rests at the same time position are vertically aligned by default. Sometimes this is not desired.
A new feature allows to relayout beamed notes and rests without considering notes/rests in other staves.

Before setting relayout flag:
Checking relayout flag:
After setting relayout flag

Other examples:

Programmable MIDI actions

  • Description: When you are entering notes with a MIDI keyboard, you need to go back to your computer keyboard to play or to change note durations. Now you can program some keys on your MIDI keyboard to do these actions.
  • Usage: Go to Preferences -> Note Entry to program MIDI actions.
  • Known limitations/bugs/opportunities: None. Please report in the issue tracker.
  • Feedback desired: Yes

New audio architecture: SF3, Aeolus, Zerberus, effects

  • Description: A new audio architecture for synthesizer and effects.
  • Read more about it
  • Feedback welcome

Repitch mode

  • A simple way to change pitches of a passage without affecting the rhythm, ornaments, slurs etc...
  • Read more about it
  • Feedback welcome

Extended Ties

tie1.png is rendered as tie2.png

WYSIWYG chord symbols

  • Description: you can now type chords however you like, and they will be understood and rendered as well as possible. So you can type Bbm7, Bbmi7, Bbmin7, or Bb-7 and they are all understood as minor seventh chords and rendered well. A "Standard" and "Jazz" rendering style are provided and will render similarly to the old "stdchords.xml" and "cchords_muse.xml" in terms of fonts, superscripting, etc, but both styles support this WYSIWYG mode so you can always use whatever abbreviations you like, use parentheses around alterations or not, etc. In addition, you can enter parentheses around chords to show they are optional, and they will still be handled correctly. Otherwise unparseable entries like "N.C." or "/" are also rendered consistently with other chords.
  • Usage: Chords are entered just as before; you just don't have to be so careful about how you spell them
  • Known limitations/bugs/opportunities: As long as the root is recognizeable, the chord will render and transpose reasonably. So Bbrandom will transpose as Crandom, etc. But MusicXML exports only works to the extent the chord is actually understandable according to a predetermined list of acceptable abbreviations for major, minor, etc. Eventually we could allow this list itself to be customizable if there is felt to be sufficient need.
  • Feedback desired: Any. Most interesting: are there examples of chord symbols that can be found in published literature that are *not* handled correctly?

Notes: this is how a variety of different chord symbols will render in the "Jazz" style:

International chord symbols

  • Description: adds options for Solfeggio and Lower case minor chords, improves German chord mode
  • Usage:: Style / General / Chordname, select from radio buttons for Standard, German, Solfeggio root naming, checkbox for Lower case minor chords. Existing chords are automatically converted to selected style, and new chord entry respects these settings, so typing Do7 in Solfeggio mode results in a C (Do) dominant seventh chord rather than a D diminished, and typing "a7" in Standard mode with "Lower case minor chords" enabled is understood as a minor seventh chord rather than a dominant seventh.
  • Known limitations/bugs/opportunities: further customizations (such as rendering "Re" with an accent on the "e") are possible by editing the chord description file.
  • Feedback desired: Did we get the most important case, and are they handled correctly? Specifics were taken from LilyPond for the most part. For instance, in German mode, chords are now rendered with accidentals as "is" and "es" rather than sharp and flat; bass notes always lower case regardless of major/minor. In Standard or Solfeggio modes, with "Lower case minor chords" checked, bass notes remain upper case. In Solfeggio mode, we use "Do", "Sol" and "Si" rather than "Ut", "So", or "Ti". Are any of these decisions contrary to what most people using these options would expect?



  • Description: You can switch on and off a count-in to be played each time the playback starts. The count-in plays beats for a full measure (according to nominal time signature at playback starting point); if the starting point is mid-measure or at a 'short' measure (anacrusis), it also plays enough beats to fill the measure missing part. User interface: a button in the Play Panel.
  • Usage: If you use MuseScore as a MinusOne repeater, you can sync your 'entrée' with MuseScore's.

(Feature name)

  • Description:
  • Usage:
  • Known limitations/bugs/opportunities:
  • Feedback desired:



Current Projects

How to Contribute

If you want to help us design or just give us some design-related feedback, subscribe to our mailing list and drop us a note. If you're shy or don't know what to write, just send an e-mail saying "I want to get involved".

We're always looking for volunteers, so please lend a hand -- no design skills necessary.

How to Design

Before you start designing something, you should get acquainted with our design principles and our branding guidelines.

Once you've done that, look at the "Current Projects" section above and see if there's anything you're interested in. If so, read through our workflow to get a feel for how we work.

Design using Inkscape or another open-source vector editor. Save your work as an SVG. Bitmap editors are not allowed unless you're tweaking photos.

When designing, the icon set might come in handy.

How to Publish

Upload your design to DeviantArt as an SVG and include a PNG preview. If DeviantArt doesn't allow you to post an SVG, at least upload the PNG and put a link to the SVG in its description. Add your design to the #musescore-design group.

The graphics you submit must be published under a Creative Commons license that allows modifications. CC0 works in all situations. By submitting a graphic, you guarantee that all the parts of your graphic are either your own original work or legally reproduced work of others.

If your design falls under the scope of a current project, put it under its Proposals section. If it doesn't, put it on the sandbox. Add your design as a 120px-wide thumbnail linking to its DeviantArt page.

Any questions?

If you have a question or just want to introduce yourself, don't hesitate to write to the mailing list or talk to us on our weekly IRC chat.



Preview Vector file 100x22 bitmap 150x32 bitmap 250x54 bitmap 450x97 bitmap 600x130 bitmap 2000x433 bitmap


Preview Vector file 100x22 bitmap 150x32 bitmap 250x54 bitmap 450x97 bitmap 600x130 bitmap 2000x433 bitmap


The MuseScore logotype is made by Raúl Posac and set in Neue Helvetica, licensed by Linotype.

The font recommended for use in materials and on the website is Raleway by Matt McInerney.

Design principles

All designs for MuseScore should be checked against these principles.

These principles are currently mostly copies of those set out by Mozilla.



Users should be able to discover functionality and information by visually exploring the interface; they should not be forced to recall information from memory. [Source: Nielsen]


Controls should visually express how the user should interact with them. [Source: Norman]


Controls should be placed in the correct location relative to the effect that they will have. [Source: Norman]


Controls that are more important or more commonly used should leverage visual variables such as size and contrast so that they have more dominance and weight relative to other controls.


Interfaces should be as simple as possible, both visually and interactively. Interfaces should avoid redundancy. [Source: Minimalism]


Interfaces should provide feedback about their current status. Users should never wonder what state the system is in. [Source: Nielsen]


All else being equal, software should be internally consistent with itself, and externally consistent with similar interfaces to leverage the user's existing knowledge. [Source: Nielsen]



Interfaces should be as efficient as possible, minimizing the complexity of actions and the overall time to complete a task. [Source: Nielsen]


The software should not automate tasks contrary to the user's intents.


Interfaces should not interrupt the user. Interfaces should never ask the user a question that they are not prepared to answer simply for a false sense of control. In general, software should only speak when spoken to.

Error Prevention


Interfaces should proactively try to prevent errors from happening. [Source: Nielsen]


Actions should support undo so that users remain in control.


Users should not encounter errors because the interface is in a different state than they expected it to be.


Interfaces should proactively help users recover from both user errors and technology errors. (A preferable case is to address through ux-error-prevention so that the error does not occur). [Source: Nielsen]


Interfaces should not be organized around the underlying implementation and technology in ways that are illogical, or require the user to have access to additional information that is not found in the interface itself. [Source: Nielsen, Cooper]



Users should not be required to understand any form of implementation-level terminology. (This principle is a special case of ux-implementation-level). [Source: Nielsen]


Interfaces should not blame the user, or communicate in a way that is overly negative or dramatic.

IRC chat

We plan to hold an IRC chat every week on the '''#musescore-design''' channel on Freenode. These chats will be key to making final decisions and determining what to focus on next. These chats will be open to everyone, even people who will just read and won't write.

Chats will commence once enough volunteers post to the mailing list.

If you'd like to take part in a chat or two, add your time schedule to our Doodle poll. Ignore the specific dates, take note of only the times and days of the week.

Icon set

Current Icons

The in-progress icon set can be found here.


Visual Design

* All icons must be vector-based.
* All toolbar icons must be monochrome with a transparent background.
* Toolbar icons should be 24x24 px with 1px margins.
* If the symbol is narrow, rotate it 45° left or right to fill the focal space.
* All icons must be international and untranslatable. Don't use the "B" symbol for "Bold" or "I" for "Italics", but simply use lowercase "a" with the appropriate formatting applied.
* Keep elements aligned to a square pixel grid for sharpness.

If in doubt, refer to the Gnome icon design guidelines.

Icon Files

* Icons should be submitted in the SVG format.
* Use a single layer only.

Relevant Art

Relevant art

Ideas for MuseScore UI and website



Feel free to post your design ideas here.


A theme for MuseScore 2.0 should be created under the following conditions

  • One theme only for all platforms (Win, Mac, Linux). Our design resources are sparse. The native theme which existed in MuseScore 1.0 has been removed.
  • The MuseScore developers expect a proposal “drawing” by the designer, which can be implemented in C++. Colors and gradient are easy to change, so that doesn't take much time. Shapes, size, etc. require C++ drawing code, takes more time.

Some practical info:

  • Everything is in mstyle directory.
  • The css system which temporary was put in place in the master, only partly worked out. It has been removed again. So everything needs to be coded in C++.
  • An example of how theming is done: line 2341: “p.setColor”

User interface text style guide

This guide should describe how to design text for the user interface (UI) of the English version of MuseScore.


Text capitalization

Title capitalization

Title capitalization is when every words are capitalized except for certain words. Capitalize all words except the following if they are not the first word of the sentence:

  • Articles ("the", "a" and "an")
  • Conjunctions ("and", "or" and "but")
  • Prepositions having less than five letters, (e.g. "for", "in", "with" or "to", "from" or "under"). It includes "to" as part of an infinitive ("to Walk"). But it excludes the preposition part of a verb phrase, as in “Starting Up the Program.”

Note: Apple suggests to always capitalize the last word of the sentence too. Not sure what to do in this case.

Sentence capitalization

Sentence style capitalization is when the first letter of the sentence, statement, phrase, or label is capitalized and all other words are lower case. The only exception to this is proper nouns which are always capitalized.

When to use sentence and title capitalization

Control Capitalization
Button label Title
Checkbox label Sentence
Combo box item Title
Combo box label Sentence
Group box title Title
Menu item Title
Tooltips Sentence




  • Homepage
  • About: A little about the history of MuseScore, the current status and where things are going to. Can be same text as on Wikipedia.
    • What is an open source project
    • MuseScore in education
    • Branding
    • Licensing
    • Release history
    • Testimonials
    • References
    • Statistics
    • Contact
  • Documentation
    • Handbook
    • Tutorials
    • How To
    • Use Cases
    • (e)-Books
    • Videos (?)
  • Support
    • Forums
    • IRC
    • Social media: Twitter, Facebook, Identica, YouTube, Flickr, ...
    • Professional services
  • Extensions
    • Plugins
    • Soundfonts
    • Templates
    • Profiles: extension packs for palettes, e.g. for handbells
    • Instruments: personalized and/or localized instruments with cascading instruments.xml
    • Styles: tentative bc taken care off by templates?
    • Languages (in a future stage)
  • Contribute
    • Development
    • Translating (Software & Website)
    • Testing (How to report a bug)
    • Promotion: Help promoting MuseScore. Here is some material you can use to spread the word … Zazzle shop ?*
    • Donate



Design a homepage that captures attention and serves as a good starting point for navigating the website.


Call for Proposals
Analyzing Proposals
Shaping Tentative Design
Implementation in Progress


In Scope

  • Download options
  • Feature showcase
  • Screenshots

Out of Scope

  • Change the structure of the website
  • Go against the branding guidelines
  • Leave off the Download button


Proposal by Tin Man



If a project doesn't specify a deadline for a phase, the phase will be one week long, from one IRC chat to the next. If not enough work gets done within the week, the IRC chat attendees may decide to prolong the phase by another week.

Call for Proposals

This week will be dedicated to submitting proposals. A proposal may consist of mockups/sketches and/or textual descriptions, and should be posted under the "Proposal" section of the project. Anyone may submit a proposal, no matter whether they are part of the team or not. Anyone may also add to the "relevant art" section.

End-of-the-week IRC chat

The IRC chat attendees will list problems that haven't been addressed by the submitted proposals, propose solutions, and pick the ones that suit our design principles the most. They will also go through the aspects in which the submitted proposals differ and do the same.

After that is done, they will decide which of them will work on the tentative design. The person chosen will post the solutions that have been decided on under the "Tentative Design" section of the project to serve as an outline for the tentative design. He will then be responsible for mocking it up and fleshing out its description over the coming week.

Shaping the Tentative Design

This week will be spent finetuning the tentative design as it is developed, finding possible bugs, and working together with the developer team to assess how the proposal might be implemented.

Development infrastructure

MuseScore source code is hosted on GitHub.

File Hosting

The MuseScore binaries for stable and nightly releases are hosted by OSUOSL. We have two shares.
For some other resources, MuseScore also have a AWS account and use S3. MuseScore connect is hosted on S3, also MuseScore translations available in the resource manager are hosted on S3. We also use S3 to host libraries (Qt) or tools (wkhtml2pdf) used to build MuseScore, generate PDF handbook etc...

Automated nightly builds

The nightly builds aren't so much "nightly" anymore. The Zurich University of the Arts kindly hosts a virtual machine running Windows 7. This computer is polling the Git repository every hour - if a new revision is found, a nightly build will be packaged for the current active branches. The packages for Windows are uploaded via FTP on Only the last 20 nightlies are kept there.

The build servers also run a IRC bot. It notifies the #musescore IRC channel when a new build is available, or if it has failed.

For macOS and Linux, nightlies are built by Travis-ci. See below.

Continuous integration using Travis-CI

For every code pushed, GitHub sends a notification to, a free hosted continuous integration service for the open source community. Travis uses the file .travis.yml at the root of the source code tree to build MuseScore, and run the unit tests located in the mtests directory.
If the build or the tests fail, Travis will notify the #musescore channel on IRC, and send emails to committers.

Travis also creates nightly builds for macOS and hosts them to OSUOSL. The whole build process is public self contained in the git repository.

Mark issue as fixed automatically

GitHub can send a POST HTTP requests to any URL. uses this feature to receive notification of every new commit on the master branch of the Git repository. If the commit message starts with "fix #xxxxx", with xxxxx the issue number in the issue tracker, the issue will be marked as fixed automatically.

Git Push notification on IRC

GitHub sends a notification on the #musescore IRC channel for each new push on the Git repository.


Continuous translation and resource manager

Handbook in PDF

The MuseScore handbook is written and translated on We also offer it as a PDF. The PDFs are hosted by OSUOSL and created daily by Travis-CI using

Instruments.xml documentation

Taken from (

The goal of the document is to describe the syntax of instruments.xml. The document is not really aimed at a developer audience but more an average savvy MuseScore user.

MuseScore uses one or 2 files, often designed as “instruments.xml”, to define the instrument list displayed in the new score wizard, in EditInstruments and in the Change Instrument dialog (Staff propertiesChange Instrument). An instrument in this list is not just a name, but also defines several behaviors (transposition, range), sounds (articulations, which synthesizer to use, which sound to use in the soundfont).


By default, MuseScore will load a single instruments.xml file. This file is not accessible and embedded in the MuseScore binary for performance reason. However users can change the primary instruments list file in Edit &arr; Preferences. They can also define a secondary instruments list file. The secondary file can define new instrument groups, append new instruments to instrument groups, change properties of instruments etc...



Attributes and elements

Attributes and elements are used only once or noted as follow

* → 0 or more
+ → 1 or more

Attributes and elements are optional or noted as required


Top element.


no attributes




•id (required)
The id should be unique and is used in each Instrument declaration to indicate that an instrument is part of a genre.


•name (required)
The name of the genre. The string will be used in the user interface to describe the genre.



The name of the articulation. It’s used as an id to store the articulations for a given instrument. Articulation can be defined globally in museScore for all instruments, in each Channel for an Instrument and in an Instrument. They are overridden in this order.
Name is also used internally to match a symbol with the desired effect defined by this element in instruments.xml. The possible values are “fermata”, “shortfermata”, “longfermata”, “verylongfermata”, “thumb”, “sforzato”, “espressivo”, “staccato”, “staccatissimo”, “tenuto”, “portato”, “marcato”, “ouvert”, “plusstop”, “upbow”, “downbow”, “reverseturn”, “turn”, “trill”, “prall”, “mordent”, “prallprall”, “prallmordent”, “upprall”, “downprall”, “upmordent”, “downmordent”, “pralldown”, “prallup”, “lineprall”, “schleifer”, “snappizzicato”, “tapping”, “slapping”, “popping".


velocity change: -X00% - +X00%. The velocity of a note with this articulation will be multiplied by this percentage. The % is optional.

gate time change: -X00% - +X00%. The duration of the note with this articulation will be multiplied by this percentage. The % is optional.

A string description of the Articulation. Currently not used.



•id (required)
The Instrument group id is used by the cascading mechanism. If the secondary instruments.xml file uses a previously defined id, the instruments are added to the same group.


The name of the group as it will appear in the user interface.

An instrument as defined below

The id of an Instrument previously defined. The Instrument will be added to this InstrumentGroup on addition to the group it belongs. Of course, the InstrumentGroup can be defined in the secondary instruments.xml file and the instrument in the primary one.



•id (required)
The unique id of the instrument is used to refer to it in the secondary instrument list file, or in the init tag of an instrument to initialize an instrument with the value of another one. The id can also be used with the ref element of a InstrumentGroup to add an instrument to several groups without writing its full definition again.


  • longName* +
  • shortName* +
    ◦pos attribute: For certain instrument (like organ) it might be necessary to have long and short names for each staff or between staff. It’s the purpose of the the “pos” attribute. 1 is in front of the first staff, 2 is between staff 1 and 2 etc… Even number are always between staves

Usually there is only one long name and short name. The long name is used on the first system in the score and the shortname for all other systems. The long name is also used to display the instrument in the list if trackName is not defined.

Currently not used. The description is helpful for people editing the instruments.xml file in the future. It should describe the instruments and give information that can’t be found in the other parameters but could be helpful.

The trackName is used to display the instrument in the list. If trackName is not present, the first longName is used

The MusicXML sound id for this instrument. Not yet implemented MuseScore will use this id to import and export MusicXML file with the right MusicXML id

The number of staves for this instrument

◦staff: the staff index, 1 based. If not present, 1 is assumed.
The clef for a given staff, the first one by default. This will set both concert and transposing clef. Possible values are "G", "G8va", "G15ma", "G8vb", "F", "F8vb", "F15mb", "F3", "F5", "C1", "C2", "C3", "C4", "TAB", "PERC", "C5", "G1", "F8va", "F15ma", "TAB2"

The clef to be used in concert or transposing mode. Possible values are the same than for the clef element.

Number of staff lines.

>0 if the instrument should use a drumset

Drumset definition.

◦staff the starting staff for the bracket. First staff if not present.
The type of bracket to use. 0 normal bracket, 1 grand staff brace, 2 square brace, 3 line brace

◦staff the starting staff for the bracket. First staff if not present.
The bracket span in number of staves.

◦staff the starting staff for the barline. First staff if not present.
The barline span in number of staves.

The amateur and professional ranges of the instrument in MIDI pitches. Amateur ranges are probably smaller than professional one, especially for woodwinds, or voices. Notes out of the instrument's range are marked in yellow for amateur and red for professional.

Used for transposing instruments and define the diatonic and chromatic intervals that will be used on playback and while switching to concert pitch.

Instruments can have several channels switchable with staff text. See how violin or trumpet are described. Channel will describe the sound used to play the instrument.

Override the articulations defined in Channel if it has the same name.

One or more genre elements with genre id defined at the start of the file. If an instrument doesn’t have any genre element, it will only appear if the “All instruments” category is selected.

Define the number of frets and strings tuning for a tablature instrument.

An instrument id to initialize the current instrument from.


◦staffTypePreset A staff type preset among "stdNormal", "perc1Line", "perc3Line", "perc5Line", "tab6StrSimple", "tab6StrCommon", "tab6StrFull", "tab4StrSimple", "tab4StrCommon", "tab4StrFull", "tabUkulele", "tabBalajka", "tab6StrItalian”, "tab6StrFrench". Default to “stdNormal”.

The content of the element can be “standard” (the default), “tablature” or “percussion” and should match the staffTypePreset. This will override the stafflines element.



no attributes


Number of frets for the instruments

Tuning of the string as a MIDI pitch number. Top string first.



•name (optional)
A name should be present if more than one Channel is defined in an Instrument. The Channel name is used in the Staff text property dialog to switch the program number at this position in the staff.


A program change event and the General MIDI program number that will be used to select the sound in the soundfont at the start if the song. It is 0 indexed: Acoustic Grand Piano. See General MIDI for others.

A controller change event with ctrl the controller number and value the controller value that will be sent at the start of the song. It can be used to select a bank before sending the program change event for example.

Define new articulations or override the global ones.

Used in the user interface in Staff Text properties dialog

The default synthesizer is the SF2/SF3 based one. This element can be used to override the default. It’s notably used for the Pipe Organ definition to use the Aeolus synthesizer instead of SF2/SF3.

Mute or solo this channel by default.

MIDI actions associated with the channel. These actions will be appended to the program and controller definition and be added to the Staff Text property.






see Controller and program in Channel

Used in the user interface in Staff Text properties dialog


Defines a drum note


•pitch (required) A MIDI pitch number

The notehead to use for this note

The staff line to use for this note. 0 the top line, 1 the top interline and so on. One line staff uses the top line of a normal 5 line staff.

The voice to use for this drum note, a number between 0 and 3

The name of the drum in the Edit drumset dialog

Stem direction 0 Automatic. 1, Up. 2 Down.

A shortcut for this drum note. A letter between A and G.

  • Musical instrument museum online - []
  • Vienna Academy - []

MuseScore roadmap


Almost all development work from 2011 until 2015 was focused on MuseScore 2.0. With very few exceptions, work on a feature was either completed and included in 2.0, or it was deferred with little work having been done at all. So 2.0 was released with almost nothing in development for any future release. The good news here is, we have now a blank slate to work with.

As of this writing, there have been three point releases (2.0.1, 2.0.2 and 2.0.3) since then with mostly bug fixes and a few new features where they could be added without breaking compatibility in either direction. The intention is that we now move on to a 3.0 version that adds more significant new functionality without concern about breaking forward compatibility (meaning that we will make no effort to limit development just to ensure that 3.0 scores will open in 2.0, and in fact we are quite certain they will not). The more new features that are added in point releases, the less important it might seem to have 3.0 sooner rather than later, but there are definitely some things we would like to see that would be likely to break compatibility.

We still have no specific process in place for evaluating which features should be worked on or how to prioritize them. So far, it has worked pretty well for developers to just choose an area that interests them and work on it. Meaning, if any given developer chooses to work on a feature that isn't officially on the list of features being considered for the release, it is not out of the question that it would be included. Still, we hope to be coming to some sort of consensus on what is important and focus on the areas we agree we should address.

New features being considered for 3.0 and beyond

Where there exist issues to summarize a feature request, they are linked below. If someone wishes to work on a feature that has no formal issue associated with it, that is fine, but creating an issue does provide a place to hash out ideas for how the feature might work from a user perspective.


  • Keyboard control for palette, including key signature selection in create new score wizard
  • Menu mnemonics
  • MSN - size options for notehead, tuplet number, breath marks
  • Navigate more score elements by keyboard - dynamics, articulations, spanners, etc
  • Refinement of screenreader output - eg, options to control verbosity

Code cleanup

  • More comments
  • Werner has list of things to reduce duplication and aid clarity / efficiency


  • Allow overlapping elements (Space as rectangles instead of left/right only)—DONE
  • Cross-system beams (see melisma for possible implementation model)
  • More automatic positioning and collision avoidance algorithms—PARTIALLY DONE
  • Optimization to not layout all parts on every change—DONE
  • Optimization to not layout the entire score on every change—DONE

Linked parts

  • Ability to break links for entire part
  • Ability to break links for specific elements
  • Ability to close/open/rearrange/rename individual part tabs
  • Cues / incipits that appear in parts but not in score - special case of breaking links?
  • Set style for parts in score - in File / Parts window?


  • #22626: System dividers
  • Above/below placement for text, other elements—PARTIALLY DONE (dynamics only so far)
  • Add Jazzy and/or other fonts
  • Change staff properties mid-score - eg, transposition, percussion versus standard, number of staff lines—PARTIALLY DONE (transposition only so far)
  • Combine fret diagram and chord symbols, especially for palette display
  • Editor for customizing rendering of chord symbols (partially implemented for 2.0 but deferred)
  • Gregorian chant
  • Improve support of microtonal accidentals, custom key signatures
  • Native support for shape note and other notations - incorporate work from Craig Fisher?
  • Absolute staff spacer
  • Slides / glissandi attached to specific notes in chord
  • One-sided ties
  • Options to control transposition (concert pitch) - key simplification, use of double flats/sharps
  • Ossia—DONE (extra staff set to be always hidden when empty)
  • Per-staff style settings (dynamics above vocal staff but below other staves, etc)
  • Support external SMuFL fonts


  • Complex repeats roadmaps
  • Dynamic range compressor to reduce perception that volume is too low—DONE (effect in Synthesizer)
  • Full customization of ornament playback
  • Grace notes after—DONE
  • Gradual tempo changes
  • Harmonics
  • Improve SFZ support—DONE
  • Improvements to pianoroll editor
  • Jumps with repeats
  • Make mixer changes undoable
  • MIDI channel assignment (PR 2126)
  • MIDI messages for staff text
  • Mixer reorganization - vertical strips? groups? combine with instrument list? combine with Synthesizer?
  • New soundfont
  • Playback chord symbols, fret diagrams, figured bass
  • Playback of audio track (synchronized with score)
  • Single-note crescendo/diminuendo—PARTIALLY DONE (GSoC work not yet merged)
  • Slurs—PARTIALLY DONE (ditto)


  • Check ownership of elements created within plugins (?)
  • Complete access to all elements
  • Find / download / install new plugins from the manager window
  • System properties like "requiresScore", min/max framework version

Program behavior

  • Auto update
  • Listening to MIDI Machine Control messages (PR 2128)
  • More automated tests
  • Sandboxing



  • Automatically generate fret diagrams from chord symbols
  • Copy/paste of spanners
  • Courtesy accidentals tool
  • Drumset manager
  • Guitar fretboard note entry window
  • Half time / double time tool
  • Header and footer editing—WYSIWYG (add text editing toolbar in Style -> General… -> Header, Footer, Numbers? Allow double-click to edit on score page?), syntax to create header/footer for first page only
  • Insert / delete note/rest, shifting remainder of measure—DONE
  • Instrument manager (editor to edit / add instrument definitions)
  • Keyboard control for palette (could be in addition to search)
  • Localized default shortcuts
  • Lyrics editing - dedicated window, move verses around, copy to system clipboard, etc
  • Method for adding transposed key signatures (add "G" for alto sax, get "G", not "E")
  • Save / load shortcut sets
  • Save as template command
  • Searchable palette
  • Spanner extension via mouse - change anchors like we do for slurs
  • Template manager
  • "Timeline" feature to visualize tempo / key / time signature changes

New features proposed or being considered long term

This section will probably grow as we move items from the above list to this one.



  • Offer build-in web view of the handbook in MuseScore
  • Allow the handbook in PDF version to be downloaded within MuseScore for offline usage
  • An index (glossary)


When the English source page is updated on, translators should be able to get email notification together with direct links to know what has changed and to be able to reflect these on their page.
Handbook pages containing outdated translations should mention a warning to the visitor that the content of the page may have since been updated. For a more updated version, check out the English one, or help (linked) to update the current translation. This can all be implemented on itself, therefore it not being required to seek a hosted solution.

Release notes

Release notes for MuseScore 2.1

MuseScore 2.1 was released May 2, 2017.

Top new features

Known incompatibilities with 2.0

  1. We have a new option in Staff Properties for tablature staves to allow fingerings in tablature. If this option is activated in 2.1, fingerings can be added to fret numbers, and fingerings attached to linked staves will be displayed in the tab staff. A file created with MuseScore 2.1 with this option activated will not show fingerings if opened with MuseScore 2.0.

  2. The text style for dynamics (which is used to automatically format text added to a dynamic, such as "sub.") is now italic by default. If a score created with MuseScore 2.1 using this style is opened in MuseScore 2.0, 2.0 will render the text without italics. If a score made in 2.0 has default, non-italic, text added to a dynamic, it will be displayed in italics in MuseScore 2.1.

  3. In MuseScore 2.0, the Instrument Change element allows you to change the sound for a staff mid-score, but the transposition is not handled correctly, nor does the change affect linked parts. This leads to scores that play back incorrectly if they display correctly, or display incorrectly if they play back correctly—or that do both incorrectly. For MuseScore 2.1, this is fixed—Instrument Change elements added to scores using MuseScore 2.1 will now transpose and affect linked parts correctly. A file that contains transposing Instrument Change elements created with MuseScore 2.0 will not automatically be fixed by opening it in MuseScore 2.1—it will continue to behave incorrectly with respect to either display or playback or both. However, if you remove the Instrument Change elements, correct any remaining errors, and re-add the Instrument Change elements using MuseScore 2.1, it should behave correctly for both display and playback. On the other hand, a score with transposing Instrument Change elements that works correctly in in MuseScore 2.1 will not continue to work correctly if opened with MuseScore 2.0. In general, the playback will be correct, but the display will be transposed incorrectly.

  4. Historical tablature support, particularly for lute, has been greatly improved and it comes with incompatibilities with MuseScore 2.0. Tablature scores from 2.0 should be mostly fine opened in 2.1; the only exception is that "10" will be replaced by "X" both in fret numbers and in string ordinals (needs clarifying—10 in standard tab is still 10), but opening a 2.1 file in 2.0 will cause severe issues if the score uses these new tablature styles.

  5. Multimeasure rests now automatically break on both sides of a measure with a fermata. If a score created in 2.0 has a multimeasure rest with a fermata hidden somewhere inside of it, when opening that score with 2.1 the multimeasure rest will be broken. If the user already manually broke the multimeasure rest to expose the fermata in 2.0, there will be no change opening it in 2.1. On the flip side, if a score is created in 2.1 with multimeasure rests automatically broken by fermatas, and then that score is opened and printed from 2.0, the fermatas won't appear.

  6. Courtesy accidentals added to a note tied to the previous measure will display in 2.1 but will not display in 2.0. Both versions will play this correctly.

  7. A problem with the playback of the Tenor Drums instrument was discovered after the release. These had no playback at all prior to MuseScore version 2.0.3; in 2.1, the drum 4 and spock drums do not play, either in scores created with previous versions of MuseScore or in scores newly created with 2.1. This can be fixed in either of two ways:

UI improvements

  • Fix #110711: Color piano keys when MIDI keys are pressed
  • Fix #91571: Add toolbar toggles to View menu
  • Fix #33131: Add a way to select/deselect all in Selection Filter
  • Re-pitch button moved into new note input button menu in toolbar
  • Fix #8954: Drag to reorder score tabs
  • Fix #109651: Add hint at the download page when loading pre 0.9.6 scores
  • Fix #100396: Change "note heads" to "noteheads"
  • Fix #67291: Confirmation before deletion of a palette
  • Fix #111856: Add Unicode accidentals to "Common Symbols" section of Special Characters
  • Fix #114366: Add "delete measure" to staff context menu
  • Fix #99476: Update rest icon to show other durations than quarter rest
  • Fix #100996: Show "Slur" or "Tie" instead of "Slur/Tie" in inspector and right click menu
  • Enable inspector for all breath/caesura types
  • Fix #112611: Add repeat barlines to Repeats palette
  • Fix #139611: Filter -> Search in Preferences / Shortcuts
  • Remove Text Tool from right click menu in toolbar
  • Fix #124691: Navigator cannot display 3-figure page numbers
  • Fix #86266: Mismatch between Bend properties and Tremolo bar properties
  • Fix #124766: Preferences / General / Animations doesn't work
  • Fix #124476: Change "New" button in lower left of Score Properties window to + button
  • Fix #152206: Revision is not shown in Score Properties
  • Fix #152211: Show correct API level in Score Properties
  • Fix #100221: Change Page Settings "Landscape" checkbox into "Portrait/Landscape" radio buttons
  • Fix #123146: Window title changes after save score
  • Fix #151856: TAB: Improvement of cursor position
  • Fix #18452, fix #68151, fix #68856, fix #71416, fix #74811, fix #97796, fix #97821, fix #112291, fix #120096: save/restore window sizes and positions
  • Fix #119376: Utility functions for save/restore geometry
  • Fix #121746: Ask for confirmation before deleting a workspace
  • Fix #117301: PulseAudio QGroupBox min height
  • Fix #112911: Score does not display fully in Navigator if latter set to ON when score loads
  • Fix #137446 (follow up for fix #112911): Navigator rectangle selection is lost
  • Fix #152886: Title bar of Selection Filter says only "Selection"
  • Follow-up to fix #97131, correcting title case in menu for Split Measure
  • Add colons to Inspector texts and various text fixes and improvements
  • Fix some label texts in Inspector to match the majority
  • Fix #106026: System Text should be labeled as "System Text"
  • Fix #102361: Tooltip explaining "New All" button in Parts dialog
  • Fix #121896: Better tooltip explaining BPM
  • Better tooltips for note grouping's "Reset" button and "Add" button in Master Palette / Time Signatures
  • Vertical spacers in layout and better tooltip for "Add" button in Master Palette / Key Signatures
  • Fix #114931: Show subtitles on all pages of New Score Wizard
  • Fix #104771: Dragging mouse up/down moves Zita1 controls the wrong way
  • Fix #163666: Order recorders by pitch range
  • Fix #166231: Ambitus gets reported an octave too high in Inspector, status bar, and screen reader
  • Disable "Scale to frame size" in Inspector for images not in a Frame
  • Rename "Repeat count" to "Play count" in Measure Properties dialog
  • Fix #105676: Rename "Staff distance:" to "Stem distance:" in General Style / Articulations, Ornaments
  • Fix #105301: Ctrl+F "Find" saves searched values
  • Fix #109576: Hide gray line above figured bass when View / Show Unprintable is unchecked
  • Fix #84416: Allow long note groups to scroll or pan in Create Time Signature dialog
  • Fix #165701, fix #165716: Reposition scoreview when cursor moves
  • Fix #25271: Part export automatic numeration of same instruments
  • Fix #10722: Label fields for width and height of toolbar icons in Preferences / General
  • Fix #181861: Pinch/spread to zoom uses wrong center point
  • Fix #182221: Updated Staff Properties Dialog
  • Fix #181966: Volume slider notches according to range in Synthesizer
  • Fix #182171: Leftmost pixel column in Synthesizer meter does not update when user adjusts volume while playing
  • Fix #180071: Do not scale webview in start center
  • Tweak piano keyboard to be resizable with touchpad (and probably touchscreens)
  • Better default size on startup
  • Fix #184381: Unnecessary "MuseScore: " prepended to most window titles and wrong title of Split Staff dialog
  • Fix #177646: More appropriate column widths and sortable columns in Edit Drumset dialog
  • Fix #109066: Metronome gain and volume slider left double click defaults to silence

Crashes and corruptions fixed

  • Fix #105811: Crash when creating full measure rests on multimeasure rests
  • Fix #105621: CRASH album when remove score w/ TBox
  • Fix #112431: Crash in note entry mode in drumset
  • Fix #137116: CRASH if try changing duration of Repeat Measure
  • Fix potential crash during layout or measure
  • Fix potential crash in lyric separator layout
  • Fix potential crash in slur layout
  • Use fallback font rather than crash
  • Fix #138256: Crash after moving to kneed beams in grace notes
  • Fix #120316: Crash when deleting a part
  • Fix #120016: Crash on play caused by channel mismatch
  • Fix #116556: Crash by opening the Instruments dialog box after parts deletion and undo
  • Fix #119581: Select note values onto multimeasure rests in parts leads to corruption and crash
  • Fix crash when undoing transposition after changing spatium
  • Fix #106021: Reducing actual duration of measure with text elements will corrupt measure
  • Fix #126916: Undo after creation of parts with linked staves causes corruption
  • Fix #124966: Create a pickup measure in parts with two instruments at least causes a crash
  • Fix #140081: Repeatedly deleting displaced beams causes crash
  • Fix #139656: Select a note/rest before change the measure duration leads to corruption/crash
  • Fix #141496: Copy-paste multimeasure rests containing a full measure, or not after cuting, causes corruption/crash
  • Fix #136236: Remove the time signature in the presence of another one in a score with parts leads to corruption/crash
  • Fix #127281: Crash when adding line/section/page breaks by double-clicking on a multimeasure rest
  • Fix #164446: Crash when opening bad MIDI file
  • Fix #166101: [GP6] Crash when opening a file containing 2Mrcs instrument
  • Fix #70571 and fix #93116: [GP6] Crash when importing gpx ottava
  • Fix #171071: Crash when importing incorrect MIDI file
  • Fix #167071: MusicXML import crash on overlapping wavy lines
  • Fix #154551: Crash by removing a score with frames when the last measure contains a pedal line/volta line
  • Fix #173381: Copy-paste a multimeasure rest on another one causes corruption after undo
  • Fix #173366: Protect against a couple of crashes
  • Fix #174026: Crash by changing time signature in a measure in Continuous view when a glissando extends from the previous measure
  • Fix #152506: Introduce a time signature in a measure which the Actual duration is exactly identical leads to corruption/crash
  • Fix #174721: Cut a time signature before a glissando and toggle in another View causes a crash
  • Fix #175341: [GP6] Crash on a file involving arpeggios, ties and capo Feature
  • Fix #167416: Cut a measure with tuplet causes crash
  • Fix #164671: Crash when changing 'spanned staves' from 2 to 1 in the Inspector
  • Fix #105951: CRASH on close score after deleting all segment of a spanner
  • Fix #154591: Crash when loading palette with small width/height grid
  • Partially fix #151521: Undoing a multimeasure rest range selection in parts causes a crash
  • Fix #112656: Crash when opening score with a duplicate Glissando
  • Fix #178176: Hang/crash by extending a glissando on a note with another one in the second staff
  • Fix #151711: Remove a time signature in a part causes corruption in the other parts and main score
  • Fix #119041: Font name containing a ampersand will corrupt file
  • Fix #121561: Score corruption when creating tremolos in Score+Parts
  • Fix #99146: File / Save Selection… leads to corrupt score if selection is not 4/4 and does not start with time signature
  • Fix #180986: Crash on ctrl+home of empty score
  • Fix #173366: Corruption on paste
  • Fix #183846: Splitting irregular measures produce extra rests
  • Fix #175821: [MusicXML import] Crash by importing a file with breath mark after grace note
  • Fix crash when converting to PDF on the command line
  • Fix #192236: Freeze when opening file with very large glissando
  • Fix #97106: Crash when undo after save in a score with parts and courtesy key signature

Audio playback improvements

  • SFZ synth greatly improved (see Zerberus)
  • Fix #104981: Synthesizer: zita1 reverb: Eq2 not working
  • Fix #87266: Metronome plays eighth notes if pickup measure has actual duration of 1/8
  • Fix #118816: midiAction on wrong midi channel
  • Fix #117726: MidiAction program change - doesn't change on note
  • Fix #119136: Instrument doesn't switch back after midiAction. See PR #2750
  • Fix #70016: Fixed formula to calculate staff given a note in presence of staffMove and added test case testTrillCrossStaff
  • Fix #115491: Loop out on end repeat goes to repeat start and not loop in
  • Fix #52841: No sound feedback in repitch mode when using MIDI or Piano Keyboard
  • Fix #147086: Section break pause is not respected in a file with parts after save/open cycle
  • Fix #70791: Export to audio does not respect Synthesizer settings unless saved to score
  • Fix #112556, fix #113416: Sample based Volume for envelopes and modlfo
  • Fix #119446: Calculate envelope for first point of new envelope right, fix divison by zero in amp increment calculation
  • Fix #119731: FluidSynth optimizations
  • Fix #120061: Fix clicking sound in playback due to filter init
  • Fix #165281: Update FluidR3Mono to 2.312


  • Fix #117716: Stop note on pedal released when sustained during attack
  • Fix #116906: Support for control structure, for details on set_cc see
  • Fix #117901: Support #include, change #define behavior, support
  • Fix #120066: Let zerberus support gain_cc/gain_oncc
  • Fix #116871: Add support for rt_decay
  • Fix #116691: On_hiccN/on_loccN support for zerberus
  • Zerberus: fix into loop (forgot offset because of interpolation), fix loop_sustain and simplify code
  • Fix #124656: mtests for Zerberus
  • Zerberus: check for seq range in onCC
  • Fix #122261: Add block comments to zerberus
  • Zerberus: fix control init
  • Zerberus: fix wrong position of seq zones
  • Fix #115991: Support for random playback
  • Fix #115806: Round robin not working
  • Fix #115996: Add sfz1 envelope support to zerberus (ampeg_* opcodes)
  • Fix #114681: Add loop support to zerberus
  • Do not consider ALSA driver changes if ALSA is not used

Score layout and style

  • Fix #65846: Ledger lines do not change color with staff
  • Stack ledgerline below stem, not just below note
  • Fix #75816: Implement space management for formatted text
  • Fix #54501: Tied enharmonics incorrectly notated
  • Fix #113201: Tremolo bar appears above wrong staff
  • Fix #112846: Optimize rendering for Mi, Min, etc
  • Fix #139641: Do Shape notes(quarter and half) misaligned with stem (Emmentaler)
  • Fix #151156: Cross-staff glissando missing when creating piano part
  • Fix #119381: Scaling of fretboard chord diagrams
  • Fix #120041: Allow 0sp max. slope for tuplet bracket
  • Lyrics dash and melisma should have same color as preceding syllable
  • Fix #15121: Ledger lines don't appear for notes beyond staff in drum palette
  • Fix #42121, fix #78536, fix #103921: Slurs lost on exchange voices and add test for exchange voices
  • Fix #117956: Changing text background color does not work for circular frames
  • Fix #121051: Multimeasure rests should account for fermatas
  • Fix #112451: Inconsistency in part name in staff properties between extracted part and the score
  • Fix #105641: No initial clef
  • Fix #180286: Bad layout on undo with hbox
  • Fix #109021: Wandering hairpins due to miscalculation of barline widths
  • Fix #187151: Hairpin drift due to bad tie calculation
  • Fix #188061: Drift on spatium change
  • Fix #180991: Layout jump due to courtesy key signature barline
  • Fix #135791: Make dynamics text style italic
  • Fix #38941: Staff texts after the first are ignored in multimeasure rests
  • Fix #188461: Tie length ending on mirrored note too short

Historical tablature

  • Fix #174066: Support for bass strings for lute tablature
  • Mixing mensural value symbols and beaming in historic tablatures
  • More French styles for frets and duration symbols
  • Font design improvement
  • New historical English fret style
  • Fix #185116: Changes to tablature flag automatism, tuplets and graces (now default hidden)

Import and export

Guitar Pro

  • Fix #147246: Repeat marks not working in gp3 and gp4
  • Fix #91341: Imports from *.gpx files play wrong drums sounds
  • Fix #150711: [GP6] Corruption when the gp file contains incomplete measures


  • Fix #122626: MIDI import truncated
  • XML escape lyrics in MIDI import
  • Fix #165496: Import MIDI track volume
  • Fix #167196: Change some MIDI XF chord symbol spellings
  • More precise tempo export in MIDI
  • Fix #184376: Initial key signature overwritten in exported MIDI with repeats


  • Fix #105436: SVG export crashes MuseScore with files containing horizontal frames
  • Fix #105471: SVG export crashes MuseScore in Continuous View
  • Fix #107081: SVG export leaves space between stems and heads
  • Export an SVG file per page
  • Fix #114691: SVG Export: Tablature Note matrix needs rounding
  • Fix #119721: [SVG export] Note head and stem apart on downstem notes
  • Fix #174496: Export to SVG from Continuous view results in a Crash


  • Fix #42281: [MusicXML] Title converted to copyright on import if positioned at bottom of page
  • Fix #107936: [MusicXML] crash when divisions is defined in second measure but used in first measure
  • Fix invalid MusicXML export when too many overlapping trills, ottavas or brackets are present
  • Fix #125881: [MusicXML Export] invalid MusicXML when too many overlapping hairpins are present
  • Fix #148131: [MusicXML] import of transposing score with chromatic tag only
  • Fix #142116: Order of ending/repeat in MusicXML
  • Time signature visibility in MusicXML import/export
  • Fix #120156: Infinite loop with an XML
  • Change #107936: Default to 4/4
  • Fix #20853: [MusicXML import] sound element's tempo attribute ignored
  • Fix #177216: Changed other dynamic to export text instead of dynTypeName
  • Fix #175226: [MusicXML import] add instrument-sound to MIDI mapping
  • Fix #186706: Export 7sus chord to MusicXML fails Reimport


  • Fix #113931: Freeze when importing Capella file with staff without time signature (workaround)
  • Fix #11014: [Ove Import] Import of chordnames is wrong
  • Fix #151846: [BIAB] Melody is not imported
  • Fix #81451: [Capella Import] Corrupt file when importing capx file with pickup measure

Build system and packaging

  • Makefile: Use POSIX way of finding CPU count
  • Simplify CPU count
  • Fix debug build for XCode with CMake>=3.5.0.
  • Update (Add link for mtest/
  • Allow BUILD_PCH to be set to on for Windows
  • Build Mac OS X nightlies on Travis-CI
  • Fix call to obsolete QChar::toAscii
  • Add option to use system FreeType
  • Select Item in Debugger with enter
  • Fix incorrect version in Linux desktop entry file
  • Build x86 AppImages on Ubuntu 12.04
  • Fix #152151: Change paths in bottled dylib
  • Quotes needed around ENV variable in IF
  • Sign macOS package on Travis-CI
  • Add Makefile option for Jack, Portaudio, PulseAudio
  • Make QWebkit and StartCenter webview optional
  • [Travis] add a way to insert keys
  • Fix #193526: Create APPX for Windows Store

Templates and instruments

  • Marching perc. improvements in instruments.xml, new template
  • Fix #111531: Add marching band and percussion templates
  • Add brass band, small concert band, small marching templates
  • Fix #105666: Add support for Croatian instruments (Tambura)
  • Fix #104896: Add sackbuts to instruments.xml
  • Rename "Baroque Flute" to "Traverso"
  • Added european bb sousaphone instrument
  • Fix #12489: General "Percussion" staff
  • Fix #111431 and fix #111311: Some additions/corrections to instruments.xml
  • Fix #115911, fix #115916: Add Uke with low G and fix wrong string for Bar. Uke
  • Make piccolo flute and all string basses transposing instruments with standard clef, instead of non-transposing instruments with octave clefs
  • Add "Guitar (Treble Clef)" to instruments.xml
  • Adjust Marimba range
  • Add slap and pop channels to plucked basses
  • Fix Dizi channel
  • Add Irish Tenor Banjo, incl. Tablature
  • Change My First Score to Untitled
  • Fix typo in chords_jazz.xml
  • Add nyckelharpa

Miscellaneous improvements and bug fixes

  • Fix #113396: High CPU usage with navigator on
  • Fix #110796: Batch conversion from the command line; speedup vtest by using this
  • Fix #109626: Add option to force loading score in converter mode
  • Fix #104936: Atomic update sfPath->mySoundfontsPath
  • Fix #114956: Let cmdDoubleDuration() and cmdHalfDuration() reach more values
  • Fix #106266: Avoid unicode flats and sharps in filenames
  • Fix #104881: Arrow up/down and Delete keys stop working in other open scores after piano roll editor is opened in another
  • Fix #116276: Change enharmonic doesn't work as expected with linked staves also selected
  • Fix #136406: Non-Reduced ratio tuplets of full measure duration not copy-pastable
  • Fix #107556, fix #151446: Fix selection of measure after R or paste command
  • Fix #150141: Text in textframe disappears with Ctrl-C
  • Fix #107891: Selection lost on enharmonic change with accidentals
  • Fix #117656: Appended measures in different time signature. Thanks to PR #2729.
  • Fix #117546: Fix deleting first measure of part with key sig
  • Print: fix page size/orientation settings
  • Fix #125791: In continuous mode only first page of score gets printed
  • Fix #115971: Read-only access to std::vector, QVector and QList properties for qml
  • Fix #117206: OSC command /Tempo processes the parameter value wrong
  • Fix #111116: Cannot add courtesy accidentals for a tied note
  • Fix #113556: Note input toolbar not accessible via tab
  • Fix continuous panel flicker at beginning of system
  • Partial fix #106241: Add -D option to specify monitor DPI
  • Change copyright in About Box to 2017
  • Fix #150511: Remove default shortcut F2 for transpose up/down
  • Fix #153671: PDF export of parts doesn't have correct title metadata
  • Fix #164391: Don't mark score dirty on Save Online when only updating it
  • Fix #169161: Replace Public Domain mark with Creative Commons Zero in Save Online
  • Fix typo Execure > Execute named plugin (command line)
  • Fix #175346: Cannot enter special characters into tempo change
  • Fix #176151: Multibyte chars are not deleted correctly in text
  • Fix #72896: Image capture "save as" field is blank
  • Fix #176631: Select / More... selects wrong voice dots
  • Fix #178271: Select / More... selects tuplets in all voices
  • Fix #166651: Inability to select fingerings in different voices
  • Fix #125756: Inability to select notes in same voice, staff...
  • Fix #181131: Selecting flags by voice doesn't work
  • Fix #181341: Selecting accidentals by voice doesn't work
  • Fix #177116: Inability to select ties in a range selection if the last measure is also selected
  • Fix #85631: Range select -> Notes button in Inspector includes grace notes in list selection, disabling Inspector
  • Fix #177586: Slurs disappear, in the most cases, after editing and Escape if the bordering note
  • Text::drop when not already in edit mode needs to handle Supplementary Unicode
  • Fix drum note entry, avoid to be blocked in chord mode when mixing drum/melodic
  • Fix #180171: Change modifier key from Ctrl to Shift, to create chord with on-screen piano keyboard
  • Don't autosave unchanged "imported" 1.x scores
  • Don't look for SoundFonts in hidden directories
  • Allow saving audio to QIODevice
  • Fix #181616: Disable change anchor for Instrument Change text
  • Fix #181671: Restrict all text drag to page boundaries
  • Expose default synthesizer state
  • Expose the application QNetworkAccessManager
  • Fix #165741: Applying shortcut beam designations to multiple notes causes error
  • Fix #101256: Master palette locks up during search if text string does not match any symbol
  • Add access to TimeSig for plugins
  • Add ability to run plugin before converting in json job
  • Fix #51741: No beam for stemless slash notation
  • Fix ornamentDownPrall composed glyph definition
  • Fix #183816: Full measure rest displaced after time signature Change
  • Add minimal support for triple dots

Mac-specific changes

  • Fix #104986: [Mac OS X] Full screen shortcut does not work to enter full screen, only to exit
  • Fix #102486: Add alternative full screen shortcut Ctrl+Cmd+F
  • Fix #120801: Make MuseScore unexecutable on Mac OS X 10.6 or earlier
  • Fix #182336: Color Picker window gets larger every time it's used
  • Fix rendering of non-square icons on high-dpi displays (done earlier in version
  • Fix #127076: Store QColor as string in preferences file (done earlier in version

Linux-specific changes

  • Fix #122076: No "update" tab in preferences for Linux
  • Add higher resolution icons on Linux


  • Fix/update language codes of qt_*.ts files
  • Simplify texts in various dialogs, for translators' benefit
  • Fix #109711: Don't translate filename extensions
  • Enable translation for paper format
  • Fix #115191: Wrong translation on English (AU)
  • Fix #123531: Separate Flemish from Dutch Qt translation
  • Fix #126901: Swap directional icons for RTL languages
  • Fix #124026: Update Qt's Arab translations
  • Fix #64046: Korean input method on Windows doesn't work with Shift
  • Partially fix #92591: No feedback while typing Korean
  • Fix #176601: Supplemental Unicode select, insert, paste
  • Fix #43681: ScoreView text edit ignore Ctrl/Shift/Alt/Caps for Win Japanese IME and fix InputMethod position when editing Chinese/Japanese text, do not rely on QInputMethod::locale() for CJK test

New languages

  • Welsh
  • Arabic (Sudan)
  • Arabic (Egypt)
  • Arabic (Algeria)
  • Malayalam
  • Scottish Gaelic

New contributors

Thank you to everyone who contributed to this release, and a special shout-out to the 20 new contributors:

Release notes for MuseScore 2.0.3

MuseScore 2.0.3 was released April 6, 2016.

New features

UI improvements

Playback improvements

See also playback bugs fixed below.

Known incompatibilities with previous 2.0.x

  1. In order to make MuseScore files more compatible from one OS to an other, MuseScore 2.0.3 now ships the same version of FreeType for all operating systems. FreeType is the library which helps MuseScore to find out about the width of a notehead, for example. All the score elements metrics (but not the text) are now given by the same FreeType library. That should improve consistency across operating systems (i.e., a given score should be rendered the same on any OS with 2.0.3), but it also means that some scores might be rendered slightly differently than in 2.0.2.

  2. Slurs from one note with a stem to another note with an opposite stem are placed better in 2.0.3. Therefore, any manual adjustment to slurs in this configuration made in previous 2.0.x will look different in 2.0.3.

  3. MuseScore 2.0.3 adds cresc. and dim. dashed lines. Previous 2.0.x versions do not support this feature, and will display these lines as regular, solid hairpins. If a given score is then saved with an earlier 2.0.x and re-opened in 2.0.3, 2.0.3 will attempt to re-create the original dashed text line, but only with the default text and text properties—any changes from the defaults will be lost in this process.

Bug fixes and minor changes


  • Dragging score view no longer clears selection
  • Make synthcontrol and mixer persistent
  • Make tab index in sythesizer dialog persistent
  • New way to init diagrams from code using X-12O2 notation
  • Fix #71001: 'loading' window at startup does not close if using Qt library version == 5.5
  • Fix progress bar issues on exporting audio
  • Fix #71441 add cancel button to zerberus sfz loading
  • Fix #72491: text properties in lines added by double click
  • Fix #69866: unable to navigate into next measure in voice 2
  • Select rest (or top remaining note of chord) on note or rest delete
  • Ambitus: Ignore non-played notes
  • Fix #50686: problems with slurs crossing to higher staves
  • Fix #74021: crash on transpose with frame text selected
  • Fix #73821: toggle rhythmic slash notation does not follow links
  • Fix #73801: SECTION_BREAK on non-measure MEASURE_BASE does not reset measure numbering in next section
  • Fix #63041: editing spanner length with tuplets
  • Fix #73051: editing spanner length with multiple voices
  • Fix #70416: crash on 2-note tremolo of unbeamed 16th or shorter
  • Delete audio files on cancel when exporting audio
  • Fix #73966: bad system spacing with lyrics or spacers at page break
  • add text style type in Inspector
  • Fix #74881: crash on copy of rest into mmrest
  • Fix #22994: cross-staff grace note layout
  • Fix #58061: partial beam wrong direction in tuplets
  • Fix #75116: Add a break page by dragging it in an empty space in a score with hidden empty staves causes a crash
  • Fix #74951: hairpin appears to remain selected
  • Fix #74961: initial octave guess on note input wrong after mmrests
  • Fix #75861: crash adding timesig to note or rest on page >1
  • Fix #81456: timesig paste fails
  • Fix #53271: Beams retain slope when spanning rests
  • Fix #84296: bad import of certain chord symbols
  • Fix #84676 - Figured Bass continuation line thickness and vert. pos.
  • Fix #84806: crash adding note that creates tie in tab staff
  • Do not update Inspector if not visible. Reduces delay / lag of selecting an element.
  • Fix #83441: crash on paste of chord symbols past end of score
  • Fix #74746: diatonic transposition produces tpc corruption with transposing instruments
  • Fix #83266: Repeat measure from MuseScore 1.3 is not imported correctly in MuseScore 2
  • Limit tempo when follow text is active, allow trailing space in tempo text
  • Fix #82671: Copy pasting a single lyric syllable doesn't work
  • Fix #81501 : copy/paste containing HTML name issue
  • Fix #81371: crash/hang with frames at end of score
  • Fix #78066: add 'bass' and 'pedal' chord symbols
  • Fix #76531: handling of spaces within chord symbols
  • Fix #77366: crash adding cross-staff tie
  • Fix #78231: crash pasting chord symbol onto fret diagram
  • Fix #91271: Crash on save after creating new part from score with connecting barlines with parts selected in bottom-to-top order
  • Fix #31676 Play first note when moving multiple notes with same pitch and tuning.
  • Fix #103646: Crash after copy-paste linked measures before a system change with multimeasure rests
  • Fix #103156 Fix #74871: fixed unpredictable behaviour of adding self created time signature, fix selection of added time signature in Master Palette
  • Fix #103886: slur creation between grace notes and main notes
  • Fix #81716 update stringData frame upon instrument selection
  • Fix undo of linked staff addition when part is present
  • Fix #94911 Crash after deletion of a linked staff in a score with parts
  • Fix #99796: Linked staff becomes unlinked (causing corruption) after delete of part
  • Fix #89636, Fix #94911, Fix #70226, Fix #91351: unlink the right staves when deleting a part, or deleting a linked staff. Do not store several times the same staves in linkedStaves
  • Fix #8360: Transpose by Key doesn't transpose by perfect octaves (when transposing up or down)
  • Fix #102071: sym not processed in line properties
  • Fix #101916: undetected conflict with standard keys
  • Fix #71256: Updating Bagpipe Embellishment pitches and instrument range for correct displaying
  • Fix #102236: Palettes menu entry not translatable
  • Fix #88741: selection lost after insert measure with mmrests enabled
  • Fix #89576: reset spanner segments in range selection on Ctrl+R
  • Fix #99221: corrupt undo of delete range starting with mmrest
  • Fix #91471: alternate fix that also improves undo behavior
  • Fix #91471: layout issues and crash on system with hbox only
  • Proper error messages when pasting in local time signature or tremolo
  • Cheap partial fix for #51626: disallow copy/paste with local time signatures
  • Fix #62341: transpose chords on staff transposition change
  • Fix #78636: insert before frame fails
  • Fix #101386: crash on undo of add with inspector not shown
  • Fix #100481: "Reset Beam Mode" on selection, or entire score
  • Fix #100406
  • Properly close startcenter when a score is opened from a link
  • Fix #101371: comment out the help engine initialization
  • Fix #100626: crash on copy that removes slur
  • Fix #99236 remove mscoreGlobalShare/sound from soundfont path
  • Fix #98756: Scaling of symbols in part set to scaling of full score
  • Fix #21448 Fix #98826 note input cursor ignores the staff scaling
  • Fix #98761: Deselecting a staff not possible via shift +up/down
  • Fix #87331: crash on full measure rest command with mmrest
  • Fix #98711: Crash on startup if displaying Start Center with 1.3 scores
  • Fix #63856: don't move rehearsal mark to beginning of system
  • Position fingering relative to accidental
  • Fix #95826: avoid crash when switching scores while in edit mode
  • Fix #88221: crash on create tuplet with hyphenated lyric
  • Fix #88061: bad staff spacing with lyrics in multiple voices
  • Fix #95051: bad melisma layout after hbox
  • Fix #97931: system initial barline type lost on reload
  • Fix #84156: ottava drawn to measure rest with notes in other voices
  • Fix #72721: don't show invisible lines if 'show invisible' is turned off
  • Fix #78421: Time Signature dialogs use Emmentaler and MuseScore 1 background color instead of Bravura and MuseScore 2 background color
  • Fix #53696: Export as audio gets stuck at 99% with some file and some soundfont
  • Fix #96971 suppress benign make release warnings
  • Fix #95636 changing first tick of a Spanner should update its index in the SpannerMap
  • Fix #97826: extra distance scaled incorrectly on reload
  • Fix #96951 remove debug warnings by explicitly casting enums to int
  • Fix #96626 signed chars for MidiMapping, StaffTypes, TextStyleType
  • Fix #96246: crash removing null lyric
  • Fix #5098: tpc corruption on copy of note
  • Fix #95461: add full measure rest in note input mode
  • Fix #95866: crash on export of fretboard diagram
  • Fix #95951 use signed chars for BeamMetric to fix ARM type limit issue causing long stems
  • Fix #95351, Fix #93131, also fix a crash when changing page arrangement with no score opened
  • Fix #92331: following chord deleted after voice change
  • Fix #95226: printing problems when using pageOffset
  • Fix #93006: layout shift due to overestimating size of courtesy signature
  • Fix #25763: allow full measure rests to be created in voices > 1
  • Prevent possible crash when cloning spanners
  • Fix #95076: Crash after a copy-paste chord symbols and Undo
  • Fix #33541: some elements can get marked invisible, but this doesn't get saved, so is lost on reload
  • Fix some texts for translation
  • Fix #93316: slur still lays out to deleted note
  • Fix #81731: Crash when repeatedly pressing Shift+A
  • Fix #84351: Crash when saving with instrument name selected and continuous view
  • Fix #93911: & in Volta text corrupts score
  • Fix #89951: preserve key signature when deleting first measure
  • Fix #89401: delete first measure removes timesig from parts
  • Fix #93946 : reset text to style in inspector not working for dynamics
  • Fix #94711: Crash when saving after deleting a staff from grand staff in score with parts
  • Fix #75311: Shortcut conflict, 'p' dynamic glyph and Plugin Creator
  • Fix #90766: bad layout with hbox at end of system followed by mmrest
  • Fix #86916: don't translate drumset shortcuts
  • Fix #90811: allow dots in filenames
  • Fix #91911: crash customizing palette with 'More Elements' enabled
  • Fix #92626: corruption when removing all existing staves and adding new ones
  • Fix #74801: Custom palettes not working on OS X
  • Fix copy/paste & palette add for figured bass & lyrics
  • Fix #91536: crash adding figured bass to palette
  • Fix #88746: unable to save files
  • Fix #88756 - Disable unnecessary actions in text editing states
  • Cheap Fix #88291: disable shift+left/right in cases where it fails
  • Fix #85641: preserve fingering user offset on paste
  • Fix TremoloBar drag&drop
  • Fix #86196: License text displayed in a hard to read font on Windows
  • Add property button to Bend and Fretboard Diagram in inspector
  • Fix #85781: allow slur and tie selection by voice
  • Fix #76006 append first measure before perform minWidth2() calculation
  • Fix #72051 : reset text to style causes HTML escaped sequences to disappear
  • Fixes #19155, #22861, #23100, snap glissando to notes, ability to add parallel glissandi.
  • Fix #74946: crash on paste with end segment in mmrest
  • Fix #78216 no courtesy key or time sig if section ends on non-measure
  • Fix #78196 courtesy clefs should not display on final measure of section if section break occurs on subsequent non-measure MeasureBase frames
  • Fix #83286: unable to tie with grace note in higher numbered track of instrument
  • Fix #71901: layout of cross staff seconds
  • Fix #75826: barline offset not saved
  • Fix #78261: text style not honored when adding repeat via double click
  • Fix #21950: Crash in Debugger, Layout button, in experimental mode (-e)
  • Fix #104171: Crash by flipping an articulation or ornament on a grace note
    Fix #84876: extend selection to left with last measure selected


  • Fix #19871: no swing on tuplets
  • Fix #71826 added test case, glissando playback was confused about which staff to measure line in
  • Fix #72091: sf2 volume discrepancies caused by attenuation handling, thanks @jimbo1qaz for the investigation in PR #2152
  • Improve sfz parser for ivyAudio piano
  • Fix #73531 ending measure has jump and repeat
  • Fix #73486 #73496 rewrite jumpToStartRepeat condition evalation reordered
  • Fix #65161 repeatlist unwind section by section
  • Fix loop final repeat marks ignored - #75566
  • Fix #100791: Wrong tempo after fermata if tempo change added in front


  • Fix typo in instruments.xml. see PR #2149
  • Fix Erhu channel.
  • Fix Tin Whistle short name
  • Fix barbershop template's upper range of bari/bass staff
  • Fix #103991: transpose some bugles and fix their clef


  • Album::createScore now tries to append all excerpts for each score.
  • Album: join only the scores and not the parts if the number of linked parts is different
  • Fix #78521 prevent segfault when append scores without any measures
  • Fix memory leak in Album()
  • Fix #76101 join score w/ generated initial clef

Piano roll

  • Fix #100536 [Feature Request] pitch up/down feature in the piano roll.
  • Fix #100551 : [Piano Roll] Unable to select a note that contains some events when it is sandwiched between normal notes.
  • Fix #100636 : [Piano Roll] The score view doesn't paint correctly when selection in the piano roll changes.


  • Add Irish language
  • Add Serbian Cyrillic (sr_RS) language (see #87871)
  • Fix #83276 set global layout direction for right to left languages
  • Use local encoding for Portaudio device and api and so display correctly chinese devices


  • Expose globalDuration to scripting
  • Make user home directory accessible to plugins
  • Fix #96631 Expose TextStyleTypes to QML
  • Fix #100181 update internal segment reference of cursor after addNote update plugins after fixing input position in Cursor.addNote added initial test run for cursor
  • Fix #90891: corrected references to first and last segment for QML definition
  • Static functions currently not callable from QML see also
  • Fix #93976 wrapper function for Ms::Score::firstSegment supporting QML and Ms::TimeSig::setSig
  • Fix #95821 expose result of Score::tempo(tick) as Cursor.tempo


High DPI

  • Fix exampleview.cpp for high DPI screens
  • Fix note_groups.ui for high DPI screens
  • Fix #95466: wrong size palettes with 0.8 scaling when using 120 DPI display
  • Fix #94856: some palettes too small on high DPI displays
  • improve drawing of radiobutton on retina display

MusicXML import/export

  • Fix #98136 - [MusicXML import] extra instrument when importing multi-instrument part starting with rest(s)
  • Fix #96386 - [MusicXML import] testSlurs2.xml failure
  • Fix #95366 - [MusicXML export] end repeat missing in multi-measure rest
  • Fix #85786 - Export then import of specific MusicXML file gives score with no notes
  • Fix #69566 - orruption importing MusicXML file with irregular triplet
  • Fix #70236 - import properly from MusicXML files with no staff names
  • Fix #72206: [MusicXML] Corrupted import if key signature is no minor or major
  • Fix #25982 - invalid MusicXML when instruments are missing from drumset
  • Fix #72211: [MusicXML] Import of Harmony and Forward/Backward create corrupted file
  • Fix #71876: MusicXML file import causes crash
  • Fix #59291 - [MusicXML export] System-crossing clef change not exported
  • Fix #46861: [MusicXML] Add support for melisma in import and export
  • Fix #59811 - Fermata over rest not exported to MusicXML
  • Set normal-type for MusicXML tuplets with unusual ratio
  • Fix #92871 : MusicXML notehead -filled- element not imported/exported
  • Fix #86636 : MusicXML import of tuplets yields elements with zero duration
  • Fix #14884 repeat start or repeat end on single measure is correctly imported from MusicXML files
  • Fix #92306 - crash when importing MusicXML with invalid time sig
  • Fix #88376 - MusicXML export does not export clefs after removing first measures
  • Fix #94596 - MusicXml - Lyric sylable output twice
  • Fix #93031 - invalid MusicXML for stafftext containing only formatting
  • Fix #18144 - MusicXML straight arpeggio don't export
  • Fix #43756 - export fingering to musicxml format is not correct

Other format import (GP, MIDI, Capella Ove)

  • Fix drum clef import in ove
  • Fix #20911: [Capella import] file with title results in several vertical frames, 2 containing nothing but a #
  • Fix #86921: Dots are not displayed in .gpx format
  • Fix #88021: Time signatures with compound-time are corrupted in .gpx format
  • GP6, do not try to import grace notes for now. Simple fix for common anacrusis.
  • Fix #88036: In a multivoices context, Voices 2-3-4 are lost in the .gpx format
  • Fix #98751: [GP6] Nylon guitar imported with the piano sound
  • Fix #99746: [GP6] Import of double dot causes infinite stems and leads to a crash
  • Fix #85856: MIDI import - better handling of Yamaha SG SysEx block

SVG Export

  • Fix #86686 9 SVG Export Improvements
  • Clean up exported svg, remove redundant g elements


  • Linux AppImage nightlies for x86_64, x86 and arm, thanks to @shoogle and @ericfont
  • Fix #57736 and improve Debian packaging to enable Ubuntu nightlies
  • Fix #72731 win32 large-address-aware
  • Make release tests pass
  • Fix for arm, where char by default is unsigned
  • Fix #76331: Linux Makefile uninstall target doesn't remove directories
  • Fix #76326: build only uses one processor core on Linux
  • Fix #72061: different splash image for development builds
  • fix compilation without script interface
  • Add freetype-2.6.1 as thirdparty
  • Fix #92521: make pulseaudio support optional

Thanks to

Release notes for MuseScore 2.0.2

MuseScore 2.0.2 was released July 16, 2015.


  • The first book for MuseScore 2 is released: Mastering MuseScore
  • Playback of trills and other ornaments as well as glissandi and bends, with controls to customize or disable the effect
  • New templates: various classical chamber groups, vocal ensembles, orchestras, and concert band
  • Palette improvements: clefs, key signatures, time signatures, lines, and other palette elements that formerly required drag and drop can be added to a selected range via double click
  • Search box in Symbols palette
  • Zoom to 100% shortcut (Ctrl+0)
  • Tremolo rendering improvements
  • New symbols: treble clef with parenthesized octave indicator, pedal line with release symbol
  • Improvements to Bravura and other music fonts
  • Improvements to the default FluidR3 soundfont

Misc. bug fixes

#69161: [GP] Issue with barlines in Bass parts
#45221: Layout changes after action
#32886: In Continuous View, the last visible measure is moved under the continuous panel
#68131: Stave properties window cannot be resized (and default size needs to be "minimum")
#37346: Can't enable Pan roll during playback
#68041: Zoom to 100% command (and shortcut)
#68331: Lines other than ottavas should not start at accidental
#68466: Lines in empty measures change length on toggling multimeasure rests
#63176: Note input cursor glitches for voice >1 when advancing into gaps
#68956: Barlines disappear in one-line drum staff when reducing span - new when hiding/unhiding staves
#68921: Reordering instruments within barline spans creates "custom" barlines that won't extend properly
#41786: Bar lines too short in tablature after amending linked (or not) staves.
#68946: metatag $n in PDF of parts+score should be constant equal to total number of pages, not cumulatively increasing with each part
#60791: A time signature change deletes all voices >1 in Tab staff with linked staves
#67516: Add traditional Ped / * line to Advanced palette
#67621: Repeat dots show on hidden / empty staves for multi-staff instruments
#65996: Creating joined score with less instruments/staves in subsequent scores vs. the first yields corrupt score
#67031: Copying measure with gliss spanning into next bar copies gliss but doesn't display it
#67836: Transposition of score by key gets incorrect interval if first stave is unpitched
#60491: Frames can be set to have 0sp height or width, but this is not saved
#66576: Opening a score createted via "Save selection" of a linked staff causes a crash
#66321: Some default bends type are badly displayed
#59301: Deleting measure with clef change corrupts clef map
#63231: Changing "Actual Measure Duration" under a volta causes crash
#66441: Continue last session plus StartCenter doesn't work
#65786: Crash or loss of data on save/reload on paste to text frame
#54221: Horizontal frame before last measure of system creates crowded layout
#29686: Positioning, angle and length of tremolo between notes incorrect
#45356: manual position of a line (8va, cresc., etc.) not preserved on copy/paste
#66776: "V" shortcut does not affect the ties and slurs which extend on the following system
#64141: Add "Whole note = n" to tempo texts
#65066: Score elements not deselecting after "select all" option
#66826: Key change not displayed at start of system with "Generate key signatures" off
#67026: Parts do not pick up articulation applied with keyboard shortcut
#62091: Musescore crashes when selecting all notes and switch to voice 1
#67001: Crash on opening file with apparently invalid note anchored textline
#66946: Null/Empty/Invalid Jumps should either not interfere with playback or should report error
#58821: Shift+left arrow key from single selecion before multimeasure rest leads to range selection up to end of score
#63961: "Fake" barlines on score missing on some instrumental parts and disappearing completely after a save.
#60871: Adding Time Signature at Clef change ignores new clef while still showing it
#64251: Adding ornament on tablature causes crash
#66076: When entering note too long for measure, tie not created in linked staves/parts
#65861: Copy paste of single chord symbols does not transpose
#65421: straight arpeggio down plays notes in wrong order
#66276: My First Score shifts from A4 to Letter after load in USA (or Canada?)
#66241: Grace note offsets in linked TAB not saved
#66061: A score creation with two instruments and linked staves is corrupted immediatly after entering a note
#65961: Dotted Line to Anchor Text
#65831: Links and manual adjustments to bends not saved
#65116: Metronome is wrong if 4/4 after 2/2 (equivalent time signature)
#65041: Breath marks cause spacing problems with chord symbols
#64961: Drum parts have the same MIDI port
#64911: Repeats display with space when clef is removed
#64861: Linked tablature fret with dot doesn't display bracket
#64856: Accented characters at beginning/end of lyrics ignored with respect to alignment
#64696: [MusicXML] Wrong midi port when exporting Instrument Change
#64506: Repeat measure reports as corrupt when saving online, corrects itself on save / reload
#64266: Fretboard diagrams do not remain attached to staff at the correct location
#64241: D.S. from within repeat bars to a Segno outside crashes on playback
#64206: Repeat Measure sign in one staff of multi-stave inst. causes repeated playback of all staves
#64201: [MusicXML import] corruption caused by whole-measure rests with type whole
#64041: Problem writing -^b9
#63096: Text not kept when moving (cut-paste) an existing rehearsal mark
#63786: Tuplet text style applies only after save and reload
#63711: No naturals appear for change to open/atonal key signature
#63706: Dynamics and Tempo: reset to style in text properties produces a wrong result
#63676: Follow text for tempo should work if the style of the text is changed
#63561: TAB - Modified stem direction - don't work properly
#63481: Symbol lines and symbols ignore small staff size
#63366: Naming new workspace: slash, asterisk, etc. not escaped or filtered; write of workspace file fails
#63081: Crash in repitch mode entering note in voice >1 with no chord/rest at cursor
#62506: [MusicXML import] crash editing The Stolen Child full score.xml
#62236: Apparent corruption on copying a two-note tremolo across a barline
#61476: Corruption reading empty measure with 7/4 actual duration
#61061: Crash when scrolling in panoramic view and mmRest
#60931: Deleting multiline text in frames cause crash
#60891: Split a measure by selecting a rest or note beginning on the first beat causes corruption
#59226: [Musicxml import] crash if notations on rest
#59161: Crash on importing 1.x score with slur without start chord
#63641: Hitting Enter in Page Settings with "OK" button highlighted instead does "Apply to all Parts"
#62961: Double-clicking hairpin in palette with list selection causes X number of hairpins to all be stacked at the exact same position
#62956: Regression in MuseScore 2—clicking note then shift-clicking measure leads to list selection instead of range selection
#62276: Viola da gamba in 2.0 missing pizzicato and tremolo channels
#61106: "Reset Stretch" Does not affect mmrests if more than mmrest is highlighted
#60746: Symbols appear at wrong height for staves > 1
#60651: Fret conflict shouldn't be exported to PDF or printed
#60631: 2.0 nightly - No line number reported in MSCZ XML errors
#60571: Select similar spanners in a range selection doesn't work
#60486: Color of voice selector in Staff Text Properties is not the same than in toolbar
#59766: Stems do not align with DO and TI note head
#59316: Instruments marked invisible should not get shown in the create excerpts dialog
#49246: Some elements duplicated on time sig change
#53081: Respell pitches mode adds note to chord when input is by mouse.
#59861: Tick "stemless" in measure properties for an irregular triplet and dotted notes causes a crash in Tab staff
#59176: crash when running "Add/Remove Line Breaks" against score or part with multi-measure rests turned on
#58971: Changing voice of grace notes creates corrupted score
#58926: Pasting image causes a crash
#59171: Pressing a key in Piano Keyboard window sustains indefinitely (if sound supports it)
#59881: Check "stemless" in Measure Properties works badly in Tab staff
#59821: shift+letter adds note according to current cursor position rather than position of added note
#58796: Bracket and instrument name misaligned to one-line staff
#57261: multi-notes tremolo not played back correctly
#50011: Continuous View—part names overlap
#43181: First instrument names misplaced in continuous view when barlines are joined

Release notes for MuseScore 2.0.1

MuseScore 2.0.1 was released May 5, 2015.



  • Display "Report a bug" and "Copy" button in About box
  • Fix "copy revision" button in About box on Retina display
  • Move Add button in time signature dialog in the same corner than in the key signature dialog

Templates and instruments

  • Add Chamber Music templates
  • Custom template files are now in the second category
  • Add Violins, Violas, Violoncellos and Contrabasses
  • Add Ukulele and Ukulele Tablature to the list of common instruments
  • Better abbreviations for Euphonium, Tuba, and Double Bass


  • Add command line option -w to disable the webview in startcenter
  • Add command line option to create template
  • Add originalFormat as metatag when importing a file

Misc. bug fixes


MuseScore 1.3 compatibility

MIDI import

Other imports



  • Make some more text translatable
  • Update translations


  • Change wording of error messages
  • Check for corruption before upload

Release notes for MuseScore 2.0

MuseScore 2.0 was released March 23, 2015.

MuseScore 2.0 is packed full of new features and improvements.

User interface

  • Continuous view - scroll horizontally through your score with no line or page breaks
  • Start Center - start-up window which lets you easily pick up your work in progress or create new scores—and includes old MuseScore Connect, which puts a MuseScore composer in the spotlight and links to the MuseScore music sharing website and social media
  • Inspector panel - easily alter parameters (e.g., positioning) of any element
  • Piano keyboard - on-screen piano keyboard for note entry
  • Customizable palettes and workspaces - Basic and Advanced workspaces included by default, or define your own


  • Selection filter - choose which types of elements to select for copy and paste operations
  • Re-pitch mode - replace pitches without changing rhythms
  • Image capture mode - save rectangular selections as graphics
  • Explode/Implode - separate chords onto multiple staves, or combine multiple staves into chords
  • More precise manual adjustments - nudge nearly any element any direction with keyboard or Inspector

Musical notation

  • Tablature support - variety of tab notation styles for guitar, bass, lute, and more
  • Fret diagrams - easily create diagrams and set up your own palette of commonly used chords
  • Dynamic text styles - changes automatically apply to all elements with that style
  • New fonts - three musical fonts to choose from, with matching text fonts
  • Flexible chord symbols - enter chord symbols using any common spellings, including support for German and solfege note naming and lower case minor chords
  • Slash notation - fill selection with beat slashes, or convert notated rhythms to slashes on, above, or below staff
  • Layout improvements - automatic correct positioning and spacing for multi-voice chords and rests, dots, accidentals, ties, articulations, hairpins, pedal markings, voltas, etc.
  • More supported notations - pedal change markings, grace notes after (trill endings), falls/doits/scoops/plops/bends, bagpipe embellishments, figured bass, ambitus, early music notations, more flexible time signatures, and a huge set of additional music symbols from Steinberg's new open source Bravura music font


  • Guitar Pro import - supports GP3, GP4, GP5, and GPX formats
  • Import PDF - addition of an OMR service to import PDF files
  • MusicXML import/export improvements - greater compatibility with other applications, ability to control degree of layout to be preserved
  • MIDI import improvements - automatic simplification of rhythms, handling of multiple voices
  • MP3 export - in addition to other audio formats WAV, FLAC and OGG
  • Save online - improved integration with for online publishing


  • New SoundFont - MuseScore's own more realistic Fluid R3
  • Mid-score instrument changes - play a different instrument on the same staff
  • Flexible swing style - swing eighth note or sixteenth note, set swing ratio
  • Built-in metronome - one click to turn on metronome during playback
  • Improved JACK support - for interoperability with other MIDI and audio programs
  • Playback of more score markings - crescendo, decrescendo, smart tempo text interpretation, tremolo, mordents, improved repeats and voltas, etc.

Score management

  • Linked parts - changes in score automatically reflect in parts and vice versa
  • Albums - combine several scores, e.g. multiple movements, into albums
  • Styles - define and apply custom score styles, select default styles for scores and for parts
  • Split and join measures - divide measure into shorter ones or combine measures into longer one


  • Keyboard shortcuts - expanded availability of actions and many more shortcuts by default
  • Documentation - extended handbook, available in print-friendly HTML and as PDF download
  • Translations - into more than 50 languages, which can receive updates via the web
  • Screen reader - support for NVDA screen reader (Windows-only) to read the music verbally
  • Contextual help - new online help (F1) system aggregating online help resources

Release notes for MuseScore 1.3

MuseScore 1.3 was released February 28, 2013.

MuseScore 1.3 is mainly a bug fix release. Two bugs causing a major nuisance and a dozen of smaller ones have been fixed. No new features have been added. The translations and the handbooks have been updated.

Bug fixes


  • Fix #19148: Distortion in sound playback after several measures of play due to reverb
  • Improve the stability of the sequencer and user interface interaction


  • Fix crash when loading files with invalid tuplet
  • Fix crash when exporting parts with voltas
  • Fix possible crash during MusicXML import
  • Fix crash when changing voices without valid input state

User Interface

  • Fix #16692: Save and Save As dialogue boxes fail to open when Title contains colon
  • Fix last element in file format combo box in the File -> Open Dialog is empty on Mac OS X
  • Fix Two percussion clefs in palette
  • Fix #16301: Verbose program listing in Add/Remove Programs
  • Change default shortcut for voices to Ctrl + Alt + Voice number (Previous shortcuts were not working on Mac)
  • Fix small icons on Windows and Mac
  • Add 1024x1024 icons on Mac OSX for retina display
  • Fix: Fermata applied to rest isn’t positioned where it was placed until score is saved and re-opened
  • Better looking new score wizard on Mac OS X
  • Fix: Two invisible boxes in 'Lines'



  • Windows binaries are now signed with an Authenticode certificate
  • Windows installer is also available in MSI format to ease the deployment of MuseScore through Group Policy
  • Both Windows installers are signed with an Authenticode certificate


  • Updated “Save online” plugin, cosmetic changes
  • Updated ABC import plugin, support for larger files

MuseScore 1.3 is packaged with Qt 4.8.4 on Windows and Mac OS X.

Release notes for MuseScore 1.2

MuseScore 1.2 was released March 14, 2012.

The focus of MuseScore 1.2 is stability, by reducing bugs. Only a very limited set of new features have been added. Translations and the handbooks have been updated. Estonian and Belarusian have been added.
MuseScore Connect has been updated.

New Features

  • New demo score: Reunion by Marc Sabatella
  • MuseJazz now includes diacritical characters (Thanks to Marc Sabatella and Jorg K)
  • Jazz Combo and Band templates by Marc Sabatella
  • Save absolute position of element in addition to "offset" for better upward compatibility with 2.0 version
  • UK Brass Band & Salvation Army Brass band templates
  • New drumset file for French drum notation (#14340)
  • Ability to move lyrics with left and right arrows
  • Internationalization of the plugin ("Save Online") and translation to French, German and Spanish

Supported platforms

On Mac, MuseScore 1.2 is released in binary form only for Mac OS X 10.6+ running an Intel processor.

Bug fixes


  • fix #11479: playback swing of quarter notes on counter beat
  • default reverb/chorus to minimum
  • fix #10331: In playback, note(s) do not stop when they should (repeat & note offtime)


  • fix #15147: Style Page Nums "show first" not checked, 1st page > 1: 1st page number still shown (mi)
  • fix default style of Frame Text
  • fix #7017: german chordnames (H / Bb)


  • Extract voltas correctly
  • fix #15059: save a newly created part doesn't remove the asterisk
  • fix #13357: Creating part causes crash (key sig corruption)
  • fix #12322: Exported parts close on command without a warning

User Interface

  • remove subbeam button
  • add Frame Text to Vertical Frame
  • use English note name in Edit Drumset dialog
  • change default drumset folder to "templates" dir
  • fix slur properties dialog title
  • translation of "staff properties" on instrument name
  • fix #15228: add perfect octave up and down
  • fix #15132: Create new score and quit/reopen presents incorrect dialog
  • fix #14648: Disallow copy of part of tuplets
  • fix #14992: Inserting measures corrupts score with tuplets
  • fix #3482: pasting after copy/cut creates note with wrong duration
  • fix #14409: Crash on copying tuplets
  • fix #14272: Add 'Can't open" dialog for unknown filetype
  • fix #14076: Add link in dialog for more recent file
  • fix #14036: Background Wallpaper Distortion
  • fix #13478: Zoom during playback using shortcuts
  • fix #13364: Score tabs disappear
  • fix #12161: Changing time signature should change autobeam properties
  • fix #12084: Crash when running transpose with title selected
  • fix translation of context menu on keysig
  • fix #15283: Paste and undo causes crash
  • fix #15460: Note Names without score causes crash
  • fix #15461: Remove Notes without score causes crash
  • fix #15458: Break Every X Measures without score causes crash
  • fix #15457: Undo Insert Measure after changing clef causes crash


  • fix #15123: Measure rest should be shown as breve if measure >= 4/2
  • fix #14917: Wrong bracket in nested tuplet
  • fix #14973: Transparent and truly vectorial embedded SVG
  • fix #14429: Articulations / ornaments in small staves are not small
  • fix #14420: Measures long 2/1 or more not cleared to measure rest
  • add two more chord names: sus#4 & Maj7b13
  • fix #10552: no more crash on undo, dynamic created
  • Incomplete fix #12966: Measure insert corrupts key changes
  • fix #5433: Staff with one line and repeat bars are not aligned
  • fix #4157: regression : Natural after a tie across barline
  • fix #1395: Accidental after a tied note
  • fix #12085: Enharmonics not preserved when toggling concert pitch in part > 1 octave
  • fix #12218: shaped noteheads aren't shared
  • fix #12419: Ledger lines are still visible for invisible notes
  • fix #11926: Pedal marking created in 1.0 are displayed incorrectly in MuseScore 1.1
  • fix #4893: Non-removable courtesy clef appears after insert measure before first one
  • fix #14648: disallow copy of partial tuplets


  • export MIDI with relative tempo set in Play Panel
  • fix pedal ending in MIDI export #12642
  • fix #13107: bww import: missing bagpipe doublings
  • fix crash on MIDI import for some files
  • fix #14064: crash on Capella import for some files
  • fix #7352: basic Triplet support for Capella import

Packaging and updates

  • add "Create desktop shortcut" option in Windows installer
  • reduce auto update check period

MusicXML import and export

  • reworked MusicXML voice mapper
  • add dynamic and note velocity support in MusicXML export/import
  • fix #11927: Export duplicate chordnames
  • fix #15129: Empty measures are not imported
  • fix #11675: Crash opening MusicXML from Finale
  • fix #12276: Sub-optimal handling of different duration measures on import
  • fix #12394: Chordnames are not exported for grand staff
  • fix #12382: Key Signature for 2 Staves
  • fix crash reading MusicXML file with different key signatures on the first and second staffs
  • add MusicXML testfile for issue #12382 ("Key Signature for 2 Staves")
  • fix #13183: Wrong import of right barline
  • add testfile for #13860: Support lyrics exported by Sibelius 7
  • fix #13782: Errors in Import and Crash after closing
  • fix #5947: Slurs is not well placed with grace note
  • fix #12445: Import can produce empty voice 1: set (automativally) generated rests to invisible
  • fix #12349: Wrong placed slurs after importing a MusicXML file
  • fix #12445: Import can produce empty voice 1
  • fix "variable set but not used" warnings in importxml.cpp
  • fix #11221: Don't set "Break multi measure rest" when importing from MusicXML
  • fix #13860: support lyrics exported by Sibelius 7
  • updated MusicXML testfiles: added sound dynamics="..."
  • fix #14088: Problem importing triplets from XML if tuplet element is missing
  • fix #14160: Problem importing tuplets from XML in a multi-voice context
  • fix #14118: Import of tuplets containing chords is incorrect
  • fix #14692: import error: 41g-PartNoId.xml causes crash
  • fix #14693: import error: 41h-TooManyParts.xml causes crash
  • fix #14828: import error: 46a-Barlines.xml: unexpected multi-measure rests
  • fix #14834: import error: 45e-Repeats-Nested-Alternatives.xml: repeat start missing
  • fix #14827: import error: 32a-Notations.xml: missing notations
  • fix #14862: Export notations imported by issue #14827
  • fix #14819: import error: 01f-Pitches-ParenthesizedMicrotoneAccidentals.xml imports without microtone accidentals
  • fix #14818: import error: 01e-Pitches-ParenthesizedAccidentals.xml imports without double flat in parentheses
  • fix #14832: import error: 41d-StaffGroups-Nested.xml: part-group symbol=line not supported
  • fix #14804: Bad pitch and alter exported for cross staff note
  • fix #14418: Voltas lost when importing MusicXML
  • fix #14701: Key signature is not exported from a mscz saved with 1.1
  • fix #14244: Export of trill line fails
  • fix #14825: import error: 31a-Directions.xml missing dashes and bracket
  • fix #15002: Export/import of uneven tuplets (16th, eighth, eighth, 16th)
  • fix #15033: Handle tuplet property "number"
  • support parentheses attribute for accidentals (preferred as of MusicXML 1.1)
  • import export volume and pan for each instrument
  • minimal support of page relative text on first page in import and export
  • fix #14590: import errors 23a-Tuplets.xml
  • fix #14451: import errors 02a-Rests-Durations.xml
  • fix #15325: Notes are interpreted as rests, wrong lengths, strange results
  • don't import tempo 0 as tempo text


  • fix #6649: Transposition when creating a score from a template
  • fix: Offset for offtime not saved
  • changes to tuplet handling to allow reading of corrupted files (#13350)

Plugin Framework

  • fix #13301: add score.close() to plugin framework
  • add score.version and score.fileVersion
  • add ability to test for no current score

Release notes for MuseScore 1.1

MuseScore 1.1 was released July 27, 2011.

MuseScore 1.1 is a bug fix release. The focus of this release was stability by reducing bugs, only a very limited set of new features were added. Several new translations were added.

New Features

  • MuseScore Connect
  • add sol notehead, alternative brevist notehead group, new symbols for old notation
  • fix #4526: Adding ties to chords
  • MuseJazz font includes triangle, circle with a slash, and other symbols for chords
  • MuseJazz font includes complete ASCII character set for text
  • New "MuseJazz" style to use MuseJazz for all text elements
  • New "Jazz Lead Sheet" template and style
  • New chord description (XML) files to switch between popular styles of chord symbols
  • Space / Shift-Space in chordname entry allows chords to be placed on beats with no notes
  • Tab / Shift-Tab in chordname entry skips to the next / previous measure
  • "Acoustic Bass" (pizz. default) added to instrument list

Bug fixes


  • fix printing of images (fix #10140: Save as PDF with several images causes crash)
  • fix #11245: MusicXML doesn't save Tempo Text if there's no name
  • fix crash on capella import with timesig 0
  • import part name from MusicXML
  • Add support for notehead color in MusicXML export and import
  • Add shape notehead support in MusicXML export and import
  • add MusicXML testfile for noteheads
  • import & export harmony even if not on chord/rest in MusicXML
  • fix #10849: musicxml exports lyrics only with notes in voice 1.
    note: file attached to not handled yet
  • fix crash on WAV export in fluid
  • fix #9919: error on open/read musicxml was not handled
  • fix #9842: Tempo value not exported in Lilypond
  • fix #9830: Percussion sounds not exported correctly in MusicXML


  • reduce default reverb gain from 0.5 to 0.2
  • fix #11164: Synth control status on startup and audio export
  • fix #5142: Notes do not release together in Swing or Shuffle mode
  • fix playback start position when repeat in the score
  • fallback to default soundfont if can't load the preferences one

Usability and interface

  • open MuseScore maximize on very first startup
  • fix entry of underline character in lyrics entry mode
    (for german keyboard press Strg+Umsch+"-", for english Ctrl+"_")
  • better handling of Tab key in text element
  • fix #11246: change default number of measures and pickup measure timesig
  • Restore ability to delete instrument name in place
  • Right click on instrument name for staff properties
  • new chordstyle is apply now immediatly
  • remove "what's this" in toolbar and help menu
  • remove delete button in symboldialog, fix system flag
  • fix #10935: fix Soundfont path //
  • fix #10934: double error message on opening a 2.0 score
  • add shortcut for navigating between score tab


  • add timesig object in plugin framework
  • add undo support for scnote pitch and tuning
  • add : chord.small, chord.noStem, rest.small, note.velocity, score.keysig, score.timesig
  • set notehead shape from plugin framework
  • more page format option accessible via plugins


  • fix #10915: Rename WRC to WRC.BAT in CMakeList.txt


  • fix #11267: Shift + drag tuplet, delete, undo cause crash
  • fix #10585: Accidental offset in small staves corrupted by saving and reloading (patch by Miwarre)
  • fix #10313: Align settings in Edit Text Style dlg box not stored (patch by Miwarre)
  • fix rest position for 1 and 3 staff lines
  • don't play midi note according to preferences (#10024)
  • measure number no more selectable to avoid crash on undo
  • barline at start of system not selectable to avoid crash on undo
  • can't create empty part anymore
  • fix #10564: Selecting voice before enabling Note Entry and entering notes causes crash
  • fix #9107: Pasting multiple multi-voice notes causes crash
  • fix #9805: Second Voice can end up broken
  • fix #9307: Nested tuplets causes crash
  • fix crash reported in comment 2
  • fix #1722: Continue last session tries to open discarded score
  • fix #9338: chordname scrolls offscreen
  • fix #10660: Continue last session & play panel enabled
  • fix #5900: Courtesy accidentals lost in transposition
  • fix #9332: Unable to create slash-headed notes on drum staff
  • fix #10165: Measure num. every n shows number (every n) + 1
  • fix #9342: repeat entry doesn't scroll display
  • fix #10048: Opening Page Settings causes crash
  • fix #10370: Shortcuts cannot be cleared, implement "reset to defaults" in preferences-shortcuts dialog
  • fix #10335: importCharsetList does not appear
  • fix #10264: Select a flag and enter a note causes crash
  • fix #7814: error with single-line-staff percussion notation
  • don't print blue frame around selected image
  • fix #7944: Instrument limit (again)
  • fix #9996: Chord navigation does not work on multistaff
  • fix #9883: Insert vertical frame between two parts of the same line (volta, cresc) causes crash
  • fix #9852: Measure number hidden by horizontal frame
  • fix #9792: Clef not displayed after changing clefs in previous measures
  • fix #9790: Pasting notes featuring key signature change and lyrics corrupts following bar
  • fix crash when inserting vertical frame (#9765)


  • New languages: Faeroese, Slovak, Lithuanian, Croatian, Belarusian, Vietnamese, Esperanto, Persian
  • All existing languages are updated from

Release notes for MuseScore 1.0

MuseScore 1.0 was released February 4, 2011.

MuseScore 1.0 builds further on the foundation of MuseScore 0.9.6 and the 3 bug fix releases released since June 2010. The focus of this release was stability by reducing bugs, only a very limited set of new features were added. Several new translations were added.

Important information for people upgrading

  • The keyboard shortcut for rests during note entry changed from Space to 0 (Zero). In MuseScore 1.0 Space now starts playback similar to most other media software. If you prefer the old shortcuts you can change them as explained in the handbook (see keyboard shortcuts)
  • Changing instrument names in front of staves involves an extra step. In previous versions you could double click on the instrument name and edit it directly. Unfortunately this method sometimes caused crashes or corruption and is disabled for MuseScore 1.0. However you can still edit the instrument names. Right-click on an empty part of a measure for the staff you want to rename and choose "Staff Properties..." from the context menu. In the Staff Properties dialog you can change the "Long instrument name" which appears on the first system or the "Short instrument name" which appears on subsequent systems.

New features

  • Ability to hide courtesy key signature and canceling naturals. See #8357.
  • Ability to choose first page number. See #8356.
  • Bagpipe Music Writer import and bagpipe sound support. See #8355.
  • Ability to change velocity and on/off offsets for a group of selected notes

  • New workflow for Save online plugin
  • Ability to sign out
  • Option to automatically sign out on exit


  • improve MusicXML import of clefs
  • fix #8498: musicxml import/export: print-object="no" not handled for key signature
  • fix #8435: musicxml import: print-object="no" ignored on rest
  • fix #8474: MusicXML import: Audiveris ".0" not handled in alter and in backup and forward duration
  • fix #8428: musicxml import: voices mixed up
  • fix #4858: Courtesy accidentals do not import/export in MusicXML anymore
  • fix #8400: musicxml export: stem on whole note in triplet
  • fix #8546: MusicXML import: dynamics in notations element are ignored

Usability and interface

  • fix #8503: Space for play/pause and 0 (Zero) for rest input
  • add SVG icons for note entry toolbar
  • change toolbar icon default size
  • fix default "Save as" and "Save copy" directory
  • display palettes on first start
  • Adding panning to templates
  • enable time signature deletion in timesig palette
  • fixed vocal range for bartione and bass (instruments.xml)
  • fix #6345: First time users confuse demo score for demo software
  • fix: Local Handbook disabled when no file is open


  • Adding panning to templates
  • fix #7857: Tics in generated wave files

Mac specific

  • fix #6547: File association on Mac. Add bww, cap, sgu, mgu, mid, ove, md, and MusicXML.

Bug fixes

  • fix #9040: Dragging note horizontally removes accidental permanently
  • fix #8974: Rest entry shortcut does not work in Voice 2
  • fix #9002: Reset Position doesn't affect tuplet bracket
  • fix #4975: Parts should have multi-measure rests by default
  • fix #8865: Crash when changing instrument on drumstaff
  • fix #8842: bracketed accidentals not saved)
  • fix #8727: write accidentals with parentheses
  • fix #8763: Tuplet number not spatium dependent
  • fix #8735: Beat corruption in copy paste of partial measure
  • fix #8750: Crashes with system containing only vertical box
  • fix #6736: Preferences Menu disabled in non english. Avoid merging of menus.
  • fix #8719: Pickup measure messes up Lilypond export
  • fix #3092: Cannot see 16th note (and below) ledger lines
  • fix #6317: Ledger lines not long enough for whole notes
  • fix #8613: MuseScore doesn't ask to restore session if you open from file
  • fix #8612: Cannot paste to measure with a grace note before beat 1
  • fix #7303: Collision between rest and accidentals
  • fix #6599: Command line option to change config/settings directory
  • fix #6362: Tempo text position not saved for part > 1
  • fix #6347: Multiple grace notes do not copy correctly
  • fix #7764: crashes when open ove file
  • fix #8372: Fix to end-start-repeat bar line width
  • fix #8369: Delete one instrument removes slurs from others
  • fix #8358: new score: create one measure more when pickup measure selected
  • fix #8347: tie in note entry does not work for voice > 1 after a barline
  • fix #8308: Creating triplet in grace note leads to time corruption
  • fix #6536: Position of stemslash in grace note chord
  • fix #7415: Stems too short for 32nd and 64th notes
  • fix #8273: Unecessary courtesy clef remains when clef is changed
  • fix #8194: Edit instruments mess up instrument name
  • fix #8184: Creating parts with cross staff barlines crash
  • fix #8161: Missing lyrics in MIDI import
  • fix #8018: Lilypond: Quote marks in lyrics need to be escaped
  • fix #7892: Exchange voices adds extra rests
  • fix #7944: Buffer overflow with a lot of instruments
  • fix #7017: Chord names does not support "H" name as chord
  • fix #7249: Notehead should be on top of the staff lines
  • fix #7311: Dragging tied notes and removing tie gives weird result
  • fix #7882: Transposing a score shouldn't transpose a drum staff
  • fix #6320: Add œ in F2 text palette
  • fix #7881: Exchange voices does not work on last measure
  • fix #7832: Extra spaces cause lyric pasting to repeat words
  • fix #7734: Pasting lyrics with spaces is not working
  • fix #6451: score jump to current position when record MIDI in Note Input Mode
  • fix #7614: menu item crash when continuing session with no scores
  • Better voltas + multimeasure rest layout
  • fix default fingering font
  • fix #7665: Change instrument, undo does not undo sound
  • fix #7624: pressing space bar when slur is selected crashes program
  • fix #7562: Cursor in text remains in print or PDF
  • fix #7530: Hairpin starting on the first note is lost on reload
  • fix #7514: Moving instrument deletes tuplets
  • fix #7520: Undo reorder instruments does not work as expected
  • fix #7519: Moving instrument causes crash
  • fix #7740: drag and delete + undo causes crash
  • fix #7315: limit values in time signature wizard to 6 bit (1-63)
  • fix #6649: Transposition when creating a score from a template




  • Werner Schweer: Project lead, main developer
  • Nicolas Froment (lasconic): Windows and Mac OS builds, bug fixes
  • Toby Smithe: Debian and Ubuntu builds
  • Olav Gundersen: LilyPond export developer
  • Leon Vinken: MusicXML import-export developer, BWW import
  • Rui Fan: Ove import
  • Maurizio M. Gavioli (Miwarre): new features patches
  • Friedemann Becker: bug fixes


  • Afrikaans
    • djboer
  • Arabic
    • Hosam Adeeb Nashed
  • Asturian
    • Arcipiecu
  • Basque
    • lgerenu
    • amenudo
  • Catalan
    • Carles Clavero
  • Chinese, Traditional
    • hishine
    • aeolus
    • Curtis Huang
    • yushengc
    • vixensjlin
    • Edward Liao
    • 陳科旭
    • yanganto
    • kagami3421
    • millieyun
  • Chinese, Traditional (Taiwan)
    • benice
    • yingdat
    • aeolus
    • nwhat
  • Chinese, Simplified
    • Rui Fan
    • smithtao
    • weyllor
    • oldherl
    • 李百平
    • punbit
    • LianZhang
    • hishine
  • Czech
    • pfri
    • mkucera66
    • Peregrinus
  • Danish
    • Morten Poulsen
    • Stig Wolff
  • Dutch
    • Jaap Plaisier
    • Thomas Bonte
    • toeter
    • Richard Pasveer
    • Legov
    • mouk
    • Antiklontermiddel
  • English, US
    • Raymond May Jr.
    • ceegers
  • Finnish
    • Heino Keränen
    • hjunes
  • French
    • Jean-Louis Waltener
    • Nicolas Froment (lasconic)
    • ritmus
    • utopie
    • Billard Sirakawa
    • Tchoun
    • Robert Leleu
  • Galician
    • Xosé
  • German
    • Werner Schweer
    • derhannes
    • fnbecker
    • Jojo-Schmitz
    • pianopleasure
    • sheksel
    • chrisch
  • Greek
    • Panagiotis Vlangopoulos, Assistant Professor of the Music Department of the Ionian University
    • Ioannis Toulis, Assistant Professor of the Music Department of the Ionian University
    • Petros Andriotis, Adjunct Teacher of the Music Department of the Ionian University
    • Niki Stavrati, Master Degree Student of the Music Department of the Ionian University
    • Loukas Ksanthos
  • Hindi
    • Shashi Sharma
  • Hungarian
    • molnarm
    • drikanb
    • thSoft
  • Indonesian
    • agatorex
    • gilang.pratama
    • tedibudiwan
  • Italian
    • Angelo Contardi
    • Antonio Marchionne
    • Daniele Bravi
  • Japanese
    • Neco
    • kiki
    • kimikazu
    • kojikoji
  • Korean
    • JongHo Kim
  • Norwegian
    • Dag Henning Sørbø
    • Per Holje
  • Polish
    • Piotr Komorowski
  • Portuguese, Brazilian
    • israel_zeu
    • Vítor Dassie
    • marlonpimentel
  • Portuguese
    • José Luciano Batista Gomes
    • elchano
    • tiago
    • marlonpimentel
    • rmatosinhos
    • ariconstancio
    • ganglia
  • Romanian
    • Claudius Tiberiu Iacob
  • Russian
    • Alexandre Prokoudine
    • kostiagol
  • Slovenian
    • ThePianoGuy
  • Spanish
    • Carlos Sanchiavedraz
    • Juan Díaz Porras (alkayata)
    • Pascual Marchante Lande (Mitocondria)
    • MrTrebleClef
    • chiqui5256
    • pup
    • Axel
  • Swedish
    • Magnus Johansson
    • Stefan Falt
    • mbockert
    • dalahast
  • Thai
    • punbit
  • Turkish
    • Halil Kirazli
  • Ukrainian
    • Serhij Dubyk


  • David Bolton: Handbook
  • Thomas Bonte: Website
  • Katie Wardrobe: Video tutorials
  • Tim Brechbill: SoundFont
  • Han-Wen Nienhuys, Jan Nieuwenhuizen & others: Emmentaler font
  • Raùl Posac: MuseScore logo
  • Zachary Chione: Splash screen design

Release notes for MuseScore

MuseScore was released September 21, 2010.

MuseScore is a bug-fix release that corrects more than a dozen problems, mostly critical. There are no new features in compared to 0.9.6. Below is a full list of the corrections.

  • fix #6775: Seg. fault by double clicking any element twice
  • fix #7233: Transpose by diminished second doesn't work (0.9.6 branch regression)
  • fix #7232: D.S. after coda sign freezes playback
  • fix #7167: Time signature change causes triplets to corrupt score
  • fix #7211: Copy/Paste notes over rest of diff. durations in staves
  • fix #7142: Crescendo & delete measures problems
  • fix #7197: MuseScore fails to open MSCZ files with capitals
  • fix #6932: Changing notehead of a breve crash
  • fix #7077: Applying double-note tremolo to dotted notes fails and alter measure duration
  • fix #6937: Measure Properties should be modal dialog
  • fix #6888: When exchanging voice, voice 1 is removed
  • fix get keysig from plugin when concert pitch mode is set
  • fix #6735: C# for AltoSax in default soundfont is silent
  • add access to DPI and notehead, note boundingbox and note position from plugin framework
  • fix #7150: Changing soundfont does not work for audio export


  • New handbook for Danish


Release notes for MuseScore

MuseScore was released August 16, 2010.

MuseScore is a bugfix release including 12 bugfixes mainly critical ones. There are no new features in compared to 0.9.6. You can read the details of the bugfixes below.


  • fix #6597: Close/reload crash on XP
  • fix #6658: Natural in every keysig on mac PPC
  • fix #6508: Crash removing instrument with volta
  • fix #6706: Crash when inserting slurs from palette while editing text
  • fix #6740: Autosave works only the first time
  • fix #6479: Crash when closing score during playback
  • fix #6624: Crash when deleting a tuplet from a MusicXML import
  • fix #5667: Font problem (quarternote looks too big in text on Linux)
  • fix #6620 : Crash on changing dynamics font size
    • Plugin framework

      • fix cursor move on repeatmeasure in plugin framework
      • fix instrument name containing flats for plugin framework


      • fix #6505: Mixer is not refreshed when scores are switched
      • fix mouse wheel handling for mixer elements
      • fix repeat command (ctrl+r) for staves > 1


Release notes for MuseScore

MuseScore was released July 12, 2010.

MuseScore is mainly a bugfix release including almost 40 bugfixes. There are no new features in compared to 0.9.6. You can read the details of the bugfixes below.

Crashes and critical

  • fix #6425: Crash loading score with breath mark selected
  • fix #6388: Crash on importing a MusicXML file (beam problem)
  • fix #6072: Crash when adding note to wrong percussion staff
  • fix #6335: Crash on creating triplet on a chord
  • fix #6289: crash on loading score where a key signature is selected
  • fix #6275: Remove the last inserted vertical frame make musecore hangs
  • fix #6138: crash on creating new score (after some steps)
  • fix #6076: crash on play a new score after exiting a playing score
  • fix #6049: 0.9.5 file with breve or longa cannot be opened with MuseScore 0.9.6

Memory management

  • fix #6164: free memory after removing score


  • fix #5162: Artefacts in "Strings CLP" sound
  • fix #6093: Dynamics are not played for Soprano in TimGM6mb.sf2
  • fix #6253: High CPU usage when idle if reverb is on

Import & export

  • fix #6318: MusicXML export of syllabic is broken
  • fix #5949: MIDI import gives unexpectedly silent notes
  • fix #6163: Export MIDI in wrong preference tab
  • fix #6283: R key does not work as expected in drum staff


  • fix #6254: Concert pitch lossy transposition
  • fix #6264: Chordnames not transposed on copy-paste or concert pitch
  • fix #5923: Transpose chordnames does not preserve pitch spelling


  • fix #6060: Help > Local Handbook doesn't work on windows
  • fix #6060: Change pdf filenames for composed locale handbook

Miscellaneous fixes

  • fix dragging from palette of measure repeat symbol
  • remove incompatible "temperament tuning" plugin
  • fix adding notes on voice > 0 from plugin framework
  • fix ove import charset preferences init
  • fix layout of fermata if in staff > 1
  • fix #6245: Underscores in Lyrics are not copied badly/not at all
  • fix #5906: Tick value shown in Object Inspector limited to 999999
  • fix #5903: Duration arithmentic with longa and brevis
  • fix #6195: breve rest & longa rest are inversed
  • fix #6079: problem in multimeasure rests with 2 staves score
  • fix #6172: note properties does not keep notehead group
  • fix #6144: Notes (and other signs) in small staves are smaller than they should
  • fix #6134: Fingering text offset does not save units and alignment
  • fix #6114: SVG graphics disappear after reload
  • fix #6453: File containing a horizontal frame directly before a bar with a line break cannot be opened
  • no empty tab if user tries to open a file with unknown extension
  • page numbers are no longer editable in the score since formatting does not stick
  • refuse to open incompatible score files (file version number > current version number); this adds new translatable strings


  • updated translations
  • new translations : Basque, Hebrew, Slovenian

Release notes for MuseScore 0.9.6

MuseScore 0.9.6 was released June 8th, 2010.

Top new features

  • Ready for basic ensemble scoring. Multi-measure rests automatically break at all the right places (key and time changes, double barlines, etc.), transposition preserves pitch spelling (for example E-sharps no longer turn into F's after switching to concert pitch and back), dynamics can affect whole system or a single instrument or staff, repeat text and system text extracted to all parts, ready-made templates for orchestra and concert band.
  • Choose from 128 instrument sounds for playback plus eight drum and percussion sets with the built-in SoundFont (TimGM6mb.sf2). Previous versions for Windows and Mac OS used a piano sound for all instruments and required that you set up your own SoundFont if you wanted to hear instrument sounds other than piano
  • Support for nested tuplets and better support for tuplets in general
    Some music notation requires tuplets inside of a larger tuplet
  • Initial support for custom-made key signatures
    Key signature dialog allow you to create micro-tonal key signatures for Turkish maqam and other types of music
  • Significant improvements to MusicXML which allows you to share files with other score-writing software more accurately
  • New support for Overture and ABC import and significant improvements to LilyPond export
  • Auto save recovers your scores after a crash
  • Plus hundreds more improvements... (see below)

Important information for people upgrading from older versions

  • Files saved in 0.9.6 do not open correctly in versions 0.9.5 or earlier. This is because of necessary changes to the file structure. Of course, version 0.9.6 is still able to read all your old MuseScore files.
  • To delete and remove a measure select the measure normally and choose EditDelete Selected Measures or use the shortcut Ctrl+Del (Mac: +Del or +Fn+Backspace). With previous versions you had to use a special dotted-line selection. For more details see the "Delete" section of measure operations
  • For people that like to switch SoundFonts, the setting is located in DisplaySynthesizer and no longer requires a restart. In previous versions the SoundFont settings was in EditPreferences...I/O tab. For more details see SoundFont


  • Repeats play back more accurately for volta brackets, D.S. inside repeated section, and D.C. al Fine
  • Master pitch tuning preference. You can set playback higher or lower than the standard A-440
  • Remove pause button (equivalent functionality already in play button)
  • All instrument sounds included thanks to Tim Brechbill's compact and open-source SoundFont: "TimGM6mb.sf2"
  • New playback settings panel via DisplaySynthesizer featuring reverb, chorus, master volume, and SoundFont changes without restart (previous versions required a restart of MuseScore to change SoundFonts)
    Control over master volume; SoundFonts; Tuning; Reverb: room size, damp, width, Chorus: type, number, speed, depth
  • Swing, shuffle and regular eighth notes via DisplayPlay Panel
  • Playback via Jack MIDI enabling playback via MIDI keyboard (experimental feature, see MIDI out via JACK) or playback via VSTi
  • Keyboard note input works even if you have multiple MIDI devices connected to the computer. Select your MIDI input from the drop-down menu in EditPreferences...I/O tab
  • Hear MIDI keyboard sounds in MuseScore even if you are not in note entry mode (useful if your MIDI keyboard does not have speakers and you want to play a passage before writing out the notes)
  • Piano roll view during playback. Right click on a staff and select "Pianoroll Editor..."
  • Change the velocity (loudness) of an individual note via right-click Note Properties...
  • Notes play for full duration by default
  • Dynamics can affect the specific staff, part, or the whole system. Right-click on a dynamic marking and choose "MIDI Properties..."
    Dialog asks for velocity and scope
  • Sustain pedal markings affect playback
  • Upwards arpeggios affect playback

User interface

Save time

  • Improvements to New Score wizard: find instruments quickly (shows only the most common instruments initially), less steps (you can click Finish early instead of wading through the whole new score wizard).
  • Apply changes to multiple notes at once:
    • via NotesAdd Interval
    • Small notes for cues or cadenzas
    • Any Note Properties
  • New ways to select similar items via right-click and choose Select
    The new selection dialog offers selection of similar items in staff, score, voice and many more choices
  • Copy and paste of notes now includes any slurs
  • Copy and paste between transposing instruments preserves the sounding pitch rather than the displayed pitch
  • Change an instruments for an existing staff in half the number of clicks of previous versions. Right-click on an empty part of the staff, choose Staff Properties..., click "Change Instrument" (currently has some bugs: missing flats, font style, clef)
  • Duplicate a selection of notes using the handy R shortcut
  • New keyboard shortcuts
    • Switch between handles on slurs, lines, and brackets in edit mode Tab and Shift+Tab
    • Add staff text Ctrl+T (Mac: +T)
    • Add system text Ctrl+Shift+T (Mac: +Shift+T)
    • Previous lyric syllable: Ctrl+Left (Mac: +Left)
    • Next lyric syllable: Ctrl+Right (Mac: +Right)
    • Up to previous stanza: Up
    • Down to next stanza: Down
    • Change double or repeat barline back to normal bar line: Click to select it then press Del

Ease of use

  • Delete and remove measures using normal selection then choose EditDelete Selected Measures or use the shotcut Ctrl+Del (Mac: +Del). No need to deal with Ctrl+click, dotted line selections
  • Text selection via mouse now possible in edit mode. Also Ctrl+A (Mac: +A) works in text edit mode
  • Larger drag-and-drop area for time signatures and key signatures. In previous versions you needed to drag and drop into the small space between the left bar line and the first note.
  • Out-of-range notes use darker shades of red and yellow and more readable. Voice 2-4 notes are also darker.
  • Halve or double the duration of a note you just entered using q or w during note entry.
  • Accidental buttons in the note entry toolbar work correctly (in previous versions the buttons stayed pressed down when you went to the next note)
  • Add a slur or hairpin spanning multiple notes easily. Just select notes and press shortcut (S for slur, H for crescendo, Shift+Hfor decrescendo). No need to fiddle with anchor positions.
  • The former Notes palette is now correctly labeled as Grace Notes palette
  • Double dot and tie icons in the note entry toolbar are clearer and more recognizable
  • Better error messages for SoundFont that fails to load
  • Better wording for StyleEdit General StylePage
  • Automatically check for updates. Customize your settings via EditPreferences...Updates tab

More control

  • Out-of-range note colors can be disabled via EditPreferences...Note Entry tab
  • Edit the usable pitch range for an instrument: Right-click on empty part of staff and choose Staff Properties...
  • Remembers whether main window was maximized and restores previous setting
  • When adjusting pitches, the Up arrow uses sharps and the Down arrow uses flats
  • Split-screen options via DisplayDocuments Side by Side or DisplayDocuments Stacked
  • Navigator panel shows more pages (especially helpful for longer scores)


  • Nested tuplets
  • Tuplet brackets can be flipped to the opposite side by clicking to select and pressing X
  • Tuplets calculate the correct note durations based on standard engraving rules
  • Allow beaming between tuplet and non-tuplet notes
  • Allow beaming across bar lines (please note: beams across systems don't work yet)
  • Smaller beams for grace notes (to match their size)
  • Full support for multi-measure rests. They now automatically break at rehearsal marks, tempo changes, time signatures, key signatures, double barlines, repeat barlines.
  • Measure numbers: pickups in new scores no longer included in measure number counting, measure number offset fixed, correct number after a multi-measure rest
  • New symbols including caesuras, dotted slurs, arrowed accidentals, alternate fermatas
  • All accidentals can have parentheses: drag the parentheses from accidental palette onto the accidental in the score
  • New vertical bracket in the arpeggio palette for indicating notes that are supposed to be played at the same time, more note head options
  • "Winged" repeats
    Repeat bar lines can have tips that extend beyond the staff lines
  • Repeat bar lines can now span multiple instrument staff lines correctly. Previous versions showed dots for only the first staff
  • Line breaks can be added to horizontal frames
  • Clef changes can be horizontally re-positioned. Double click and use Left and Right arrows
  • Better spacing for dotted notes to avoid collisions with the next note or rest
  • Transposition with correct pitch spelling. Previous versions often spelled pitches incorrectly after a transposition. This was particularly evident for people switching between concert pitch and transposing scores. For example an E-sharp on a Bb trumpet staff would become an F natural in old versions of MuseScore after pressing the concert pitch button a couple times
  • Courtesy key signatures
    Show key signature at the end of a system if the next measure starts in a new key
  • Adding time signatures mid-score no longer overrides later time changes (#2927)
  • Time signature stays at the beginning of the score if you delete the first measure
  • Only show one accidental for two notes sharing the same note head
  • Note heads can be changed via right-click Note Properties...
  • Grace notes transpose along with normal notes


  • Change the style of all existing lyrics or other types of text using the "change all elements of the same type" checkbox in the text property dialog
  • Text Properties available to Chord Names via right-click
  • Natural sign appears in the F2 palette (previous versions had only sharp and flat)
  • Narrower spacing and better kerning for the "f" in dynamic markings such as mf, ff, etc.
  • Add more numbers to MuseJazz font
  • Score no longer jumps up and down when leaving or entering text edit mode. The text toolbar is now at the bottom of the main window instead of the top
  • Tempo text has better initial metronome settings for each tempo


  • Much improved plugin framework
  • Plugins can now be contributed on and are featured on the plugin page
  • Import ABC music files via PluginsABC Import
  • Break measures at a specified interval via PluginsBreak Every X Measures
  • Change via PluginsTemperament Tuning


  • Auto save recovers your scores in case of a software crash or power outage
  • Audio export: respects instrument settings from mixer
  • MusicXML improvements: added support for staff line count, invisible notes and rests, unpitched percussion, tempo and metronome markings, arpeggio and glissando, breath mark, grace notes, two-note tremolos, quarter-tone accidentals, beams over rests and other beam customizations, string fingerings and pluck markings. import of instrument sounds. import vertical placement of dynamics, pedal markings and hairpins (crescendo/decrescendo), ottava and volta, import fonts and vertical placement of words. export correct placement for staff text in multi-staff systems, fix problems with octava markings and rests, instrument transposition information, pedal symbols
  • LilyPond export: Octava markings, staff text with special characters, tremolo, segno and coda, grace notes, whole-measure rests for multiple time signatures, repeats, metronome markings, fingerings and string-numbers, arpeggios and glissandos, pickup bars, fermatas on rests, staff text and dynamics on the same note, flat symbol in instrument names, triplets with chords, work on rehearsal marks and segno/coda symbols, experimental support for lyrics
  • Capella import: crash fix, recognize whole-measure rests
  • New support for import of Overture files (versions 3 and 4)


  • All item names are now translatable except plugins (previously some palettes were English only)
  • New languages: Polish, Romanian, Catalan, Greek, Japanese, Thai
  • New handbooks added: Russian, Brazilian Portuguese, Polish, Romanian, Hungarian, Norwegian, Greek, Simplified Chinese

Fixes to Mac-specific bugs

  • Ctrl+click works as alternative for right-click on Mac
  • Dynamic markings display correctly on Mac
  • Flats and sharps in chord names display correctly on Mac
  • Better shortcuts for Palette, Navigator, Play Panel, and Mixer. Previous versions used Function keys (F9 - F12) which are already used by Mac OS

Fixes to Windows-specific bugs

  • Text no longer appears tiny if no printer is installed



  • Werner Schweer: Project lead, main developer
  • Nicolas Froment (lasconic): Windows and Mac OS builds, bug fixes
  • Toby Smithe: Debian and Ubuntu builds
  • Olav Gundersen: LilyPond export developer
  • Leon Vinken: MusicXML import-export developer
  • Van Ferry: Ove import
  • Jason Essington: MIDI in improvements
  • Aaron Epstein: Playback improvements


  • Arabic
    • Hosam Adeeb Nashed
  • Chinese, Traditional
    • Ying-Da Lee
  • Chinese, Traditional (Taiwan)
    • benice
  • Chinese, Simplified
    • Van Ferry
  • Danish
    • Morten Poulsen
    • Stig Wolff
  • Dutch
    • Jaap Plaisier
    • Thomas Bonte
  • English, US
    • Raymond May Jr.
  • Finnish
    • Heino Keränen
  • French
    • Jean-Louis Waltener
    • Nicolas Froment (lasconic)
  • Galician
    • Xosé
  • Greek
    • Ionian University, Department of Music (As. Prof. Pan. Vlangopoulos, As. Prof. Ioannis Toulis, Niki Stavrati, Petros Andriotis)
  • German
    • Werner Schweer
  • Hindi
    • Shashi Sharma
  • Hungarian
    • molnarm
    • drikanb
    • thSoft
  • Italian
    • Angelo Contardi
    • Antonio Marchionne
    • Daniele Bravi
  • Japanese
    • Neco
    • kimikazu
    • kojikoji
  • Norwegian
    • Dag Henning Sørbø
    • Per Holje
  • Polish
    • Piotr Komorowski
  • Portuguese
    • José Luciano Batista Gomes
  • Portuguese, Brazilian
    • israel_zeu
    • Vítor Dassie
  • Romanian
    • Claudius Tiberiu Iacob
  • Russian
    • Alexandre Prokoudine
  • Spanish
    • Carlos Sanchiavedraz
    • Juan Díaz Porras (alkayata)
    • Pascual Marchante Lande (Mitocondria)
  • Macedonious
    • Marcos Guglielmetti
  • Swedish
    • Magnus Johansson
  • Thai
    • punbit
  • Turkish
    • Halil Kirazli
  • Ukrainian
    • Serhij Dubyk


  • David Bolton: Handbook
  • Thomas Bonte: Website
  • Maurizio M. Gavioli (Miwarre): Plugin documentation
  • Katie Wardrobe: Video tutorials
  • Tim Brechbill: SoundFont
  • Han-Wen Nienhuys, Jan Nieuwenhuizen & others: Emmentaler font
  • Raùl Posac: MuseScore logo
  • Zachary Chione: Splash screen design

Music Hack Day

Music Hack Day is a regular gathering for music and tech enthusiasts. During this event, programmers, designers, thinkers from all over the world meet up and try to create music-related software or hardware hacks during a 24-hour coding marathon. The core team of MuseScore contributors, namely Werner Schweer, Thomas Bonte and Nicolas Froment are regular attendees of the Music Hack Days. They promote MuseScore and, and empower other coders to create something with one of the following resources:

Upcoming hackdays

All upcoming hackdays listed at

Salzburg April 8-9 2017
Attending: Lasconic - Thomas - Werner

Previous hackdays

Below is the list of Music Hack Days where MuseScore was represented, as well as the resulting hacks.

Boston October 21-23 2016
Attending: Lasconic - Thomas - Joachim Ganseman

London December 13-14 2014
Attending: Nicolas - Thomas - Chen Lung

Barcelona June 12-13 2014
Attending: Nicolas - Thomas

London 7 - 8 December 2013
Attending: Thomas - Nicolas - ChenLung - Manuel Bärenz

Bologna 5 - 6 October 2013
Attending: Miwarre - Thomas - Nicolas - Werner

Munich 27 - 28 July 2013
Attending: Thomas Bonte - Paul Sebastien - Florian Weiss - Nicolas (remote)

Denver 20 - 21 July 2013
Attending: Marc Sabatella

Barcelona 13 - 14 June 2013

Attending: Thomas - Nicolas - Werner - Paul Sebastien

Vienna 1st - 3rd February 2013

Attending: Thomas - Nicolas - Werner

Cannes 26th - 27th January 2013

Attending: Nicolas

Barcelona 14th - 15th June 2012

Nicolas - Thomas - Kaspar - Quim Llimona & Sara Gozalo

Blog post: Hello from Barcelona

Cannes 29th - 30th January 2012

Thomas - Mathieu Barthet

London 3rd - 4th December 2011

Thomas - Nicolas - Joachim Ganseman - Richard Lewis - Keith Moon - Andrew Robertson

Boston 5th - 6th November 2011

Thomas - Nicolas - Matthias Röder - Vladimir Viro - Hervé Bitteur

Barcelona (Sonar) 16th - 17th June 2011

Thomas - Nicolas - Bram de Jong

Berlin 28th - 29th May 2011

Thomas - Nicolas - Werner

San Francisco 7th - 8th May 2011

Thomas - Nicolas - Lucas Gonze - Pieter-Jan Vaernewijck

New York 12th - 13th February 2011

Thomas - Nicolas - Matt Prokup

Cannes 23rd - 24th January 2011

Thomas - Nicolas (remote)

Barcelona 2nd - 3rd October 2010

Thomas - Nicolas - Joachim Ganseman

London 4th - 5th September 2010

Thomas - Nicolas - Werner

San Francisco 15th - 16th May 2010

Thomas - Nicolas - Joachim Ganseman

Amsterdam 24th - 25th April 2010

Thomas - Nicolas

Amsterdam 21st October 2009

Thomas - Nicolas (remote)