Emerald is an object-based language for programming distributed subsystems and applications. Its novel features include 1) a single object model that is used both for programming in the small and in the large, 2) support for abstract types, and 3) an explicit notion of object location and mobility. This paper outlines the goals of Emerald, relates Emerald to previous work, and describes its type system and distribution support. We are currently constructing a prototype implementation of Emerald. Copyright © 1987 by the Institute of Electrical and Electronics Engineers, Inc.