Optimix lets the user specify graph transformations in a declarative language, based on relational graph rewriting.
From these transformation specifications (also called rewrite systems) Optimix generates Java or C code that navigates/modifies supplied Java objects/C structs.
Optimix works on directed graphs were the nodes are typed and the edges have labels.
The schema for the graph (i.e the datamodel) is described with Java classes or the Cocktail-AST language, the schema is used to type check the rewrite systems at generation time.

When used with Java, Optimix rewrite systems can be seen as a language extension. The rules are written as part of the Java classes and Optimix generates a Java method inlined in the classes for each rewrite system.