The Chapel Programming Language

Productive parallel computing at every scale.
writeln("Hello, world!");

// create a parallel task per processor core
coforall tid in 0..<here.maxTaskPar do
  writeln("Hello from task ", tid);

// print these 1,000 messages in parallel using all cores
forall i in 1..1000 do
  writeln("Hello from iteration ", i);
// print a message per compute node
coforall loc in Locales do
  on loc do
    writeln("Hello from locale ", loc.id);

// print a message per core per compute node
coforall loc in Locales do
  on loc do
    coforall tid in 0..<here.maxTaskPar do
      writeln("Hello from task ", tid, " on locale ", loc.id);

// print 1,000 messages in parallel using all nodes and cores
use BlockDist;
const Inds = blockDist.createDomain(1..1000);
forall i in Inds do
  writeln("Hello from iteration ", i, " running on locale ", here.id);
use IO;

// read in a file containing 'city name;temperature' lines (1BRC-style)
const stats = [line in stdin.lines()] new cityTemperature(line);
writeln(stats);

record cityTemperature {
  const city: string;  // city name
  const temp: real;    // temperature

  proc init(str: string) {
    const words = str.split(";");
    this.city = words[0];
    this.temp = words[1]: real;
  }
}
// set different values at runtime with command line arguments
// e.g. --n=2048 --numSteps=256 --alpha=0.8
config const n = 1000,
             numSteps = 100,
             alpha = 1.0;

const fullDomain = {1..n},
      interior   = {2..n-1};

var u: [fullDomain] real = 1.0; 
u[n/4..3*n/4] = 2.0;  // make the middle a bit hotter

var un = u;

for 1..numSteps {
  forall i in interior do  // shared-memory parallelism
    u[i] = un[i] + alpha * (un[i-1] - 2*un[i] + un[i+1]);  
  un <=> u;  // swap the two arrays
}

writeln(un);
use Random, Math;

const nGpus = here.gpus.size,
      n     = Locales.size*nGpus;

var A: [1..n, 1..n] real;

fillRandom(A);

// use all nodes
coforall (loc, localRowStart) in zip(Locales, 1.. by nGpus) do on loc { 
  // and all GPUs within each
  coforall (gpu, row) in zip(here.gpus, localRowStart..) do on gpu {    
    var B: [1..n] real = A[row, ..];    // copy a row onto the device
    B = asin(B);                        // compute (kernel launch)
    A[row, ..] = B;                     // copy the row back
  }
}

writeln(A);

Users Love It

The use of Chapel worked as intended: the code maintenance is very much reduced, and its readability is astonishing. This enables undergraduate students to contribute to its development, something almost impossible to think of when using very complex software.

- Éric Laurendeau, Professor, Polytechnique Montréal

A lot of the nitty gritty is hidden from you until you need to know it. ... It feels like the complexity grows as you get more comfortable -- rather than being hit with everything at once.

- Tess Hayes, Developer, Bytoa

Chapel in Production

Chapel Newsletter - May 2026

Posted on May 29, 2026

Our quarterly newsletter, with updates on funding, papers, talks, interviews, and the website

Click for More

"30 Years of Scalable Parallel Programming" talk now available

Posted on May 22, 2026

Catch the replay of Brad's recent 15-minute PNW PLSE talk, "30 Years of Scalable Parallel Programming: So Many Hardware Advances, So Few Broadly Adopted Languages"

Click for More

CUG 2026 study of aggregators and energy

Posted on April 28, 2026

This presentation and its accompanying paper look at the impact of aggregators on energy usage as well as performance in both Chapel and Conveyors (SHMEM)

Click for More

Chapel Project Seeks New Funding

By Chapel TSC on April 21, 2026

The Chapel project is seeking new sources of funding—or other creative ideas for sustaining the project—in order to keep the technology going

Click for More

Interview with Engin Kayraklioglu on the My Open Source Experience podcast

Posted on April 14, 2026

Engin Kayraklioglu was interviewed by Ildikó Váncsa on the 'My Open Source Experience' podcast about the roles of interning and mentoring in his open source experience

Click for More

Chapel HPSFCon 2026 Talks

Posted on March 30, 2026

Slides and video from Chapel-related sessions from HPSFCon 2026 are now available online!

Click for More

7 Questions for CHAMPS Developers: Empowering Academic R&D to Create Cutting-Edge CFD Apps in Chapel

By Engin Kayraklioglu , Brad Chamberlain on March 26, 2026

An interview with graduate students at Polytechnique Montréal about their experiences doing Computational Fluid Dynamics in Chapel

Click for More

Click for more news...