The Problem

Most data exploration tools force a tradeoff: either you get a static chart library that requires significant coding to make interactive, or you get a point-and-click BI tool that can't be embedded in custom applications. When you need to explore large tabular datasets with smooth transitions between views—maintaining context as you filter, aggregate, and drill down—neither option works well. SandDance addresses this by providing unit visualizations (one mark per data row) with animated transitions, packaged as modular JavaScript components.

What This Does

SandDance is a data visualization toolkit from Microsoft Research that renders each row of a dataset as an individual visual mark. The core library, sanddance, handles the visualization canvas and rendering. Around it sit three integration layers: sanddance-specs generates Vega specifications for common chart types (scatter, treemap, stacks, density plots), sanddance-react wraps the core for React applications, and sanddance-explorer adds a full UI for data exploration. sanddance-embed provides the simplest integration path via an <iframe> tag.

The repo contains prebuilt distribution files for each component version under docs/dist/, organized by major version (v1–v4). It also ships compiled extensions for Power BI (.pbiviz files), VS Code, and Azure Data Studio (.vsix files) in docs/dist/powerbi/, docs/dist/vscode/, and docs/dist/azdata/. The documentation site is a Jekyll build with SCSS styling, and the primary interactive demo lives at docs/app/index.html.

How To Use It

Setup: The repo is a documentation and distribution site, not a source package. There's no package.json at the root—the only dependency manifest is docs/Gemfile, which is for the Jekyll documentation site. A Docker setup exists at docker-jekyll-local/ for running that site locally.

Configuration: No environment variables or API keys are required. For the documentation site, Jekyll configuration lives in docs/_config.yml.

Running it:

The fastest path is to open the hosted demo at https://microsoft.github.io/SandDance/app/. For local development of the docs site:

cd docker-jekyll-local docker-compose up

To embed SandDance in a custom application, load the prebuilt bundle from docs/dist/sanddance-explorer/v4/sanddance-explorer.js and its corresponding CSS, then initialize the explorer with a data source. The exact API is documented in the repo's docs/docs/ folder and the component READMEs referenced in the root README.md.

Real-World Use

A common integration is embedding SandDance Explorer in a React dashboard to let users interactively explore a dataset before building a report. The sanddance-react component accepts data and a spec, renders the visualization, and handles user interactions like selection and filtering. For a lighter integration, the sanddance-embed iframe approach works in any web page without a build step.

Code Health & Issues

Medium - No source code in this repo - This is a distribution and documentation repository, not the source. The actual packages (sanddance, sanddance-react, etc.) live in separate repos. Anyone needing to modify core behavior must go elsewhere. Medium - Version sprawl - docs/dist/ contains four major versions of each component, plus multiple Power BI and VS Code extension versions. This is intentional for backward compatibility but makes the repo harder to navigate and audit. Low - Test coverage is thin here - The 36 test files are browser-based spec tests under docs/tests/, not unit tests for the library itself. CI exists via azure-pipelines.yml and GitHub Actions (codeql.yml), but it's primarily for the docs build. Low - Large binary artifacts in git - The .vsix and .pbiviz files in docs/dist/ are compiled binaries checked into version control, which bloats the repo.

The Bottom Line

This is a well-maintained distribution and documentation site for a mature, production-tested visualization library. If you need interactive unit visualizations in a web app, Power BI, or VS Code, SandDance is a solid choice with a proven track record. Just be aware this repo is the delivery vehicle, not the source—go to the individual package repos if you need to contribute code or debug internals.