๐ Try it live โ
App preview:
A modern, elegant application to analyze your CSV files with Artificial Intelligence using multiple AI providers (OpenAI, Anthropic, Google, Mistral, and more). Privacy-first: the app does not store your data. Use a self-hosted/custom endpoint to keep processing entirely local; otherwise API calls go to the selected provider. Self-hostable with Docker.
- Drag & Drop or file selection
- Automatic detection of delimiters (comma, semicolon, tab)
- Configurable settings: delimiter, header row, encoding
- Type inference for columns (text, number, date)
- Interactive table with sorting and pagination
- Data preview with automatic formatting
- Smooth navigation for large datasets
- Multiple AI providers: OpenAI, Anthropic Claude, Google Gemini, Mistral, and more
- Custom endpoint support: Connect to Ollama, LM Studio, vLLM, or any OpenAI-compatible API
- Intelligent analysis of your data with AI-generated insights
- Markdown rendering: AI responses rendered with full Markdown support (headings, lists, tables, syntax-highlighted code blocks)
- Streaming with Markdown: Real-time streaming responses are rendered progressively as formatted Markdown
- Smart chart suggestions tailored to your dataset
- Chart types: Bar, Line, Pie, Scatter, Area
- Local or direct-to-provider: the app does not store your data. Processing can happen in your browser when using a self-hosted/custom endpoint; otherwise API calls go directly to the chosen AI provider.
- API keys stored locally in your browser
- No tracking or third-party cookies
- Docker ready: Deploy in seconds with a single command
- Custom AI endpoints: Use your own LLM server (Ollama, LM Studio, vLLM, etc.)
- Full control: Host on your own infrastructure
# Clone the repo
git clone https://github.com/maxgfr/csv-ai-analyzer.git
cd csv-ai-analyzer
# Install dependencies
pnpm install
# Run in development
pnpm devThe application will be accessible at http://localhost:3000
This project ships a static public/models.json that contains the models catalog fetched from https://models.dev/api.json.
- You can regenerate the file locally with:
pnpm run fetch-models-
A GitHub Action is configured to run this script once per day and automatically commit
public/models.jsonif it changes.- Workflow:
.github/workflows/update-models.yml - Runs daily (UTC 06:00) and is also triggerable manually with
workflow_dispatch.
- Workflow:
If you'd like the file to be refreshed more/less often you can update the cron schedule in the workflow file.
# Build the Docker image
docker build -t csv-ai-analyzer .
# Run the container
docker run -p 3000:3000 csv-ai-analyzerOr use Docker Compose:
# docker-compose.yml
version: '3.8'
services:
csv-ai-analyzer:
build: .
ports:
- "3000:3000"
restart: unless-stoppeddocker compose up -dThe application will be accessible at http://localhost:3000
Or use the live version directly!
Drag and drop your CSV file or click to select a file.
If automatic detection doesn't work perfectly, adjust the settings:
- Custom delimiter
- Header row choice
- File encoding
Click the โ๏ธ icon to configure your AI provider:
- Choose a provider: OpenAI, Anthropic, Google, Mistral, or others
- Enter your API key: Each provider has its own API key format
- Custom Endpoint: Enable "Use Custom Endpoint" to connect to local/self-hosted OpenAI-compatible APIs (Ollama, LM Studio, vLLM, etc.)
- Toggle "Use Custom Endpoint" in settings
- Enter your API Base URL (e.g.,
http://localhost:11434/v1for Ollama) - Enter your model name (e.g.,
llama3.2,mistral,codellama) - API key is optional for most local servers
Example configurations:
| Provider | Base URL | Model Examples |
|---|---|---|
| Ollama | http://localhost:11434/v1 |
llama3.2, mistral, codellama |
| LM Studio | http://localhost:1234/v1 |
Model name from LM Studio |
| vLLM | http://localhost:8000/v1 |
Your loaded model name |
| OpenRouter | https://openrouter.ai/api/v1 |
openai/gpt-4o, anthropic/claude-3 |
Click "Run Complete Analysis" and the AI will analyze your data, detect anomalies, and suggest relevant visualizations.
The chart components are extracted into a standalone npm package @maxgfr/csv-charts, available for use in any React project.
pnpm add @maxgfr/csv-chartsPeer dependencies: react, recharts, lucide-react.
import { ChartDisplay } from "@maxgfr/csv-charts";
const data = {
headers: ["Category", "Sales"],
rows: [["Electronics", "1200"], ["Clothing", "800"]],
columns: [
{ name: "Category", type: "string", index: 0 },
{ name: "Sales", type: "number", index: 1 },
],
rowCount: 2,
};
const charts = [{
id: "1",
type: "bar",
title: "Sales by Category",
description: "Compare sales across categories",
xAxis: "Category",
yAxis: "Sales",
aggregation: "sum",
}];
<ChartDisplay data={data} charts={charts} />| Export | Description |
|---|---|
ChartDisplay |
Multi-chart container with optional card wrapper |
SingleChart |
Individual chart with toolbar (sort, zoom, trendline, export) |
ChartToolbar |
Standalone toolbar component |
processChartData |
Data processing utility with aggregation |
COLORS |
Default color palette |
Chart types: bar, line, area, scatter, pie. Aggregations: sum, avg, count, min, max, none.
See the full documentation in packages/csv-charts/README.md.
| Technology | Usage |
|---|---|
| Next.js | React Framework with App Router |
| TailwindCSS | Styling and design system |
| PapaParse | Client-side CSV parsing |
| Recharts | React charting library |
| react-markdown | Markdown rendering for AI responses |
| rehype-highlight | Syntax highlighting in code blocks |
| Lucide React | Modern icons |
| js-cookie | Secure local persistence |
| tsup | Package bundling for @maxgfr/csv-charts |
| semantic-release | Automated npm publishing via CI |
csv-ai-analyzer/
โโโ src/ # Next.js application
โ โโโ app/_components/ # React components
โ โโโ lib/ # Services, parsers, stores
โ โโโ styles/ # Global CSS
โโโ packages/
โ โโโ csv-charts/ # @maxgfr/csv-charts npm package
โ โโโ src/ # Package source (ChartDisplay, SingleChart, etc.)
โ โโโ dist/ # Built output (ESM + .d.ts)
โ โโโ package.json
โโโ pnpm-workspace.yaml # Monorepo workspace config
โโโ package.json # Root app
MIT - Use as you wish!
