The ASM project was created by Eric Bruneton in 2000, during his PhD at
INRIA. At that time it was only a code
generator (no ClassReader, no Visitor concept). It was used to generate
dynamic stub and proxy classes, before the
java.lang.reflect.Proxy class was released in JDK 1.3. These
dynamic classes were used to transparently add non functional properties
(logging, persistence, replication, etc) to user components.
The visitor idea and the ClassReader concepts were added later, in order to be able to transform existing classes. This was needed to insert the non functional code directly in the user classes, instead of in an intermediate proxy (for better performance). These new features were designed and implemented by Eric Bruneton after his PhD, at France Telecom R&D (now Orange Labs), in order to implement the Fractal component model.
The ASM project was released in Open Source in 2002, at the same time as the Fractal project. Since then, many external contributions have been done to the project. The most important contributors are now part of the ASM team, namely Eugene Kuleshov (since 2003), Andrei Loskutov (since 2004) and Rémi Forax (since 2008).