Learn Clojure faster, use Clojure wisely.
Instant access to documentation, source, lovingly-crafted conceptual relationships, and a dynamic visualization of how everything ties together.
Because a great language deserves to be paired with a great way to understand it.
Some of the ways makes it easier to grok Clojure…
Explore the Clojure language and standard library
The Clojure Atlas is driven by a hand-curated ontology of Clojure language and library concepts.
Find functions, classes, and concepts in a snap
Think code completion, but over every entity and concept within Clojure, with a visualization of related terms a click or keystroke away.
Current Status
Clojure Atlas is complete. I'm sad to say I've not worked on Clojure Atlas since I updated it to include those bits added in Clojure 1.4.0. I had many ideas on how it could be improved, but other projects have long since captured my interest, and so Clojure Atlas is now available gratis. Depending on interest, I may attempt to shake out the underlying dataset, though I'm very unlikely to ever open source the application itself; it's more of a hairball than I'd like to release, and I've little motivation to spend time cleaning up a project from which I've moved on. I'm certain there are others with better visual / UI design chops that could run circles around the little thing I once constructed here…
About
While Clojure Atlas has a number of raisons d'être, it fundamentally exists because I've consistently thought that typical programming language and API references – being, in general, walls of text and alphabetized links – are really poor at conveying the most important information: not the minutiae of function signatures and class hierarchies, but the stuff that's "between the lines", the context and interrelationships between such things that too often are only discovered and internalized by bumping into them in the course of programming. This is especially true if we're learning a language and its libraries (really, a never-ending process given the march of progress), and what's standing in our way is not, for example, being able to easily access the documentation or signature for a particular known function, but discovering the mere existence of a previously-unknown function that is perfect for our needs at a given moment.
tl;dr: Technical documentation doesn't need to suck so hard.
Why Clojure? I use it every day, and a number of its facilities make it particularly amenable to being a good place to start proving out some of the visualizations and user interactions I have in mind to address these problems of context and discoverability.
Clojure Atlas requires a "modern" browser. Specifically, Chrome, Safari, Internet Explorer 9, or Firefox 3+ (in that order of preference; Firefox is sadly quite the dog when it comes to SVG).
Clojure Atlas was one of my side projects once. Others include authoring and contributing to many a Clojure open source library, writing at cemerick.com, and co-authoring Clojure Programming from O'Reilly.
– Chas
Colophon and Credits
Clojure Atlas would not be possible without a raft of incredibly high-quality projects and resources:
- The physics of the visualization are driven by arborjs, an excellent Javascript graph visualization library that implements a particle system simulation (or, to be precise, my fork of arborjs that fixes a variety of minor issues I've run into while hacking on Clojure Atlas).
- The chrome of the visualization are produced using Raphaël, a Javascript vector graphics library that ends up being a convenience layer for SVG, and jQuery to glue it all together.
- I write all my code in Eclipse with the help of the Counterclockwise plugin for Clojure. This includes the ontology, defined as a huge pile of Clojure vector, map, and keyword literals, which is prepared for delivery to the browser by dumping it to JSON.
- All of the Javascript needed to run Clojure Atlas is concatenated and minified by the Google Closure Compiler.
- Syntax highlighting of Clojure source code is provided by Daniel Solano Gómez's Clojure SyntaxHighlighter brush for the SyntaxHighlighter Javascript library.
- This site is built using Ring, Compojure, and Enlive — all wonderful Clojure web libraries — and assembled and deployed on Heroku using Leiningen. The runtime data access for the site (used only for accounting, analytics, and other miscellanea) is all AWS S3 and SDB, the latter accessed using the rummage library for Clojure.
- …and, of course, Clojure itself. In particular, the metadata available at runtime for each function, macro, etc. is what enables the trivial harvesting of documentation and source code. And, of course, I quite love the language, and am forever indebted to Rich Hickey for improving my life as a programmer more than any other language or tool I've ever encountered.