Download musl

Git repository

The latest musl source is always available via the git revision control system. Efforts are made to keep the master branch in a state that not only compiles and works, but that works at least as well or better than the latest release.

The following command can be used to checkout a copy of the musl git repository:

$ git clone git://

Source and revision history are also browsable online via cgit.

Official releases

musl generally follows a time-based release cycle, with versions spaced roughly one to three months apart. Version numbering, however, is based on an evolving roadmap for particular compatibility and feature goals. Releases are timed so as to make fixes for major bugs available in release form as soon as possible while leaving ample time for testing after significant invasive changes.

Beginning with 1.1.7, releases are signed with the project GPG key. Its fingerprint is 8364 8929 0BB6 B70F 99FF DA05 56BC DB59 3020 450F and can be cross-checked against @musllibc on Twitter.

See below for release notes summaries and download links.

Current Versions

Mainline - 1.1.22

This series is actively developed but intended for use in production environments as long as appropriate testing is performed.

musl-1.1.22.tar.gz (sig) - April 9, 2019

This release makes major internal changes to the way threads, dynamic thread-local storage, and multi-threaded set*id() work. There is now a global thread list that is complete and consistent whenever the lock protecting it can be obtained, including at the moment of kernel-level task exit, and the lock protocol is async-signal-safe. This allows set*id() to safely synchronize privilege change for all live threads without a /proc dependency which turned out to have fundamental race conditions. Availability of the thread list has also allowed dlopen to install new TLS for each thread at library load time, rather than deferring installation to first access, which improves global-dynamic model performance and eliminates working but theoretically-unsafe calls from the TLSDESC asm into C code when the TLSDESC model is used to access dynamic TLS.

Major changes have also been made to the dynamic linker's library dependency handling, for the purposes of correcting dlsym dependency-order resolution of symbols and providing dependency-order execution of shared library constructors. Calls to dlopen from multiple threads can now run ctors concurrently, serializing only on shared dependencies, and recursive calls to dlopen behave more correctly (believed to be to the maximum extent possible) with regard to non-deadlock and to ensuring that dependencies have been constructed.

Support for the priority inheritance mutex type has also been added, with the ability to create PI mutexes conditional on a probe for support by the kernel.

Notable regressions in sscanf and pthread_key_create introduced in 1.1.21 have also been fixed, along with various other bugs and minor conformance issues.

Older versions

Earlier versions of musl have been moved to a separate page.