# Medley: a deliberately small set of Clojure functions missing from clojure.core

> Medley is a lightweight Clojure and ClojureScript library of mostly pure general-purpose functions, published under the Eclipse Public License and installable through tools.deps, Leiningen or deps.clr. Its distinguishing decision is what it leaves out, and its version history shows two breaking changes that a consumer still has to plan around.

**weavejester/medley** — A lightweight library of useful Clojure functions

- Repository: https://github.com/weavejester/medley
- Stars: 918 · Forks: 72
- Language: Clojure
- License: EPL-1.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/weavejester-medley

## The scope is the product, and it is deliberately narrow

Medley is described as a lightweight Clojure and ClojureScript library of useful, mostly pure functions that are missing from clojure.core. Two words in that sentence carry the design. The functions are mostly pure, so the library is closer to a set of pure helpers than to a collection of side-effecting utilities, and they are missing from clojure.core, which frames the whole thing as filling gaps in the standard library rather than replacing it or wrapping it. The README then states the scope rule explicitly, saying Medley has a tighter focus than flatland/useful or Plumbing and limits itself to a small set of general-purpose functions. Those two libraries are named as the comparison points, which tells you the author was aware of the crowded utility-library space and chose not to compete on breadth. For a reader picking a dependency, that is the single most useful sentence in the README, because most utility libraries fail by growing until nobody can predict what they pull in.

## Three build tools, three coordinates, one library

Installation is the ordinary Clojure multi-tool arrangement, and the README gives a snippet for each of the three supported build systems. For tools.deps, the dependency goes into your deps.edn file:

```toml
dev.weavejester/medley {:mvn/version "1.10.0"}
```

For Leiningen it goes into the project file:

```bash
[dev.weavejester/medley "1.10.0"]
```

And for deps.clr, the .NET port of tools.deps, it goes into deps-clr.edn with a git tag and a commit sha:

```toml
io.github.weavejester/medley {:git/tag "1.10.0" :git/sha "7bf2619"}
```

The group id changes between the Maven coordinates and the deps.clr coordinates, io.github.weavejester rather than dev.weavejester, which is a detail that will trip you up if you copy the wrong line. The repository carries the matching project files for all three at the root, with deps.edn, project.clj and deps-clr.edn sitting alongside each other, so the same source tree serves the JVM, ClojureScript and .NET Clojure consumers.

## Two pre-1.0 breaking changes are still documented, which tells you what to check

The README keeps a section on pre-1.0 breaking changes, and reading it is the practical test of whether you can adopt this library without surprises. In 0.7.0 the minimum Clojure version moved from 1.5.1 to 1.7.0, in order to take advantage of reader conditionals, and the update function was removed because it is now present in clojure.core. In 0.6.0 the type signature of greatest and least was changed to be more like max and min in Clojure core, and the README asks anyone upgrading from a version prior to 0.6.0 to update their usage of greatest and least. Both entries still matter for a codebase that started with the library early. The current version is 1.10.0, so any of these are far in the past, but the fact that they are recorded rather than erased tells you the author treats API changes as something a consumer is entitled to read about before upgrading.

## The EPL-1.0 is the licensing decision that needs a minute of thought

Medley is distributed under the Eclipse Public License, either version 1.0 or, at your option, any later version, with the copyright held by James Reeves and dated 2026 in the notice. The licence field for the repository reads EPL-1.0, and a LICENSE.txt sits at the root. The EPL sits in an unusual place among open source licences: it is a weak copyleft licence, in the same family as the LGPL, which means modifications to the library itself must be made available, while linking a separate work that depends on it does not in the way the GPL would require. The practical question for anyone shipping a product is narrower than the theory, since a dependency on a library is not distribution of the library, but if you plan to modify Medley's source and redistribute it, you have a file-level copyleft obligation to account for. This is a description of the terms and not legal advice, so if the arrangement is unusual, read the licence text and take your own advice on it.

## Documentation lives on a generated API page, not in the README

The README is short, and that is because the reference documentation is elsewhere. The Documentation section links to API Docs hosted at weavejester.github.io, pointing at the medley.core namespace page. So the entry point for the actual function list is a generated API reference rather than a hand-maintained README section, which is the usual arrangement for a library of this shape in the Clojure ecosystem. The repository layout backs that up, with src holding the sources and test holding the tests, a CI workflow badge for the test run, a CONTRIBUTING.md for the contribution process, and a .travis.yml left in the tree from an earlier era of continuous integration. There are no GitHub releases for this project, so the published artefacts are the library versions on the package repositories and the version numbers quoted in the install snippets, which is 1.10.0 in all three cases.

## What to check before you depend on a library this small

A small library carries a different set of risks from a large one, and they are about continuity rather than capability. With a utility collection of this size, the questions are practical. Does the function you want exist, and what are its argument semantics, especially for the ones whose signatures were changed in 0.6.0. Does the library work in the runtime you target, since it supports both Clojure and ClojureScript but the details of reader conditionals mean some functions may differ between them. Does your Clojure version clear the 1.7.0 floor. And is there an active maintainer, since the repository is not archived and the last push was on 2026-08-18, with the maintainer being the same person whose name appears in the licence notice. For a library of mostly pure functions, the failure mode when it stops being maintained is manageable, since the code is small enough to vendor or reimplement, but the honest comparison remains with writing the few helpers yourself.

## Conclusion

Medley suits a Clojure developer who keeps reaching for a small handful of general-purpose helpers and wants them in one place without taking on a large utility dependency, and who is comfortable pinning a fixed version. It does not suit someone who wants a broad toolbox, because the library deliberately limits itself to a small set of general-purpose functions and has a tighter focus than flatland/useful or Plumbing. Before you add it, read the pre-1.0 breaking change notes, check whether your code calls greatest or least with the old argument order, and confirm that the EPL-1.0 terms suit your distribution model before you vendor it into a product.

## FAQ

### How do I add Medley to a Clojure project?

Add dev.weavejester/medley with the version 1.10.0 to your deps.edn file, or [dev.weavejester/medley "1.10.0"] to your Leiningen project file, or io.github.weavejester/medley with a git tag and sha to your deps-clr.edn file.

### How does Medley differ from flatland/useful or Plumbing?

The README says Medley has a tighter focus than flatland/useful or Plumbing and limits itself to a small set of general-purpose functions, mostly pure ones that are missing from clojure.core.

### What changed in the pre-1.0 releases of Medley?

In 0.7.0 the minimum Clojure version moved from 1.5.1 to 1.7.0 to use reader conditionals, and update was removed because it now exists in clojure.core. In 0.6.0 the type signature of greatest and least was changed to resemble max and min.

### Which licence does Medley use?

Medley is distributed under the Eclipse Public License, either version 1.0 or, at your option, any later version, with the copyright held by James Reeves. The licence field for the repository reads EPL-1.0.

## Sources

- [Issues](https://github.com/weavejester/medley/issues)
- [License: EPL-1.0](https://github.com/weavejester/medley/blob/master/LICENSE)
- [README](https://github.com/weavejester/medley/blob/master/README.md)
- [weavejester/medley on GitHub](https://github.com/weavejester/medley)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/weavejester-medley
