The "example-lang" directory contains a template for adding a language binding to Lucy and its object model layer, Clownfish. See the DevGuide for an overview of Lucy's layers: http://incubator.apache.org/lucy/docs/perl/Lucy/Docs/DevGuide.html To get started, copy "example-lang" to a directory named after the language you'd like to bind to: cp -R example-lang xyz Most of the C files within the "example-lang/src" directory contain stubs for routines whose interfaces are defined within "trunk/core". core/src/Lucy/Index/Inverter.cfh # Declares interface. core/src/Lucy/Index/Inverter.c # all except Invert_Doc() example-lang/src/Lucy/Index/Inverter.c # only Invert_Doc() Once all the stubs have been implemented correctly, Lucy will theoretically build and pass its tests. There is one pair of files with an interface *not* defined in core. example-lang/src/CFBind.h example-lang/src/CFBind.c The CFBind files are there to hold conversion routines which are specific to a language binding. Since it is impractical to impose a generic interface, they are not defined in core. You may wish to start by referencing a finished language binding to get a feel for what should go in the CFBind files. Some of Lucy's classes really ought to be grouped with Clownfish, as they form something similar to a free floating "standard library" and are not search-related. At some point everything under Lucy::Object will probably migrate to a new namespace: Lucy::Object::Obj => Clownfish::Obj Lucy::Object::CharBuf => Clownfish::CharBuf Lucy::Object::VArray => Clownfish::VArray Lucy::Object::Hash => Clownfish::Hash Lucy::Object::BitVector => Clownfish::BitVector ... Other, search-related classes belong with Lucy itself, but are represented here because they lack one or more implementing functions: Lucy::Document::Doc Lucy::Analysis::RegexTokenizer Lucy::Index::Inverter ...