Existing concurrent programming practices leave practitioners with no choice but to program using unbridled concurrency mechanisms, and then find and remove concurrency errors. We believe that this path is untenable. The Panini project investigates an alternative: create abstractions that eliminate classes of concurrency errrors by construction. Our work focusses on an abstraction called a capsule, a boundary within which you can write and reuse sequential code as is. We work on increasing the class of concurrency errors that can be eliminated from capsule-oriented programs by construction.


  • Solve pervasive and oblivious interference problems, enable modular reasoning about concurrent programs
  • Implicit concurrency to eliminate usage of unsafe features like threads & locks
  • Integrated compile-time analysis of concurrency hazards, so errors are caught early
  • Retain familiarity, programmers need not switch to a different mental programming model
  • Enable as-is reuse of sequential code, portions of software guaranteed to be single-threaded

Getting Started

If you are completely new to Panini language, you may want to read our getting started page. You could also look at our overview poster below.

Key Publications

Hridesh Rajan, Capsule-oriented Programming, ICSE 2015, NIER track.

Mehdi Bagherzadeh and Hridesh Rajan, Panini: A Concurrent Programming Model for Solving Pervasive and Oblivious Interference, Modularity 2015.

Ganesha Upadhayaya and Hridesh Rajan, Effectively Mapping Linguistic Abstractions for Message-passing Concurrency to Threads on the Java Virtual Machine, OOPSLA 2015.

Hridesh Rajan et al., Capsule-oriented Programming in the Panini Language, Tech. Report 14-08, Iowa State University, 2014.

More ...