AVA is a free, open source business intelligence & reporting project written in TypeScript and released under MIT. It has 1,500 GitHub stars, 154 forks and 0 open issues, and was last pushed 9 hours ago. On this registry it ranks #58 of 77 tracked projects in Business Intelligence & Reporting, with 5 head-to-head comparisons available.

What is AVA?

AVA is an MIT-licensed, TypeScript-based AI-native visual analytics framework for developers and agents that need to load unstructured data, ask questions in plain language, and generate chart output without building a rule-based analytics pipeline.

What it is

AVA is a technology framework for visual analytics, published by the AntV team under the antvis organisation and distributed on npm as @antv/ava. Its name carries several readings: the first A stands for AI native, automated, and augmented, while VA stands for Visual Analytics. The framework ships as a modular TypeScript library that separates data handling, analysis, and visualization into distinct concerns, and it runs in both browser and Node.js environments. It is categorised under Data & Analytics, specifically Business Intelligence and Reporting. The project is licensed MIT, holds roughly 1,500 stars and 154 forks, and its last push was 2026-09-18.

The concrete problem it solves is the shift away from rule-based analytics. Traditional analytics tooling forces users to define metrics, thresholds, and chart types by hand, then wire up SQL or a charting library to produce a result. AVA replaces that pipeline with LLM-powered analysis: a user loads data, receives AI-recommended queries scored with reasons, runs a natural-language question, and gets back a text summary, structured data, the generated JavaScript or SQL, and a chart. That chain, from raw CSV or free text to rendered visualization, is the specific work it removes.

Key capabilities

  • Natural language analysis through ava.analysis(query), which returns an object containing query, text, data, and either code for in-memory JavaScript analysis or sql for SQLite analysis.
  • Query suggestion via ava.suggest(count?), which returns ranked questions with a query string, a numeric score, and a reason explaining why the question is worth asking. Default is three suggestions.
  • Data loading helpers covering several shapes: loadCSV for a Node.js file path or a browser CSV content string, loadObject for arrays such as city and gdp records, loadURL with a transform function, and loadText for extracting values from unstructured prose.
  • Automatic engine selection driven by the sqlThreshold option, which switches analysis from in-memory processing to SQLite or IndexedDB once data exceeds a byte threshold. The documentation states a 10KB default, while the quick-start example sets 2MB.
  • Chart generation through ava.visualize(analysisResult), returning chartType, GPT-Vis chart syntax, and standalone HTML that renders the chart. It returns null when there is no visualization intent or no usable data.
  • LLM configuration supplied at construction with model, apiKey, and baseURL. The README example uses the ling-1t model.
  • Resource cleanup through ava.dispose(), which releases SQLite, IndexedDB, and in-memory resources.

Who uses it and how

  • Browser application developers who accept a file input, read its text, and pass the CSV content straight into loadCSV for client-side analysis.
  • Node.js service developers who point loadCSV at a file path on disk and run analytics server-side.
  • Agent and LLM-tooling builders who need structured output, since analysis returns code or sql alongside the natural-language summary.
  • Analysts working from unstructured text, who use loadText with input such as city and value pairs to get a dataframe without writing a parser.
  • BI and reporting teams that want recommendation and chart generation within the existing Data and Analytics stack, drawing on the project's augmented-analytics, auto-insight, chart-recommendation, and narrative-charts topic areas.

Getting started

Install with npm install @antv/ava, or the equivalent pnpm install @antv/ava or yarn add @antv/ava command. Documentation and the hosted reference live at https://ava.antv.vision.

How it compares

No list of paid products that this project replaces was provided in the facts, and the supplied material names no comparable tool. AVA therefore stands alone in this registry on the evidence available.

When to use it β€” and when not to

A self-hoster or integrator must supply an LLM endpoint, meaning a model name, an API key, and a base URL, so AVA is not usable without an external or self-hosted language model, and browser deployments lean on IndexedDB while Node.js deployments rely on SQLite. It is a poor fit for teams that need a fully offline, deterministic, rule-based engine, or that want a fixed metric layer without generative components. The honest weakness is thin public documentation in the supplied excerpt: the README text cuts off mid-example, the default sqlThreshold is stated inconsistently between the option description and the code sample, and the repository shows zero open issues, which leaves little visible community discussion to draw on.

