hara is not a framework
by Chris Zheng,
When clojure libraries reach a certain size, they tend to be broken down into smaller pieces. Examples of such projects are pinot and lamina where one project suddenly turns into 5 overnight. The most ambitious effort was clojure.contrib - and that was broken down into something like 30 different pieces, each with a seperate repo, maintainer, etc.
hara bucks the trend with an emphasis on integration and wholistic design. Progress has been stop, start and painfully slow at times. It has taken more 3 years for the code to reach critical mass and for me to get a half decent website off the ground.
In terms of its evolution, I started off with a bunch of disparate libraries (cronj, ova, iroh, ribol, hara, kiran, gita, adi and cassius), abstracted out the common patterns and useful functions and put them all into hara. Even though many of these projects have been/are/about to be deprecated, their spirit still lives on (or have been improved) under a different name:
- iroh has been moved to hara.reflect
- ova has been moved to hara.concurrent.ova
- cronj has been superceded by hara.io.scheduler
- ribol has been superceded by hara.event
- kiran has moved to hara.concurrent.propagate
- gita's interop functions have been moved to hara.object
- adi's data merging functions have been moved to hara.data.complex
- cassius's extensible container pattern has been codified in hara.extend.abstract
Of course, there are more goodies that are not yet exposed but I wanted to get something out to have some feedback from the community.
As of this announcement, there are only 5 guides up on the website but more will be coming in the near future. The guides are extremely comphrensive, very stable in terms of the api, and have been thoroughly tested with almost 800 tests covering the entire suite. All of the code except hara.io.scheduler
has been used in production - although that will change as I start to migrate older cronj code to the new module.
For now though, please enjoy.