Using leiningens checkout feature is pretty cool. You can split your application into some modules and still retain the development workflow.

However, when you are running a ring application the hot code reloading wont work out of the box. For this you have to add the extra source paths to the wrap-reload method (generated in core.clj when using luminus).

Mine looks like this:

(if (dev? args) (reload/wrap-reload app {:dirs [„src“ „checkouts/subproject/src“]}) app)

In the :dirs value you can add us much paths as you want and the ring middleware will keep watching the changes there.