project readme (upstream, from github) β€” read inline

AVA, AI-native Visual Analytics

AVA logo

AVA (AVA examples Visual Analytics) is a technology framework designed for more convenient visual analytics. The first A has multiple meanings: AI native, Automated, Augmented, and VA stands for Visual Analytics. It can assist users in unstructured data loading, data processing and analysis, as well as visualization code generation.

GitHub Website Documentation AI Agent llms

πŸš€ Features

AVA is a fundamental shift from rule-based analytics to AI-native capabilities:

  • Natural Language Queries: Ask questions about your data in plain English
  • Query Suggestions: Get AI-recommended analysis queries based on your data characteristics
  • LLM-Powered Analysis: Leverages large language models for intelligent data analysis
  • Smart Data Handling: Automatically chooses between in-memory processing and SQLite based on data size
  • Modular Architecture: Clean separation of concerns with data, analysis, and visualization modules
  • Browser & Node.js Compatible: Runs seamlessly in both browser and server environments

πŸ“– Quick Start

  • Install AVA by npm
npm install @antv/ava

pnpm install @antv/ava

yarn add @antv/ava
  • Then run the code below
import { AVA } from '@antv/ava';

// Initialize with LLM config
const ava = new AVA({
  llm: {
    model: 'ling-1t',
    apiKey: 'YOUR_API_KEY',
    baseURL: 'LLM_BASE_URL',
  },
  sqlThreshold: 1024 * 1024 * 2, // Threshold for switching to SQLite
});

// Load data from various sources in Node.js
await ava.loadCSV('data/companies.csv');

// Load CSV from file input in browser
const fileInput = document.querySelector('input[type="file"]');
const file = fileInput.files[0];
const csvContent = await file.text();
await ava.loadCSV(csvContent);

// or load from JSON object
await ava.loadObject([{ city: '杭州', gdp: 18753 }, { city: '上桷', gdp: 43214 }]);

// or load from URL
await ava.loadURL('https://api.example.com/data', (response) => response.data);

// or extract from text
await ava.loadText('杭州 100,上桷 200οΌŒεŒ—δΊ¬ 300');

// Get suggested analysis queries
const queries = await ava.suggest(5); // Get top 5 suggested queries (default: 3)
console.log(queries);
// [
//   {
//     query: 'What is the average revenue by region?',
//     score: 0.95,
//     reason: 'Understanding revenue distribution across regions helps identify high-performing areas'
//   },
//   ...
// ]

// Ask questions in natural language
const result = await ava.analysis('What is the average revenue by region?');
console.log(result.text);  // Natural language summary
// result.data β†’ structured analysis result
// result.code β†’ JavaScript code (small datasets)
// result.sql  β†’ SQL query (large datasets with SQLite)

// Generate chart visualization from analysis result
const viz = await ava.visualize(result);
console.log(viz.chartType); // e.g. 'column'
console.log(viz.syntax);   // GPT-Vis chart syntax
// viz.html β†’ standalone HTML that renders the chart


// Or use a suggested query
const suggestedResult = await ava.analysis(queries[0].query);
console.log(suggestedResult);

// Clean up
ava.dispose();

πŸ“˜ Documentation

Create an AVA instance:

  • new AVA(options): initialize runtime and LLM configuration.
    • llm: required model config, e.g. { model, apiKey, baseURL }
    • sqlThreshold?: optional size threshold (bytes) to switch from in-memory analysis to SQLite/IndexedDB (default: 10KB)

Core APIs in AVA:

  • loadCSV(filePathOrContent): load CSV (Node.js: file path; Browser: CSV content string).
  • loadObject(data) / loadURL(url, transform?) / loadText(text): load data into AVA.
  • suggest(count?): generate recommended analysis questions.
  • analysis(query): run data analysis and return { query, text, data, code?, sql? } (code for in-memory JS analysis, sql for SQLite analysis).
  • visualize(analysisResult): generate chart output from analysis result, returns { chartType, syntax, html } | null (null when no visualization intent or no usable data).
  • dispose(): release SQLite / IndexedDB and in-memory resources.

