XOM (XML Object Model) is an open source API for processing XML with Java using a streaming tree model. Although it is open source, XOM was implemented using the cathedral model of development (one designer's vision) rather than the bazaar model. This JavaPolis talk by Elliotte explores the design goals, basic API principles, XML principles, Java restrictions and requirements, and testing techniques and tools that have informed XOM's development. In the process, Elliotte identifies some general principles of API design for all Java libraries and systems.