The purpose of this paper is to develop a theory of bimonads and Hopf monads on arbitrary categories thus providing the possibility to transfer the essentials of the theory of Hopf algebras in vector spaces to more general settings. There are several extensions of this theory to monoidal categories which in a certain sense follow the classical trace. Here we do not pose any conditions on our base category but we do refer to the monoidal structure of the category of endofunctors on any category and by this we retain some of the combinatorial complexity which makes the theory so interesting. As a basic tool we use distributive laws between monads and comonads (entwinings) on : we define a bimonad on as an endofunctor B which is a monad and a comonad with an entwining λ : BB → BB satisfying certain conditions. This λ is also employed to define the category of (mixed) B-bimodules. In the classical situation, an entwining λ is derived from the twist map for vector spaces. Here this need not be the case but there may exist special distributive laws τ : BB → BB satisfying the Yang-Baxter equation (local prebraidings) which induce an entwining λ and lead to an extension of the theory of braided Hopf algebras.
An antipode is defined as a natural transformation S : B → B with special properties. For categories with limits or colimits and bimonads B preserving them, the existence of an antipode is equivalent to B inducing an equivalence between and the category of B-bimodules. This is a general form of the Fundamental Theorem of Hopf algebras.
Finally we observe a nice symmetry: If B is an endofunctor with a right adjoint R, then B is a (Hopf) bimonad if and only if R is a (Hopf) bimonad. Thus a k-vector space H is a Hopf algebra if and only if Homk(H,−) is a Hopf bimonad. This provides a rich source for Hopf monads not defined by tensor products and generalises the well-known fact that a finite dimensional k-vector space H is a Hopf algebra if and only if its dual H* = Homk(H,k) is a Hopf algebra. Moreover, we obtain that any set G is a group if and only if the functor Map(G,−) is a Hopf monad on the category of sets.