Rich Hickey, the author of Clojure and designer of Datomic, is a software developer with over 30 years of experience in various domains. Rich has worked on scheduling systems, broadcast automation, audio analysis and fingerprinting, database design, yield management, exit poll systems, and machine listening, in a variety of languages.
This keynote was given at Strange Loop 2011, and is perhaps the best known and most highly regarded of Rich's many excellent talks, ushering in a new way to think about the problems of software design and the constant fight against complexity.
The video was recorded at Strange Loop in partnership with InfoQ, who have hosted it on their site since 2011. This version (released 10 years later) is a new edit made from the original HD video and slides, restoring the slide transitions and animations as it was given in 2011.
In this presentation, we explore the concept of knowledge databases, which represent entities and their relationships in a structured and semantic way. By combining this model with immutability—where data is never overwritten, only accumulated—it becomes possible to build systems with a complete, auditable history and native versioning. This approach is particularly powerful in complex ecosystems like Nubank’s, where thousands of microservices interact. We’ll show how modeling these interactions as a knowledge database allows us to uncover patterns, dependencies, and insights that are otherwise hidden, ultimately helping teams understand and evolve the system more safely and intelligently.
Biography
Darlei Soares and João Nascimento are software engineers and data enthusiasts with deep experience in building systems around immutable knowledge databases. Currently part of the engineering team at Nubank, Darlei and João both work on designing and maintaining highly distributed services that leverage Datomic at scale, powering financial operations for millions of customers.
Recorded Nov 13, 2025 at Clojure/Conj 2025 in Charlotte, NC.
Data-driven Schemas for Clojure/Script and babashka.
Metosin Open Source Status: Active. Stability: well matured alpha.
- Schema definitions as data
- Vector, Map and Lite syntaxes
- Validation and Value Transformation
- First class Error Messages with Spell Checking
- Generating values from Schemas
- Inferring Schemas from sample values and Destructuring.
- Tools for Programming with Schemas
- Parsing and Unparsing values
- Enumeration, Sequence, Vector, and Set Schemas
- Persisting schemas, even function schemas
- Immutable, Mutable, Dynamic, Lazy and Local Schema Registries
- Schema Transformations to JSON Schema, Swagger2, and descriptions in english
- Multi-schemas, Recursive Schemas and Default values
- Function Schemas with dynamic and static schema checking
- Integrates with both clj-kondo and Typed Clojure
- Visualizing Schemas with DOT and PlantUML
- Pretty development time errors
- Fast
A fast data-driven router for Clojure(Script).
- Simple data-driven route syntax
- Route conflict resolution
- First-class route data
- Bi-directional routing
- Pluggable coercion (malli, schema & clojure.spec)
- Helpers for ring, http, pedestal & frontend
- Friendly Error Messages
- Extendable
- Modular
- Fast
The deps.edn file is a data file specifying all information needed to form a project classpath, including deps, paths, and external dependency repository information. The deps.edn file format is used by the tools.deps library and the Clojure CLI.
If you are building a tool that would like to leverage deps.edn, create well-known namespaced :aliases as a means to convey tool configuration, rather than adding new arbitrary tags elsewhere in the deps.edn data - these may not be preserved or conveyed during processing. Tools can access alias data via the basis at runtime, or programatically via tools.deps.
cljfmt is a tool for detecting and fixing formatting errors in Clojure code.
Its defaults are based on the Clojure Style Guide, but it also has many customization options to suit a particular project or team.
It is not the goal of the project to provide a one-to-one mapping between a Clojure syntax tree and formatted text; rather the intent is to correct formatting errors with minimal changes to the existing structure of the text.
If you want format completely unstructured Clojure code, the zprint project may be more suitable.
A small library for explicit, intentful configuration.
- [[aero/aero "1.1.6"] - Clojars](https:// .org/aero)
Avoid switching between Clojure and bash scripts. Enjoy your parens on the command line.
This topic documents the data format for Datomic datalog queries and rules. If you want to follow along at a REPL, most of the examples on this page work use the mbrainz-subset database and are in the Day of Datomic Cloud repository.
Getting started
The spec library (API docs) specifies the structure of data, validates or conforms it, and can generate data based on the spec.
Clojure is a dynamic language. Among other things this means that type annotations are not required for code to run. While Clojure has some support for type hints, they are not an enforcement mechanism, nor comprehensive, and are limited to communicating information to the compiler to aid in efficient code generation. Clojure gets runtime checking of a richer set of types by the JVM itself.
However it has always been a guiding principle of Clojure, widely valued and practiced by the community, to simply represent information as data. Thus important properties of Clojure systems are represented and conveyed by the shape and other predicative properties of the data, not captured or checked anywhere since the runtime types are indistinguishable heterogeneous maps and vectors.
Documentation strings can be used to communicate with human consumers, but they can’t be leveraged by programs or tests, i.e. they have minimal power. Users have turned to various libraries such as Schema and Herbert to get more powerful specifications.
This docs/ directory is the documentation “source of truth” that lives alongside the code and evolves with it.
- Start with SUMMARY.md as the navigation spine.
- Add pages incrementally; the structure is designed to work well with future tooling (mdBook, Zola, Docusaurus, etc.).
A graph database built for data that matters. Temporal, verifiable, standards-compliant.
Fluree stores data as RDF triples with complete history, integrated search, and fine-grained access control — in a single binary with no external dependencies.
Billions of triples on commodity hardware. Over 2M triples/second bulk import. Benchmark leader across 105 W3C SPARQL queries.
CLJ Commons is a community-led project to build up the supporting infrastructure around Clojure to make it a better experience for people new to Clojure, as well as existing Clojurists.
Calva is an integrated, REPL powered, development environment for enjoyable and productive Clojure and ClojureScript programming in Visual Studio Code. It is feature rich and turnkey. A lot of effort has been put into making Calva a good choice if you are new to Clojure. Calva is open source and free to use.

Builds are programs. Let's start treating them that way.
Most build tools are declarative, and for a long time they worked well for us. The problem is that the increasing number of platform, framework, and library combinations have made it impossible for these tools to be both declarative and comprehensive. Instead of a special-purpose DSL, Boot supplies abstractions and libraries you can use to automate nearly any build scenario with the full power of the Clojure language. It's not a build tool - it's build tooling.

Leiningen is the easiest way to use Clojure. With a focus on project automation and declarative configuration, it gets out of your way and lets you focus on your code.
Install Leiningen with your package manager; for example sudo apt install leiningen

![]()
Clojure is a robust, practical, and fast programming language with a set of useful features that together form a simple, coherent, and powerful tool.