This chapter provides an introduction to the interaction between category theory and mathematical logic. Category theory describes properties of mathematical structures via their transformations, or ‘morphisms’. On the other hand, mathematical logic provides languages for formalizing properties of structures directly in terms of their constituent parts—elements of sets, functions between sets, relations on sets, and so on. It might seem that the kind of properties that can be described purely in terms of morphisms and their composition would be quite limited. However, beginning with the attempt of Lawvere [1964; 1966; 1969; 1970] to reformulate the foundations of mathematics using the language of category theory, the development of categorical logic over the last three decades has shown that this is far from true. Indeed it turns out that many logical constructs can be characterized in terms of relatively few categorical ones, principal among which is the concept of adjoint functor. In this chapter we will see such categorical characterizations for, amongst other things, the notions of variable, substitution, prepositional connectives and quantifiers, equality, and various type-theoretic constructs. We assume that the reader is familiar with some of the basic notions of category theory, such as functor, natural transformation, (co)limit, and adjunction: see Poigné’s [1992] chapter on Basic Category Theory in Vol. I of this handbook, or any of the several available introductions to category theory slanted towards computer science, such as [Barr and Wells, 1990] and [Pierce, 1991]. There are three recurrent themes in the material we present. Categorical semantics. Many systems of logic can only be modelled in a sufficiently complete way by going beyond the usual set-based structures of classical model theory. Categorical logic introduces the idea of a structure valued in a category C, with the classical model-theoretic notion of structure [Chang and Keisler, 1973] appearing as the special case when C is the category of sets and functions. For a particular logical concept, one seeks to identify what properties (or extra structure) are needed in an arbitrary category to interpret the concept in a way that respects given logical axioms and rules. A well-known example is the interpretation of simply typed lambda calculus in cartesian closed categories.