Draco 2
A flexible constraint-based system that addresses the rigidity of automated visualization tools. By modeling design expertise as a set of logical rules, it helps researchers and practitioners create effective charts without deep design knowledge. Its core innovation is a renderer-agnostic format, democratizing visualization by making expert knowledge computational and extensible.
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
Primary programming language for the entire Draco2 framework, providing the core execution environment for constraint-based visualization recommendation
Answer Set Programming solver that powers Draco2's constraint-based reasoning engine for finding optimal visualization designs and validating specifications
Python runtime for browsers that powers Draco2's interactive documentation and allows Python code execution in JupyterLite notebooks
Browser-based Jupyter environment that enables interactive Draco2 tutorials and examples to run directly in web browsers
Frontend & Visualization
Default visualization renderer that converts Draco2 specifications into interactive Vega-Lite charts for data visualization output
Documentation generator that builds Draco2's comprehensive online documentation site with interactive notebooks and API references
Documentation engine that generates API documentation and processes reStructuredText content for Draco2's documentation site
AI & Machine Learning
Data Engineering
Engine-agnostic data manipulation library for processing datasets and generating schema information from DataFrames to support computational reasoning based on data features
Primary DataFrame engine backing Narwhals
Numerical computing foundation for data processing operations and mathematical computations
Backend & APIs
External Services
Python package registry for distributing the draco package to users via pip install
Hosts live Draco2 tutorials and examples without requiring local installation
Code coverage reporting service that tracks and visualizes test coverage metrics for Draco2's codebase quality assurance, enforcing 100% coverage on the entire codebase
Cloud & DevOps
Development Tooling
Used for facilitating contributor onboarding with a pre-configured development environment in compatible IDEs like VS Code
Fast Python package manager and dependency resolver that manages Draco2's development environment and build processes
Used for managing the Python project before the uv era
Used for packaging Draco2 for distribution on PyPI with proper metadata and wheel generation
Git hook framework that automatically runs code formatting and linting checks before commits to maintain Draco2's code quality
High-performance Python linter and code formatter that enforces code quality standards across the Draco2 codebase