Announcing Chapel 1.21.0!

Dear Chapel community –

Cray, a Hewlett Packard Enterprise Company, and the Chapel open-source community are proud to announce the release of Chapel version 1.21!

[Mac users: the Homebrew formula is still working its way through the system… see ]

This is the first of two releases that we will be making this month. Chapel 1.21 is our typical semi-annual release containing numerous feature and performance improvements. Chapel 1.22 will focus on changing Chapel’s implicitly indexed types to 0-based indexing from Chapel’s historical choice of 1-based. We recommend that users with existing Chapel code incrementally upgrade to version 1.21 before 1.22 in order to ease the transition.

Chapel 1.21 includes the following highlights, many of which support our goal of stabilizing Chapel’s core features for a forthcoming Chapel 2.0 release:

  • Chapel’s modules and namespaces have improved in a number of ways, including:

    • the addition of a new import statement that provides a more precise way of referring to a module’s contents

    • a new ability to rename modules when they’re used via as (e.g., use MyLongModuleName as M;)

    • prototypical support for storing a module’s sub-modules in their own files

    • reduced bleeding of symbols between modules by making use private by default and leveraging it in Chapel-provided modules

  • Chapel strings are now validated to ensure that they are UTF8, and the bytes type has been improved to be a true peer to strings.

  • Chapel now supports split initialization of variables, constants, types, params, and refs, which permits the declaration of a symbol to occur in a distinct statement from its initialization.

  • We added several features that support a more index-neutral style of programming, such as support for looping over heterogeneous tuples and a .indices query for most collection types.

  • This release also contains several new performance improvements and optimizations including:

    • better performance and scalability when creating distributed domains and arrays

    • improvements to the unordered operation optimization and its associated unorderedCopy() routine

    • optimized on-statement performance for InfiniBand networks

    • improved performance (and correctness) of mis-aligned ugni data transfers

  • The language specification has been converted from PDF to HTML to better integrate it with Chapel’s other online documentation (see

  • The ofi/libfabric implementation of the runtime has improved in terms of functionality, portability, and performance.

In addition, Chapel 1.21 contains many other feature enhancements, bug fixes, and documentation improvements. For a far more complete list of changes, including pointers to supporting documentation, please refer to within the release or online:

To download and install the release, see:

And for a list of everyone who contributed to Chapel 1.21, please see:

As always, we’re interested in feedback on how we can make the Chapel language, implementation, libraries, and tools more useful to you.

On behalf of the Chapel project,
-Brad Chamberlain

For further information about Chapel

Whether you’re a user of Twitter or Facebook, or would simply enjoy
checking in on us from time-to-time, Chapel’s social media pages have
a reasonably steady stream of content about the project and language:

Our development repository is hosted at GitHub, making it the best
place to track, or contribute to, ongoing Chapel development:

The Chapel website can be found at:

and it remains the best place to find Chapel-related information such
as videos, papers, presentations, blog posts, and tutorials.