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).