We develop a gauge-invariant formalism for the study of density perturbations in a Friedmann–Robertson–Walker universe with multiple interacting fluids and/or scalar fields. We show how N scalar fields may be described by N kinetic fluids (with maximally stiff equation of state) interacting with a non-dynamical potential (with vacuum equation of state). We split generic perturbations into adiabatic and entropic parts, and give the coupled first-order evolution equations on all scales, including energy and momentum exchange. We identify the non-adiabatic effects on large scales, and define adiabatic initial conditions in the presence of multiple fluids and fields.