This is Rodin, static reflection for D. Rodin consists of two components: A compile-time generator for reflection meta- data and a run-time library for accessing this meta-data. The compile-time generator is named drefgen, the run-time library is named rodin. Drefgen is a very simple tool with very few options. Simply call it with the module or modules you wish to reflect: $ drefgen foo/a.d bar/b.d And it will generated reflection meta-data modules. These reflection modules are actually in D. All you need to do to use the reflection is compile them into the target binary. For a module foo.a, the module generated will be reflected.foo.a, and the filename will be reflected/foo/a.d . Drefgen uses the same configuration-file format as rebuild. So to use it, you must either have rebuild installed or otherwise have its configuration files installed. Drefgen is derived from the DMD frontend, and is therefore in C++, not D. Rodin (the run-time library) allows you to access classes, functions and variables by their compile-time names. Furthermore, you can select the proper overload for a given function, iterate over all derived classes for a given class, and plenty of other useful features. Rodin was written by Gregor Richards. Drefgen is derived from the DMD frontend, and therefore most of it was written by Walter Bright. Drefgen is under the GPL or Artistic license at your preference. Rodin (the run-time library) is under a BSD derivative license. See drefgen/gpl.txt (but you can use any later version), drefgen/artistic.txt and rodin/license.txt .