Draco 2
A constraint-based system for visualization recommendation. It encodes design knowledge as logical rules and uses a renderer-agnostic format, so researchers and practitioners can extend and validate chart designs in a computational way.
Creating effective visualizations requires a deep understanding of design theory, yet most automated tools are rigid, making it difficult to customize them with new knowledge. They often treat design as a fixed template, which fails to capture the nuanced principles that guide human perception. This turns what should be an evolving practice into a static one, disconnected from ongoing research.
Draco 2 approaches this problem differently by treating visualization design not as a set of templates, but as a system of logical constraints. The core innovation is a generic, renderer-agnostic specification format that decouples the abstract principles of good design from any single rendering library. This allows the system to reason about the effectiveness of a chart—why certain choices work and others don’t—in a formal, computational way.
Using an Answer Set Programming solver like
Stack
While the problem is more important than the tools, the tech stack tells a story about the project's architecture and trade-offs. Here's what this project is built on:
Platforms & Runtimes
Implements the Draco 2 framework and its execution environment.
Solves the Answer Set Programming problems used for constraint-based reasoning.
Provides a browser-side Python runtime for interactive documentation and JupyterLite notebooks.
Runs interactive tutorials and examples directly in the browser.
Frontend & Visualization
AI & Machine Learning
Data Engineering
Backend & APIs
External Services
Cloud & DevOps
Development Tooling
Provides a pre-configured development environment for contributors.
Manages Python dependencies for development and builds.
Previously used for Python dependency management.
Builds and packages the Python project for distribution.
Runs formatting and linting checks via Git hooks.
Lints and formats the Python codebase.