drexo
v0.1.0
Published
CLI tool to migrate Tableau reports into modern ReactJS dashboards
Maintainers
Readme
drexo is an open-source Node.js CLI that turns Tableau workbooks (.twb / .twbx) into clean, AI-readable metadata files today — and runnable React dashboard apps in v0.2.
Stop paying per-user Tableau licenses for internal dashboards. Own your code, own your metadata.
v0.1 (current):
drexo analyzeproduces a canonical metadata file (markdown + YAML) describing the workbook. Human-readable, agent-readable, paste-into-ChatGPT-able. v0.2 (next):drexo migratereads that metadata and emits a Vite + React app, deployable anywhere.
How It Works
Tableau Workbook (.twb / .twbx)
│
▼
drexo analyze
│
▼
.model.md (metadata — markdown + YAML)
│
▼
drexo migrate [v0.2]
│
▼
React App (Vite)
│
▼
Deploy anywhere✨ Features
- Deep Tableau Analysis — Understand worksheets, dashboards, data sources, fields, and calculations
- AI-Ready Metadata —
.model.mdoutput is human-readable, LLM-friendly, and paste-into-ChatGPT-able - High-Fidelity Migration — Map common mark types (bar, line, pie, scatter, tables, etc.) to beautiful React components
- Smart Layouts — Convert Tableau dashboard zones into responsive React grids
- Multiple Targets — Generate Vite + React apps or embeddable components for Next.js
- Flexible Data — Static JSON, API adapters, or live connections
- Great Developer Experience — TypeScript, modern tooling, easy to customize generated code
Current status: v0.1 metadata pipeline ships.
drexo analyzeruns end-to-end on real workbooks. React generation lands in v0.2. Contributions welcome!
🚀 Quick Start
Prerequisites
- Node.js 20+
- A Tableau workbook (
.twbor.twbx)
Installation
# Run instantly with npx (recommended while in development)
npx drexo@latest --help
# Or install globally
npm install -g drexoBasic Usage
# Generate the metadata file for a workbook
drexo analyze ./examples/giving-renewal-summary.twbx
# Output lands next to the input as <name>.model.md
cat ./examples/giving-renewal-summary.model.mdThe generated .model.md is a single self-contained file: markdown narrative + fenced YAML blocks. Paste it into any LLM and ask questions about your dashboard, or feed it into drexo migrate (v0.2) to generate a React app.
📋 Commands
| Command | Description |
|---|---|
| drexo analyze <file> | Parse a Tableau workbook and write a canonical metadata file (<name>.model.md) |
| drexo analyze <file> -o <path> | Custom output path |
| drexo migrate <file> | [v0.2] Read the metadata file and generate a Vite + React app. Stub for now — prints a friendly redirect to analyze. |
| drexo --debug | Enable debug logging (stack traces on errors) |
| drexo --help | Show all options and examples |
| drexo --version | Print the drexo version |
🗺️ Roadmap
drexo is a generic Tableau-to-React migrator. We get there by shipping working specific cases first and letting real workbooks shape the architecture — not by designing for everything on day one.
| Phase | Goal |
|-------|------|
| ✅ v0.1 — The Metadata Wedge (shipped) | drexo analyze → a complete, human+agent-readable metadata file (markdown + YAML) describing the workbook. No React yet. |
| v0.2 — React Generator + First Real Users (next) | drexo migrate reads the metadata file → Vite + React app. 3 outside users surface real-world schema gaps. |
| v0.3 — Multi-Sheet & Layout | Whole dashboard, not one sheet. Layout zones → responsive React grid. Read-only parameter display. |
| v1.0 — Production-Ready Generic | Confident defaults across the long tail. Calculated fields, live parameters, filters, action links. Stable CLI surface. |
| post-v1 — Data Agents & Commercial Layer (conditional) | Data-agent CLI (e.g. drexo query) using the metadata layer for conversational Q&A. Plus possible hosted runs / cloud deploy. CLI stays free forever. |
Anti-roadmap (explicit no): Tableau parity, two-way sync, visual editor, multi-chart-library support before v1.0, SaaS before users.
🛠️ Development
git clone https://github.com/raguvindtharanitharan/drexo.git
cd drexo
npm install
# Run the CLI in dev mode (TypeScript, no build step)
npm run dev -- analyze ./examples/giving-renewal-summary.twbx
# Build
npm run build
# Run the test suite
npm test
# Link for local global testing
npm run link
drexo --versionTech decisions we made early:
- ESM-only TypeScript (no CJS shims, no
__dirnamehacks) commanderfor the CLI surfacefast-xml-parserfor.twbparsing;adm-zipfor.twbxunzipyaml(Eemeli Aro) for canonical YAML emission- Vitest + real-fixture integration tests (no mocked
.twbXML) - Markdown + YAML as the v0.1 output format — friendly to humans, LLMs, and downstream tooling. Same shape as dbt's docs.
🤝 Contributing
We're just getting started — this is a fantastic time to shape the project!
- Read CONTRIBUTING.md
- Look for issues labeled
good first issueorparser - The hardest (and most valuable) work is in the Tableau XML parser
Before submitting a pull request, open an issue so we can discuss the approach:
- Fork the repo
- Create a feature branch (
git checkout -b feature/my-feature) - Commit your changes
- Open a pull request
All contributions are welcome: code, docs, example workbooks, design feedback, or real-world migration stories.
📄 License
MIT © Raguvind Tharanitharan
🙏 Acknowledgements
- Inspired by the pain of expensive BI tools and the joy of building in React
- Tableau's public workbooks and documentation (reverse-engineered with respect)
- The amazing open-source React visualization community (Recharts, ECharts, Nivo, etc.)
Made with ❤️ for teams tired of vendor lock-in.
If drexo saves your company money or helps you ship faster, star the repo and tell your friends!
