Caribou was designed to remove the extraneous effort usually required to develop a web application. Born from the daily toil of building real sites, this project collects a variety of useful functionality and forges it under a small set of powerful concepts into a coherent, cooperative system.
One overriding design philosophy has been the creation of small modules that do one thing extremely well, and stay out of everyone else's way. This entire process has been informed by witnessing the suffering inflicted by countless other frameworks on ourselves and our own friends and family. The result is that there are a number of modules you may choose to wield or not, as your needs dictate.
Caribou Core lays the foundation for all of the other libraries by capturing the data model of a site as data! A data model is traditionally only an implicitly defined being, existing as a conglomeration of migrations and tables whose relationships are only formed through happy accidents within application code. Caribou Core structures the data model in a way that allows it to serve a variety of other purposes, including the construction of queries that filter and order based on the relationships between models.
Caribou API provides a free, working, out of the box api for every model you create. You can retrieve data across HTTP in a variety of formats (JSON, XML, CSV) and with an endless degree of refinement and expressiveness, all without laying a finger! Enjoy some tea instead, get some sunshine.
Caribou Frontend is the basis for a fully functional web application, with everything done except for what the site actually is, the whole point of you undertaking this endeavor. It provides routing based on a tree of pages you define, once again benefiting from turning what was previously a hard-coded consequence of application design into an infinitely malleable medium at your control. A Page forms a mapping between a route and an action, defined by you, which is simply whatever you want it to do. Here is where the *code* goes, if you require any. In case that turns out to be rendering responses, Caribou Frontend provides templates in the form of Mustache, which are a graceful way of getting the point across.
Last but not least, Caribou Admin allows you to govern everything from behind a swift and capable web interface. Build models, link them, add pages, create content, link that, do anything (currently allowable). No tacked on admin thrown together at the last minute. Let us handle that.
There are a number of supporting libraries in the Caribou family, (part of the Tundra, if you will), which contribute to Caribou but which also stand on their own as useful, usable projects in their own right.
Here is a current list of associated projects:
Caribou is written in Clojure, a fast, flexible language designed from the bottom up to be highly concurrent. If you are used to single-threaded interpreting languages like Ruby or Python, the performance increase can arrive as quite a shock. Clojure finds the sweet spot of deep expressiveness and raw animal speed, while gracefully hurdling the problem of concurrency that have brought down so many before it. In other words, the Language of the Future.
If you have never heard of it, then this is the perfect opportunity to learn!
Caribou also uses Leiningen as a build tool and command line utility, with its own leiningen plugin, Lein Caribou.
That's it! Unless you would also like to harness the most powerful open source database available today: Postgresql, which Caribou supports but does not require (though highly recommends!)
Install Java >= 1.6 Install Leiningen 2 Create a new Caribou project:
$ lein new caribou pictographBootstrap and start the new project:
$ cd pictographNow navigate to your new site, and embark! (Later, play around with the api or the admin).
$ lein caribou migrate resources/config/development.clj
$ lein ring server
For building something with Caribou, there is extensive documentation of the various facets here:
Also, check out the various API Docs:
ryan spangler (spangler@weareinstrument.com)
phong ho (phong@weareinstrument.com)
ryan roemmich (ryan@weareinstrument.com)
justin smith (justin.smith@weareinstrument.com)
kyle dawkins (kyle.dawkins@weareinstrument.com)