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 Clojure Atlas makes it easier to grok Clojure…

Explore the Clojure language and standard library

The Clojure Atlas is driven by a hand-curated buy stocks 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.

View documentation, source, and conceptual relationships dynamically

The docs and source code for all core functions are included Standard deviation ; focus on related data structures, syntax, and abstract concepts with just a click.

See—then understand how Clojure relates to key Java/JVM interfaces & concepts

The ontology includes a full graph of the relationships among Clojure's JVM bits, allowing you to easily understand key implementation details.

Current Status

I'd say Clojure Atlas for Clojure v1.2.x is probably somewhere around 60% complete; I would characterize it as an "alpha" still, though I think it's quite useful even so. At a high level, this means:

  • The underlying ontology is there, but it's very rough. All of clojure.core's vars have been linked up with key concepts (which are themselves not documented yet). Auxilliary vars from the standard library are in the ontology, but have no relationships Stochastic oscillator therein (so you can e.g. search for them and see their docs/source, but you'll not be able to navigate to or stumble upon those vars by exploring the graph).
  • The graph visualization is mostly "done" (based on the notion I had for it, anyway), and entirely usable (pleasantly so, IMO), but there is tweaking to be done still. In particular, the visualization doesn't settle as quickly as I'd like, and I'd like to investigate some more subtleties in node and edge rendering.

I have a TODO/wish list that's a mile long at this point that I won't bother enumerating here. Outside of the obvious, necessary stuff that has to be finished, I'm relying on you to inform what's important. So: if you have suggestions, requests, or other feedback, please do get in touch with me; the Uservoice forum, email, or twitter are all good.

Would you like to be notified when Clojure Atlas hits major milestones? Either drop me your email address (nope, I'm no spammer), and/or follow @ClojureAtlas on Twitter.

Get updates by email:

Follow @ClojureAtlas on Twitter

About Clojure Atlas

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 is a side project, but one I'm particularly excited about. Other side projects of mine include authoring and contributing to many a Clojure open source library, writing at cemerick.com, and co-authoring the forthcoming Clojure Programming book 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 in Hudson using the clojure-maven-plugin for Maven. 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.