Clojure today exists at a balance point between performance and dynamic flexibility. Some users would be willing to sacrifice dynamic features to gain more performance. Other users would be willing to sacrifice performance to gain better development error messages or debugging. The problem we aim to solve is to alter the Clojure build such that we can produce alternate versions of Clojure that are useful to smaller audiences while retaining Clojure as it is today.

Example builds we may want to produce (examples):

Build profiles

Below are some proposed build variants.

ProfileDescriptionCompiled?Direct linking?Lazy vars?MetadataDev assistance?
devFor developmentYesOffOnFullOn
dynamicFor dynamic production useYesOffOffMinimalOff
staticFor static production useYesOnOffMinimalOff
slimSource onlyNon/an/an/an/a
1.8 clojure jarFor comparisonYesOnOffFullOff

OPEN: Are these the right profiles and the right settings?

OPEN: Which one is the default no-classifier?


Clojure users:


Integration / release infrastructure:


External builds

Builds that use Clojure may also need to make these kinds of compiler choices to produce their own build profiles. 

It would be useful to produce a guide on how to enable combinations of compiler options to produce builds of different flavors for libraries with the common build tools.

Implementation options

Hardest part of this is getting the build to sign and release all of the artifacts together.

Full build would consist of:

OPEN: which implementation would be best? 

Maven custom assembly


Custom script (ant, make, etc)

Coordinate Research

Maven coordinate options