In this talk, we review the basic congruence closure algorithm at the core of many SMT solvers. We will explain its good complexity, and the various features that makes it a nice SMT reasoning engine. We will also discuss some of its extensions, as well as current and future research around this algorithm.