Polylith is a software architecture that applies functional thinking at the system scale. It helps us build simple, maintainable, testable, and scalable backend systems.
A 39 minutes overview of the Polylith architecture, by Joakim Tengstrand and Furkan Bayraktar

What is Polylith?

Polylith is a software architecture that solves some of the fundamental challenges in building backend systems. Those challenges are:
  • It's difficult to share our code across teams and services
  • We lack a shared language for communicating architectural concepts
  • As our codebases grow, they tend to become a complex mess that is hard to change and test
  • We try to mimic our complex production environments in our development environment
  • Our systems take too long to test, build, and deploy
Polylith addresses these challenges by introducing simple, composable, LEGO-like bricks, which can easily be shared across teams and services. The choice of bricks determines what each artefact does and how it's exposed.
To make the development experience even more delightful, we've also built a tool which gives instant creation of the various building blocks, incremental tests (only test the code that's impacted by the last changes), and project visualization.

What isn't Polylith?

  • Polylith isn't a framework and does not come with ready to use functionality.
  • Polylith isn't a library.
  • Polylith isn't a tool (but has tooling support for Clojure).

What programming languages are Polylith for?

Polylith is language agnostic, and it should be possible to use it in almost any programming language. We in the Polylith team have only used it with the functional language Clojure so far, but there is nothing stopping someone from using it in a procedural language like C, or an object oriented language like Java. Even without tooling support, you will get most of the benefits.

Where to begin?

  • If you learn faster with audio/visual presentations, then you can start by watching the videos.
  • If you want to jump straight into some code, then head over to the Polylith RealWorld example app.
  • If you want to play around with the tooling support in Clojure, then head over to the poly documentation.
  • If you're feeling concerned about how a new architecture might affect your deployment setup, then read Transitioning to Polylith.
  • If you prefer to start from the beginning, and take things at your own pace, then you're already in exactly the right place - just keep reading.