LilyPond Changelog

What's new in LilyPond 2.24.3

Nov 20, 2023
  • This version contains a number of fixes since the release of the previous stable version in August 2023. We recommend all users to update. Scores converted to or written for 2.24.0 will continue to work with this release. A list of added features and other user-visible changes for 2.24 can be found at https://lilypond.org/doc/v2.24/Documentation/changes/. Among others, version 2.24.0 switched to Guile 2.2 and features a completely rewritten infrastructure for creating the official packages, finally allowing us to offer 64-bit binaries for macOS and Windows.
  • For distributions, LilyPond 2.24.3 most notably includes a fix to restore PDF conversion with the recent Ghostscript 10.02.1. Also Guile 3.0 is now officially supported, even though the recommended version will remain Guile 2.2 for the LilyPond 2.24 series.

New in LilyPond 2.24.2 (Aug 14, 2023)

  • This version contains a number of fixes since the release of the previous stable version in February 2023. This includes an update of the library for garbage collection, addressing crashes when compiling very large scores (several hundreds of pages) on Windows.

New in LilyPond 2.22.2-1 (Feb 23, 2022)

  • This version includes improvements and fixes since the release of the previous stable release in April 2021.

New in LilyPond 2.22.1-1 (Apr 26, 2021)

  • This version includes improvements and fixes since the release of the previous stable release in January 2021.

