A very important caveat: Clojure compilation is not side-effect free. If you are generating the JVM equivalent of a binary (excluding the assumption of stuff like GraalVM) i.e. a überjar, you are going to have a bad day if your code does stuff like edit configuration files, call a JSON API etc. The code would run during the compilation stage. Something to take note of.