The Discourje project: run-time verification of communication protocols in Clojure.

Ruben Hamers, Erik Horlings, Sung-Shik Jongmans*

*Corresponding author for this work

Research output: Contribution to journalArticleAcademicpeer-review


To simplify shared-memory concurrent programming, languages have started to offer core support for high-level communications primitives, in the form of message passing though channels, in addition to lower-level synchronisation primitives. Yet, a growing body of evidence suggests that channel-based programming abstractions also have their issues. The Discourje project aims to help programmers cope with channels and concurrency bugs in Clojure programs, based on dynamic analysis. The idea is that programmers write not only implementations of communication protocols in their Clojure programs, but also specifications. Discourje then offers a run-time verification library to ensure that channel actions in implementations are safe relative to specifications. The aim of this paper is to provide a comprehensive overview of the current state of Discourje, including case studies, theoretical foundations, and practical aspects.

Original languageEnglish
Pages (from-to)757-782
Number of pages26
JournalInternational Journal on Software Tools for Technology Transfer
Issue number5
Publication statusPublished - Oct 2022


  • Concurrency
  • Multiparty session types
  • Runtime verification


Dive into the research topics of 'The Discourje project: run-time verification of communication protocols in Clojure.'. Together they form a unique fingerprint.

Cite this