New in LilyPond 2.22.0-1 (Jan 11, 2021)

  • New for musical notation:
  • Displaying pitch improvements:
  • An accidental glyph corresponding to SMuFL code U+E2E3 has been added (Extended Helmholtz-Ellis accidentals: Raise by one undecimal quartertone).
  • Quarter-tone note names are now available in all the input languages.
  • Setting suggestAccidentals to 'cautionary turns only cautionary accidentals into AccidentalSuggestions. This can be used to distinguish between facsimile and editorial accidentals.
  • The command ambitusAfter has been added. It is used to move the ambitus to a different position.
  • Ottava brackets are now introduced with a single number by default (e.g., ‘8’ or ‘15’), and printed in bold. A new ottavationMarkups property has been introduced to modify that behavior, with several predefined lists of markups available.
  • Rhythm improvements:
  • Tuplets can now be printed with slurs instead of brackets.
  • French beaming (override Stem.french-beaming = ##t) now exactly behaves like standard (i.e., default) beaming in every respect (beam positioning and placement of any articulation, fingering, etc.). The only remaining difference are inner stems not passing through beams.
  • Swing and irregular rhythmic patterns may now be applied to music expressions made of regular durations, which may be used to render inequal rhythmic interpretation in MIDI.
  • Font glyphs for 256th, 512th, and 1024th flags and rests have been added.
  • The new Merge_mmrest_numbers_engraver hides duplicate numbers on multi-measure rests.
  • Expressive mark improvements:
  • A dynamic command n for niente has been added.
  • Two new ornaments have been added.
  • A very short fermata and Henze variants of long and short fermatas have been added.
  • Fermatas and other articulations can now be added directly to multi-measure rests. Therefore the command fermataMarkup is deprecated.
  • Editorial annotation improvements:
  • The New_fingering_engraver will now consider the X-align-on-main-noteheads property of the self-alignment-interface. If set to true (##t), all fingerings oriented up or down will be arranged in a straight column and aligned on the noteheads on the correct side of the stem.
  • Text formatting improvements:
  • The default fonts are now those from the URW Core 35 set, version 2.0, replacing the TeX Gyre fonts. Note that the fonts come with a ligature for ‘Nr.’; see Fonts explained for solutions to avoid it locally and globally.
  • The note markup command now takes as its first argument a duration instead of a string.
  • New for specialist notation:
  • Vocal music improvements:
  • A lyric hyphen may now be repeated at the start of a system beginning with a new syllable.
  • A gradual change of vowel (or sustained consonant) may be indicated by adding a vowel transition between lyric syllables with the command vowelTransition.
  • Unfretted and fretted string instrument improvements:
  • Fret-diagrams may now be printed left-handed, setting handedness to LEFT (as a subproperty of fret-diagram-details).
  • Some ukulele fretboard-diagrams have been fixed, and new diagrams have also been added.
  • Chord notation improvements:
  • Chords may now be automatically inverted or voiced with dropped notes.
  • Legacy chord naming functions banter-chord-names and jazz-chord-names, have been removed from the main codebase, as have been the properties chordNamesExceptionsFull and chordNamesExceptionsPartial. As part of that rewrite, power chords are now included in the default exceptions; they will be printed correctly (with a superscript like all other chords) with no additional tweaks required, thereby removing the need for the powerChords predefined command. Anyone interested in the legacy functions may find a (somewhat working) copy of them in the ‘chord-names-alternative.ly’ snippet.
  • Contemporary music improvements:
  • A new grob DurationLine is now available. It continues a rhythmic grob with a line, ending at the next rhythmic grob. Possible styles are 'beam, 'line, 'dashed-line, 'dotted-line, 'zigzag, 'trill and 'none. The duration line may end with a hook (beam-style only) or an arrow.
  • New for input and output:
  • Input file improvements:
  • As announced in version 2.17.3 nearly eight years ago, the 'relative-includes option is now enabled by default; included files that contain an include command of their own must account for their own path rather than the main file’s directory. That behavior may however be switched off by setting 'relative-includes to #f, either as a command line option or using ly:set-option in source files.
  • compressFullBarRests has been renamed to compressEmptyMeasures, to avoid possible confusion with compressMMRests. Likewise, expandFullBarRests has now become expandEmptyMeasures.
  • The partcombine command, as well as all partCombine-prefixed commands, subroutines and property names, are now written with a capital C, such as partCombine, partCombineApart etc. The autochange command is now also capitalized as autoChange.
  • All input languages (language statement) can be entered using their proper UTF-8 spelling (i.e., including special characters). The missing names català and português are available now in addition to the original names catalan and portugues.
  • LilyPond for Windows (MinGW) can handle Unicode filenames on Windows 10 1903 and above.
  • Output improvements:
  • Skylines will now take account of the rotation property of layout objects. Rotating a crescendo hairpin by applying override Hairpin.rotation = #'(15 0 0), for instance, will now actually have influence on the skylines and thus help to enhance spacing.
  • Slight padding added between natural glyphs just touching at the corners in key cancellations.
  • Skylines of boxes now reflect the actual box outline including rounded corners and rotation.
  • CSS-style colors can now be used directly as text strings; either with predefined color names (like with the already available css-color function), or with hexadecimal color codes prefixed with #. All stencils that support a color property now accept either a list or a string; in the latter case, that string is used directly in the SVG output. This allows to use alpha transparency (entered as "#RRGGBBAA" or "#RGBA") in SVG.
  • PDF bookmarks are now supported and allow for tocItem entries to appear in the ‘table of contents’ panel of PDF viewers that support it.
  • table-of-contents now accepts a hierarchical structure; tocItem entries may optionally take a symbol (like label) or a dot-separated list of symbols, indicating their position in the score’s structure. A side-effect of that feature is that tocItem can no longer take a simple string as its argument; a markup command must be used.
  • Using the new options ‘-dpng-width’ and ‘-dpng-height’ it is now possible to specify the pixel size of PNG output images.
  • SVG output is now available through the ‘--svg’ command-line option (or its canonical form ‘--format=svg’, also shortened as ‘-fsvg’). Due to its backend’s specificity, that option is not yet compatible with other output formats; to get a file in both SVG and PDF, PNG or EPS, a second LilyPond run is required.

New in LilyPond 2.20.0-1 (Mar 3, 2020)

  • This version provides a number of updates, including updated manuals.

New in LilyPond 2.19.46 Dev (Jul 27, 2016)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.39 Dev (Apr 4, 2016)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.37 Dev (Mar 1, 2016)

  • Includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes.

New in LilyPond 2.19.32 Dev (Nov 23, 2015)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.31 Dev (Nov 11, 2015)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.29 Dev (Oct 25, 2015)

  • Includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.24 Dev (Jul 27, 2015)

  • This release includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes. If you require a stable version of Lilypond, we recommend using the 2.18 version.

New in LilyPond 2.19.23 Dev (Jul 13, 2015)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.22 Dev (Jun 29, 2015)

  • Includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes.

New in LilyPond 2.19.17 Dev (Mar 16, 2015)

  • This release includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes. If you require a stable version of Lilypond, we recommend using the 2.18 version.

New in LilyPond 2.19.16 Dev (Mar 2, 2015)

  • Includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes.

New in LilyPond 2.19.15 Dev (Sep 29, 2014)

  • This release includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes.

New in LilyPond 2.19.13-1 Dev (Sep 2, 2014)

  • Includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes.

New in LilyPond 2.19.12-1 Dev (Aug 18, 2014)

  • This release includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes.

New in LilyPond 2.19.11-1 Dev (Aug 4, 2014)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.6-1 Dev (May 12, 2014)

  • A number of enhancements, and contains some work in progress.

New in LilyPond 2.19.3-1 Dev (Mar 3, 2014)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.19.1-1 Dev (Jan 21, 2014)

  • Includes a number of enhancements, and contains some work in progress. You will have access to the very latest features, but some may be incomplete, and you may encounter bugs and crashes.

New in LilyPond 2.19.0-1 (Jan 13, 2014)

  • This release includes a number of enhancements, and contains some work in progress.

New in LilyPond 2.18.0-1 (Jan 3, 2014)

  • Many items are now positioned using their actual outline rather than a rectangular bounding box. This greatly reduces the occurrence of unsightly large gaps.
  • Sets and overrides can now use the syntax:
  • \override Voice.TextSpanner.bound-details.left.text = "rit." instead of the previous \override Voice.TextSpanner #'(bound-details left text) = "rit."
  • Triplets with a given group length can now be written as \tuplet 3/2 4 { c8 c c c c c } instead of \times 2/3 { c8 c c } \times 2/3 { c8 c c }

New in LilyPond 2.15.40-1 Dev (Jun 8, 2012)

  • Use of \tempo specifications in \midi blocks (removed in 2.9.16 in favor of explicit tempoWholesPerMinute settings) has seen a revival: now any kind of property-setting music is turned into context definitions within of output specifications.
  • The LilyPond G clef has been redesigned - upper loop is now more balanced, bottom crook sticks out less and the "spine" (main vertical line) is more evenly curved. The old and new versions can be compared by looking at the documentation: old version, new version.
  • Lilypond’s stencil commands have been simplified to allow for less code duplication and better height approximations of graphical objects.
  • Flags are now treated as separate objects rather than as stem parts.  
Two alternative methods for bar numbering can be set, especially for when using repeated music;  
The following is a fundamental change in LilyPond’s music representation: Rhythmic events like LyricEvent and NoteEvent are no longer wrapped in EventChord unless they have been actually entered as part of a chord in the input. If you manipulate music expressions in Scheme, the new behavior may require changes in your code. Calling the music function \eventChords or the Scheme function event-chord-wrap! converts to the old representation; using one of those might be easiest for keeping legacy code operative. The following three items are consequences of this change.
  • The repetitive chord entry aid q has been reimplemented. Repeated chords are now replaced right before interpreting a music expression. In case the user wants to retain some events of the original chord, he can run the repeat chord replacement function \chordRepeats manually.
  • String numbers and right hand fingerings on single notes now appear without having to be written inside of chord brackets.
  • Music functions now work the same when used inside or outside of chords, including all the possibilities of argument parsing. Music variables can be used inside of chords.
  • \tweak now takes an optional layout object specification. It can be used for tweaking layout objects that are only indirectly caused by the tweaked event, like accidentals, stems, and flags.
  • Scheme expressions inside of embedded Lilypond (#{…#}) are now executed in lexical closure of the surrounding Scheme code. $ is no longer special in embedded Lilypond. It can be used unconditionally in Lilypond code for immediate evaluation, similar to how ly:export could previously be used. ly:export has been removed. As a consequence, # is now free to delay evaluation of its argument until the parser actually reduces the containing expression, greatly reducing the potential for premature evaluation.
  • Support for jazz-like chords has been improved: Lydian and altered chords are recognised; separators between chord modifiers are now treated independently of separators between “slash” chords and their bass notes (and by default, slashes are now only used for the latter type of separator); additional pitches are no longer prefixed with “add” by default; and the “m” in minor chords can be customized. Customizing chord names for more information.
  • The \markuplines command has been renamed to \markuplist for a better match with its semantics and general Lilypond nomenclature.
  • The interface for specifying string tunings in tablature has been simplified considerably and employs the scheme function \stringTuning for most purposes.
  • Beams can now have their slopes preserved over line breaks. 
  • In function arguments music, markups and Scheme expressions (as well as several other syntactic entities) have become mostly interchangeable and are told apart only by evaluating the respective predicate. In several cases, the predicate is consulted by the parser, like when deciding whether to interpret -3 as a number or a fingering event.
  • Music functions (and their close relatives) can now be defined with optional arguments.
  • For defining commands executed only for their side-effects, define-void-function is now available.
  • There is a new define-event-function command in analogy to define-music-function that can be used for defining music functions acting as post events without requiring a direction specifier (-, ^, or _) placed before them.
  • A list of ASCII aliases for special characters can be included.
  • There is a new define-scheme-function command in analogy to define-music-function that can be used to define functions evaluating to Scheme expressions while accepting arguments in Lilypond syntax.
  • The construct #{ … #} can now be used not just for constructing sequential music lists, but also for pitches (distinguished from single note events by the absence of a duration or other information that can’t be part of a pitch), single music events, void music expressions, post events, markups (mostly freeing users from having to use the markup macro), markup lists, number expressions, context definitions and modifications, and a few other things. If it encloses nothing or only a single music event, it no longer returns a sequential music list but rather a void music expression or just the music event itself, respectively.
  • Pitches can be used on the right side of assignments. They are distinguished from single note events by the absence of a duration or other information that can’t be part of a pitch.
  • New command-line option ‘--loglevel=level’ to control how much output LilyPond creates. Possible values are ERROR, WARN, BASIC_PROGRESS, PROGRESS, DEBUG.
  • \once \set now correctly resets the property value to the previous value.  
The alignment of dynamic spanners (hairpins, text crescendo, etc.) is now automatically broken if a different direction is explicitly given.  
Appoggiaturas and acciaccaturas now also work inside a slur, not only inside a phrasing slur. Also, a function \slashedGrace was added that does not use a slur from the acciaccatura note. To suppress the line on a crescendo text spanner (and other similar spanners), LilyPond now fully supports the #'style = #'none property.  
LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
  • Glissandi can now span multiple lines.

New in LilyPond 2.14.1.1 (Jun 16, 2011)

  • Lilypond now helps beams avoid collisions with other grobs! This feature works completely with manual beams. It also works for all automatic beams that do not end right before a change in staff. For this special case, please use manual beams.
  • The Articulate script by Peter Chubb, which is GPLv3 licensed, is now a part of the distribution. It allows easy generation of improved MIDI files that perform non-legato by default, legato slurs, staccato, tempo markings, trills, etc.
  • Lilypond now engraves woodwind fingering charts.
  • Single beat repeats for sixteenth or shorter notes and beat repeats for measures containing notes of varying durations are now supported.

New in LilyPond 2.13.31.1 (Aug 25, 2010)

  • New option -dinclude-settings=INCLUDEFILE.ly, which causes lilypond to include the given file before the score is processed. This allows the user to change global settings without the need to change the score itself. That way, several different editions/version (e.g. different page sizes) can be generated from a file without having to modify the score for each version.
  • The autobeaming settings syntax has been changed. beatLength, beatGrouping, beamSettings, and measureGrouping have all been eliminated. Autobeaming is now controlled by baseMoment, beatStructure, and beamExceptions. Default settings for each of these properties can be stored for any time signature in time-signature-settings, so that when the time signature is changed, the autobeaming will automatically change. The new syntax should be much easier and require fewer overrides.
  • The SVG backend has optional support for WOFF fonts. Using the Scheme option -d svg-woff together with the SVG backend selection -d backend=svg, produces SVG output with CSS WOFF font selection.
  • The LilyPond G clef has been rotated 1.5 degrees clockwise for improved balance. The old and new versions can be compared by looking at the documentation: old version, new version.
  • Text crescendo spanners can now be added directly using \cresc, \dim and \decresc.

New in LilyPond 2.13.20.1 (May 7, 2010)

  • Text crescendo spanners can now be added directly.
  • The documented syntax of ‘lilypond’ environments in the LaTeX mode of lilypond-book has been changed to conform with standard LaTeX syntax: options now come after the environment name.
  • Aesthetics of shape note heads have been enhanced. Variable line thicknesses have been implemented.
  • All note widths have been made consistent.
  • Minor shape note commands that use the relative major key for scale steps have been added.
  • A variant of the segno sign is provided.
  • Context modifications (\with blocks) can be stored in variables and inserted into contexts or other \with blocks.
  • A half-open articulation was added.
  • The Unicode Bidirectional Algorithm is now fully supported for single-line markup due to enhanced integration with Pango.
  • LilyPond is now licensed under the GNU GPL v3+.
  • In tablature, frets can be indicated with labels other than numbers:
  • Layout objects can be printed over a white background, which whites-out objects in lower layers which lie beneath:
  • Chords can be repeated using the q shortcut:
  • With two-sided mode, margins for odd and even pages can be set using inner-margin and outer-margin:
  • Paper margin defaults, as specified in ‘ly/paper-defaults-init.ly’, apply to the default paper size (a4) and are automatically scaled according to the paper size chosen.
  • All combinations of left-margin, right-margin and line-width work now. There is no more need to set line-width manually unless you explicitly want to.
  • Support for using an alternative music font, such as Gonville, is now added.
  • In addition to the existing \hspace markup command, a new \vspace command has been added to provide an easy and flexible way to add vertical space in markups.
  • The direction of manual beams can be set with ^[ and _[.
  • A version of the breve note head has been added with two vertical lines on each side.
  • Instrument names and vocal names now take into account the extent of system start delimiters in other staves for their positioning, resulting in improved default alignment for left-, center- and right-aligned names.
  • Braces in markup can now be selected by point size using the markup commands \left-brace and \right-brace
  • Dashed and dotted slurs, phrasing slurs, and ties have been made variable thickness, and partially dashed slurs are now available.
  • An eyeglasses markup was added, indicating strongly to look at the conductor for instructions:A snap-pizzicato (also known as Bartok-pizzicato) articulation was added.
  • FretBoards now have a chordChanges property to keep repeated FretBoard objects from being typeset.

New in LilyPond 2.13.3-0 (Jul 22, 2009)

  • Dashed and dotted slurs, phrasing slurs, and ties have been made variable thickness, and partially dashed slurs are now available:
  • An eyeglasses markup was added, incidating strongly to look at the conductor for instructions:
  • A snap-pizzicato (also known as Bartok-pizzicato) articulation was added:
  • Tuplet number formatting functions are now available to print other fractions and to add notes to the number or fraction

New in LilyPond 2.11.62-1 (Oct 12, 2008)

  • This is is one of the last releases before 2.12, so testing it is encouraged. In addition to a bugfix in empo command, this release has lot of updates to Spanish and German documentation translations, and the stylesheet for HTML documentation has been improved.

New in LilyPond 2.11.44-1 (Apr 22, 2008)

  • setEasyHeads has been renamed to easyHeadsOn, and a new command easyHeadsOff reverts note heads to normal heads.
  • fatText and emptyText have been renamed to extLengthOn and extLengthOff, respectively.
  • Underlining is now possible with the underline markup command.
  • It is now possible to specify, using the page-count variable in the paper block, the number of pages that will be used.
  • A new page breaking function, ly:minimal-breaking, is dedicated to books with many pages or a lot of texts.
  • A table of contents is included using markuplines able-of-contents. Elements are added to it using the ocItem command.
  • Text spreading over several pages is entered using the markuplines keyword. Builtin markup list commands, such as justified-lines or wordwrap-lines may be used, and new ones created using the define-markup-list-command Scheme macro.
  • Particular points of a book may be marked with the label command. Then, the page where these points are placed can be refered to using the page-ref markup command.
  • Page breaking and page turning commands (pageBreak,
  • oPageBreak, etc) can be used at top-level, between scores and top-level markups.
  • The following options are now changed as a -d sub-option: --backend, --safe, --preview and --no-pages (which became -dno-print-pages). The -b option does not exist any more.
  • Improved testing procedure now catch changes in CPU and memory performance, page layout, MIDI results and warnings. This helps to reduce the number of regression errors during development, resulting in more stable releases.