  Diagrams are essential tools for problem-solving and communication as they
externalize conceptual structures using spatial relationships. But when picking
a diagramming framework, users are faced with a dilemma. They can either use a
highly expressive but low-level toolkit, whose API does not match their
domain-specific concepts, or select a high-level typology, which offers a
recognizable vocabulary but supports a limited range of diagrams. To address
this gap, we introduce Bluefish: a diagramming framework inspired by
component-based user interface (UI) libraries. Bluefish lets users create
diagrams using relations: declarative, composable, and extensible diagram
fragments that relax the concept of a UI component. Unlike a component, a
relation does not have sole ownership over its children nor does it need to
fully specify their layout. To render diagrams, Bluefish extends a traditional
tree-based scenegraph to a compound graph that captures both hierarchical and
adjacent relationships between nodes. To evaluate our system, we construct a
diverse example gallery covering many domains including mathematics, physics,
computer science, and even cooking. We show that Bluefish's relations are
effective declarative primitives for diagrams. Bluefish is open source, and we
aim to shape it into both a usable tool and a research platform.
