Data Formulator
Explore data with AI agents in a visual workspace: connect sources, ask follow-ups, and get editable charts.
- Source repo
- microsoft/data-formulator
- Stars
- ★ 18k
- Last updated
- today
- License
- MIT
- Primary language
- Python
- FA score
- 58/100 · Major gaps
At a glance
- How it runs
- Works with
- Universal · cross-platformOpenAI API · Claude API
- Cost
- Free software; you pay for model usage
- Setup effort
- Low · running in minutes
- You'll need
- Typical use
- An analyst with a pile of CSV/Excel sales data wants to ask follow-ups about regional and time trends instead of writing SQL first.
- Not a fit if
- Users who only want static BI dashboards, not conversational exploration
- Teams unwilling to configure model keys and data source connections themselves
- Source review
- 58/100 · Major gaps
What does this agent do, and when should you use it?
Data Formulator is a Microsoft Research open-source tool that blends natural-language conversation with a visual workspace for data exploration. Analysts can start from CSV, Excel, JSON, screenshots, text, or databases, then build charts and reports step by step. It runs as a local Python service plus a browser UI, launched with a single uvx or pip command, via Docker Compose, or as CI-built Windows/macOS desktop packages. Models are reached through LiteLLM (OpenAI, Azure, Anthropic, or a local Ollama), DuckDB handles larger datasets, and charts are compiled by the open-source Flint chart language. The central interaction is the Data Thread: questions, explanations, tables, and editable charts live in one history you can branch from and finally compose into a shareable report. Built-in connectors cover files, local folders, databases, and platforms such as Databricks, with external loaders for MySQL, PostgreSQL, MSSQL, Azure Data Explorer, S3, and Azure Blob.
You load data by uploading CSV/TSV/Excel/JSON, screenshots, or text, or by choosing a data loader for a database or cloud store; the analyst agent can discover sources, clarify the request, propose a loading plan, and add data to the workspace after your review. In the Data Thread you ask questions in natural language; the agent calls the configured model through LiteLLM (OpenAI, Azure, Anthropic, or Ollama) and returns explanations, tables, and chart specs based on the Flint chart language, rendered as editable charts. Multi-table inputs support automatic joins, DuckDB backs larger data, and any result can be refined, branched from an earlier step, or assembled into a report. The app serves a local web UI on port 5567.
- An analyst with a pile of CSV/Excel sales data wants to ask follow-ups about regional and time trends instead of writing SQL first.
- A business user only has a screenshot or a text table and needs to extract structured data before visualizing it.
- A team with several databases (MySQL, PostgreSQL, MSSQL, Databricks, S3) wants one workspace with automatic join handling.
- Someone preparing a briefing wants the exploration trail, including each chart and reasoning step, kept and shared as a report.
- Organizations that prefer to self-host and point the tool at their own model keys, including a local Ollama instance.
- Cases with larger datasets that should be aggregated in DuckDB rather than pulled entirely into the browser.
How do you install or deploy this agent?
uv is the recommended path and needs no prior setup:
uvx data_formulatorWith pip (a virtual environment is recommended):
pip install data_formulator
python -m data_formulatorOr build and run with Docker Compose:
docker compose up --buildTo preview the 0.8 beta, pin the pre-release explicitly:
pip install --pre data_formulator==0.8.0b1
uvx [email protected]Desktop builds for Windows and macOS are downloaded from the Artifacts of the desktop-build workflow or the matching GitHub Release; extract the archive, then run Data Formulator.exe or move Data Formulator.app into Applications. These preview builds are unsigned and not notarized, so bypass OS warnings only after verifying the download source.
How do you use this agent?
After launch, open http://localhost:5567 in a browser. Configure a model provider (OpenAI, Azure, Anthropic, or a local Ollama, unified through LiteLLM), then bring in data by uploading CSV/TSV/Excel/JSON, screenshots, or text, or by picking a database/platform connector and letting the analyst agent find and load it for you.
uvx data_formulator --helpThe help output lists options such as a custom port, sandboxing mode, and the data storage location. Then ask questions in the Data Thread, review explanations, tables, and editable charts, branch from any earlier step, and compose results into a report to share.
What are this agent's strengths and limitations?
- Natural-language questions and editable charts share one history, so you can branch from any step instead of losing context in a long chat.
- Charts are compiled by the open-source Flint chart language, covering 30+ chart types with themes and style refinement.
- LiteLLM keeps model choice open across OpenAI, Azure, Anthropic, and local Ollama.
- DuckDB support means larger datasets can be aggregated without loading everything into the browser.
- Broad connectivity: files, local folders, databases, Databricks, plus external loaders for MySQL, PostgreSQL, MSSQL, Azure Data Explorer, S3, and Azure Blob.
- Several documented ways to run it: one-command uvx/pip, Docker Compose, a self-hosted web service, and CI-built desktop packages.
- No model is bundled: you must supply an OpenAI, Azure, Anthropic, or Ollama endpoint and keys, so spend scales with usage.
- Desktop packages are CI preview builds that are not code-signed or notarized, requiring a manual security-warning bypass on first launch.
- The 0.8 line is still beta (0.8.0b1), so flows and interfaces may change; production use should pin the stable 0.7 release.
- External data source connectors require you to manage credentials and network access yourself, and failures surface through model explanations rather than explicit diagnostics.
- Desktop installers cover only Windows and macOS, and CI artifacts expire from Actions after 30 days.
How does this agent compare with similar options?
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| Data Formulator This agent | 58 · Major gaps | CLIFree + model costs | ★ 18k | today | Python | OpenAI API · Claude API |
| Flint Chart Language | 60 · Some gaps | Library / SDKFree | ★ 4.4k | 27d ago | TypeScript | Claude.ai |
| Business Analytics Agent | 60 · Some gaps | Desktop appFree + model costs | ★ 2.6k | 11d ago | JavaScript | OpenAI API |
| WhoDB | 51 · Major gaps | Self-hosted serviceFreemium | ★ 5k | today | Go | — |
How does FollowAgents rate this agent?
Why each dimension lost points
Sandbox docs show process isolation, audit hooks blocking worker file writes, per-turn namespace cleanup, and per-user workspace confinement, indicating some least-privilege design; however the SSO guide examples use verify=False, disable Talisman, and allow the token-exchange endpoint when no shared secret is set, which are concrete weaknesses, so least_privilege and sensitive_data_handling are capped at 2. User confirmation exists for data loading review but no explicit confirmation for destructive or external writes, score 2. Data-flow transparency is supported by the Data Thread and diagnostics structures, score 2. Dependency security shows a litellm CVE-fix pin and resolutions overrides, but the dependency surface is very broad with no SBOM or audit record, score 2. External effects include web fetching, database writes, and unsigned desktop builds without a consolidated side-effect inventory, score 1. Rollback is limited to namespace save/restore and scratch cleanup, with no rollback story for data-source writes or config changes, score 1. Source attribution has MIT copyright, Microsoft trademark, and CLA notes, score 2.
Docs and code structure (sandbox session, agent diagnostics, language injection) are internally consistent and tests mirror documented behavior, score 2. Dependency availability covers uv/pip/docker/desktop paths with litellm platform notes, score 2. Failure messages: save/restore failures only log warnings and degrade, with no user-facing error taxonomy, score 1.
README targets analysts, developers, and desktop users across files, databases, and platforms, score 2. Capability boundaries are documented (sandbox limits, type coverage limits, Gamma role limits), score 2. Trigger precision: agents are natural-language driven with no precise tool-call boundary specification, score 1. Environment fit covers Python>=3.11, Node 20, Windows/macOS builds, and HTTPS requirements, score 2.
Information architecture spans README, docs/dev-guides, docs-cn, and CHANGELOG references, score 2. Install notes are thorough (uvx/pip/docker/desktop/dev), score 3. Naming stability is weak: package.json version 0.1.0 conflicts with pyproject 0.8.0b1 and the project is beta, score 1. Examples and FAQ include demo videos, changelog, and usage notes but no dedicated FAQ, score 2. Known limitations appear in sandbox docs and README warnings, score 2. License is full MIT text, score 3. Versioning/changelog has CHANGELOG references and News entries, score 2. Maintenance responsibility shows Microsoft authors, SECURITY.md, and code of conduct, score 2.
Output usability includes charts, reports, editable results, and a diagnostics viewer, score 2. Marginal value comes from unified data connectors and branch-based analysis, but differentiation from many BI/AI analysis tools is limited, score 2. Cost-benefit is weakened by heavy dependencies (many cloud SDKs, LLM calls, desktop packaging), score 1.
claim_traceability: README claims mostly map to docs/tests but lack per-claim evidence links, score 1. cross_source_corroboration: README, dev-guides, and tests corroborate some capabilities but coverage is incomplete, score 1. fact_inference_separation: docs mix design intent with implementation description without marking verified versus inferred, score 1.
- SSO examples use verify=False and disable Talisman; fix before production deployment.
- The token-exchange endpoint allows requests when no shared secret is configured, risking unauthorized exchange.
- Desktop builds are unsigned/unnotarized and README asks users to bypass OS warnings; treat with caution.
- package.json and pyproject versions disagree, which can confuse releases and dependency resolution.
- The dependency surface is very broad (many database and cloud SDKs), raising supply-chain risk and install cost.