Choral: Choreographic Programming for Java

Choral is a programming language that brings choreographic programming to Java, allowing developers to write distributed applications as a single program that compiles to Java code for each participant. This approach eliminates the need to manually coordinate messages between services, reducing bugs and improving readability. Choral's type system ensures that communication sequences are correct at compile time, and it supports modern Java features like generics and lambdas. The project is open source and aims to make distributed programming as easy as writing a single-threaded program.

  1. groomlake

    I only skimmed the page and it looks like a really cool idea, but I have a question about this:

    types to let you express things like “the Client communicates this to Service, then Service communicates that to the Login Provider, then […]”

    If the client needs to know about all that stuff that happens after its call to Service, isn't Service a leaky abstraction? My idea of OO, which I got from GOOS[1], is that each object talks only to its neighbors and it shouldn't have to know about their neighbors' neighbors or their neighbors' implementation details because the messages sent between objects are at the level of the domain. Same with microservices, in principle. The benefit is that you can reason about each object/microservice in isolation. If you must know that A then B then C then D, why split the code/services in the first place?

    Sorry if the docs already answer this, I'll have a closer look later.

    [1]: https://growing-object-oriented-software.com/

  2. dplyukhin

    Since HN is discovering choreographic programming today [1], I thought I’d share the compiler we’ve been working on for a few years now. Feel free to ask questions below and I’ll answer as best I can :)

    [1]: https://news.ycombinator.com/item?id=49209385

  3. elric

    Thanks for sharing this. I hadn't heard of choreographic programming.

    Does it compile straight Java bytecode, or does it generate Java code which is then compiled by javac?

More from this day

2026-08-11