diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..8850122662c976a8db53ffb2cb3c543f63b04c58
--- /dev/null
+++ b/README.md
@@ -0,0 +1,56 @@
+# Fix: memoization and fixed points made easy
+
+`fix` is an OCaml library that helps with various constructions
+that involve memoization and recursion.
+
+## Installation
+
+Type `opam install fix`.
+
+## Overview
+
+At the top of an OCaml module, declare `open Fix`.
+This gives you access to the following submodules:
+
+* [`Gensym`](src/Gensym.mli) offers a simple facility
+  for **generating fresh integer identifiers**.
+
+* [`Memoize`](src/Memoize.mli) offers a number of combinators
+  that help **construct possibly recursive memoizing functions**, that
+  is, functions that lazily record their input/output graph,
+  so as to avoid repeated computation.
+
+* [`Tabulate`](src/Tabulate.mli) offers facilities
+  for **tabulating a function**, that is, eagerly evaluating this function
+  at every point in its domain, so as to obtain an equivalent
+  function that can be queried in constant time.
+
+* [`Number`](src/Number.mli) offers a facility for
+  **discovering and numbering the reachable vertices** in a directed graph.
+
+* [`HashCons`](src/HashCons.mli) offers support for
+  **setting up a hash-consed data type**, that is, a data type whose
+  values carry unique integer identifiers.
+
+* [`Fix`](src/Core.mli) offers support for **computing
+  the least solution of a set of monotone equations**,
+  as described in the unpublished paper
+  [Lazy Least Fixed Points in ML](http://gallium.inria.fr/~fpottier/publis/fpottier-fix.pdf).
+  In other words, it allows defining a recursive function of
+  type `variable -> property`, where
+  **cyclic dependencies** between variables are allowed,
+  and properties must be equipped with a partial order.
+
+* `Prop` defines a few common partial orders, including
+  [`Prop.Boolean`](src/Boolean.mli),
+  [`Prop.Option`](src/Option.mli),
+  [`Prop.Set`](src/Set.mli).
+
+* [`Glue`](src/Glue.mli) contains glue code that helps
+  build various implementations of association maps.
+
+The signatures that appear in the above files,
+such as `MEMOIZER`, `TABULATOR`, `SOLVER`, and so on,
+are defined [here](src/Sigs.ml).
+
+<!-- demos -->