1. A Modern Project Manager: Leiningen or Clojure CLI
Before you write a single line of code, you need a way to manage your project's structure, dependencies, and build tasks. For years, Leiningen was the undisputed champion, an all-in-one workhorse that handles everything from creating a new project to running
tests and packaging an application. Its configuration lives in a 'project.clj' file, and it remains a fantastic, mature choice. However, the official Clojure command-line interface (CLI) tools, centered around a 'deps.edn' file, have gained significant traction. The 'deps.edn' approach is more focused and modular, handling dependency and classpath management, while delegating other tasks to separate tools or aliases. It represents a simpler, more data-driven philosophy. Newcomers might find Leiningen's 'all-in-one' nature easier to start with, while many seasoned developers now prefer the flexibility and explicit control of the Clojure CLI. Knowing at least one of these is non-negotiable.
2. An Editor with a REPL Connection: Calva or CIDER
Clojure development isn't about writing code, compiling, and then running. It's a conversation. The REPL (Read-Eval-Print Loop) is the heart of this interactive workflow, and your editor is its soulmate. You need an editor that can connect directly to your running application, allowing you to send code snippets for evaluation, inspect data, and redefine functions on the fly. For VS Code users, Calva is the gold standard, providing a rich, integrated Clojure development experience that is welcoming to newcomers. For those who live in Emacs, CIDER is the legendary, incredibly powerful choice that offers unparalleled depth and customizability. While other options exist, these two represent the pinnacle of modern Clojure editing. Choosing between them is a matter of editor preference, but forgoing a REPL-connected editor entirely is like trying to fly with one wing.
3. A Deeper Understanding of the REPL Workflow
This isn't a single piece of software, but a foundational skill that feels like a superpower. REPL-Driven Development (RDD) is more than just typing commands into a prompt; it's a philosophy of building your application from the inside out. It means starting your system and shaping it piece by piece, getting immediate feedback at every step. Instead of writing a whole function and then writing a test to see if it works, you build it interactively in the REPL, testing your assumptions as you go. You can explore APIs, transform data, and debug issues without constant restarts. This tight feedback loop is what makes Clojure so productive and enjoyable. Mastering this workflow—understanding how to load files, switch namespaces, and inspect the state of your running application—is arguably the most important 'tool' a Clojure developer can possess.
4. A Solid Test Runner: Kaocha or the Built-ins
Interactive REPL exploration is fantastic for development, but professional software needs repeatable, automated tests. Clojure comes with a built-in testing library, 'clojure.test', which is simple, effective, and perfectly capable for unit testing. Many projects use it exclusively. However, as test suites grow, using a dedicated test runner can dramatically improve your workflow. A modern test runner can add features like 'watch mode' (automatically re-running tests when files change), intelligent filtering of which tests to run, randomization, and better reporting. Kaocha is a popular, feature-rich choice that is data-driven and works with both Leiningen and 'deps.edn' projects. It can run 'clojure.test' tests and others, providing a consistent and powerful interface for all your testing needs. Whether you stick with the basics or adopt a feature-rich runner like Kaocha, having a deliberate approach to testing is essential for building robust applications.













