Abstract. The efficient solution of discretizations of coupled systems of partial differential equations (PDEs) is at the core of much of numerical simulation. Significant effort has been expended on scalable algorithms to precondition Krylov iterations for the linear systems that arise. With few exceptions, the reported numerical implementation of such solution strategies is specific to a particular model setup, and intimately ties the solver strategy to the discretization and PDE, especially when the preconditioner requires auxiliary operators. In this paper, we present recent improvements in the Firedrake finite element library that allow for straightforward development of the building blocks of extensible, composable preconditioners that decouple the solver from the model formulation. Our implementation extends the algebraic composability of linear solvers offered by the PETSc library by augmenting operators, and hence preconditioners, with the ability to provide any necessary auxiliary operators. Rather than specifying up front the full solver configuration tied to the model, solvers can be developed independently of model formulation and configured at runtime. We illustrate with examples from incompressible fluids and temperature-driven convection.Key words. iterative methods, preconditioning, composable solvers, multiphysics AMS subject classifications. 65N22, 65F08, 65F10 DOI. 10.1137/17M11332081. Introduction. For over a decade, domain-specific languages for numerical partial differential equations (henceforth PDEs) such as Sundance [30,29], FEniCS [28], and now Firedrake [40] have enabled users to efficiently generate algebraic systems from a high-level description of the variational problems. Both FEniCS and Firedrake make use of the Unified Form Language (UFL) [1] as a description language for the weak forms of PDEs, converting it into efficient low-level code for form evaluation. They also share a Python interface that, for the intersection of their feature sets, is nearly source-compatible. These high-level PDE codes succeed by connecting a rich description language for PDEs to effective lower-level solver libraries such as PETSc [4,5] or Trilinos [21] for the requisite, and performance-critical, numerical (non)linear algebra.These high-level PDE projects utilize the solver packages in an essentially unidirectional way: the residuals are evaluated, Jacobians formed, and are then handed off to mainly algebraic techniques. Hence, the codes work at their best when (compositions of) existing black-box matrix techniques effectively solve the algebraic systems. However, in many situations the best preconditioners require additional structure