Minimal usage:

const ava = new AVA({ llm: { model, apiKey, baseURL } });

await ava.loadObject([{ city: 'Hangzhou', gdp: 18753 }]);

const analysis = await ava.analysis('Show GDP by city');
console.log(analysis.text);

const viz = await ava.visualize(analysis);
if (viz) {
  console.log(viz.chartType);
  console.log(viz.html);
}

ava.dispose();

πŸ—οΈ Architecture

AVA uses a modular pipeline architecture that processes user queries through distinct stages. Data is loaded from multiple sources (CSV, JSON, URL, or text), analyzed intelligently based on size (JavaScript for small datasets, SQLite for large ones), results are summarized using LLM into natural language responses, and optionally visualized with chart recommendations.

User Query
    ↓
AVA Instance
    ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Data Module    β”‚ β†’ Load from multiple sources:
β”‚                 β”‚   β€’ CSV File (loadCSV)
β”‚                 β”‚   β€’ JSON Object (loadObject)
β”‚                 β”‚   β€’ URL (loadURL)
β”‚                 β”‚   β€’ Text (loadText + LLM)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Metadata Extract β”‚ β†’ Type inference, statistics
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Size Check  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    ↓         ↓
 <10KB      β‰₯10KB
    ↓         ↓
JavaScript  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 Helpers    β”‚ Env Check    β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                ↓         ↓
            Browser    Node.js
                ↓         ↓
            IndexedDB  SQLite
                ↓         ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Analysis Module  β”‚ β†’ Generate & Execute Code/SQL
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ LLM Summary  β”‚ β†’ Natural Language Response
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Visualization       β”‚ β†’ Optional chart generation:
β”‚ Module (Optional)   β”‚   β€’ Detect visualization intent
β”‚                     β”‚   β€’ Recommend chart type
β”‚                     β”‚   β€’ Generate chart syntax & HTML
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    ↓
User Response
(Text + Data + Chart)

🌐 Browser & Server Compatibility

AVA v4 is designed to run seamlessly in both browser and Node.js environments:

βœ… Browser Support

  • All core features work in modern browsers (Chrome, Firefox, Safari, Edge)
  • CSV loading via File API or direct content strings
  • JSON object and URL loading fully supported
  • In-memory data processing for datasets under 10KB
  • Note: Uses IndexedDB for persistent storage of large datasets (default >10KB) in browsers; for extremely large datasets, use the server-side version to avoid memory pressure

βœ… Node.js Support

  • Full feature set including large dataset handling with SQLite
  • File system access for CSV loading
  • Automatic switching between in-memory and SQLite based on data size (10KB threshold)

Environment Detection

AVA automatically detects the runtime environment and adapts:

  • Browser: Uses in-memory processing, accepts CSV content strings
  • Node.js: Supports file paths for CSV, uses SQLite for large datasets (>10KB)

🀝 Developer Contributions

This is an experimental branch. Contributions are welcome! Please ensure:

  • Code is clean and well-documented
  • TypeScript types are properly defined
  • New features include examples, and tests
  • READMEs are updated as needed

πŸ”— Related Projects

πŸ“š Papers

VizLinter - Chen, Q., Sun, F., Xu, X., Chen, Z., Wang, J. and Cao, N., 2021. VizLinter: A Linter and Fixer Framework for Data Visualization. IEEE transactions on visualization and computer graphics, 28(1), pp.206-216.

readme truncated β€” read the full docs on github

Frequently asked questions

Is AVA free to use?

AVA is open source under the MIT licence. There is no licence fee and no seat count β€” you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does AVA do?

πŸ€– AI-native Visual Analytics framework build for agents.

What is AVA written in?

AVA is primarily written in TypeScript. Its source is publicly available at https://github.com/antvis/AVA, and it has 1,500 GitHub stars.