npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@outsidedata/dolex

v5.0.0

Published

AI data analyst — 43 handcrafted visualization patterns, SQL query engine with custom aggregates, and auto-analysis planning via MCP

Readme

 ██████╗   ██████╗  ██╗      ███████╗ ██╗  ██╗
 ██╔══██╗ ██╔═══██╗ ██║      ██╔════╝ ╚██╗██╔╝
 ██║  ██║ ██║   ██║ ██║      █████╗    ╚███╔╝
 ██║  ██║ ██║   ██║ ██║      ██╔══╝    ██╔██╗
 ██████╔╝ ╚██████╔╝ ███████╗ ███████╗ ██╔╝ ██╗
 ╚═════╝   ╚═════╝  ╚══════╝ ╚══════╝ ╚═╝  ╚═╝

Your AI data analyst. Point Claude at a folder of CSV files and get expert-level analysis — no code, no setup, no data leaves your machine.


The Problem

You've got a folder of CSV exports on your desktop. sales-2024-Q1.csv, sales-2024-Q2.csv, customers.csv, products.csv. Loose files from different periods, different systems. Right now, turning those into actual insight means one of two things:

  1. The Python REPL loop — Claude writes a script, runs it, gets an error, fixes it, runs it again, gets a different error, and eventually produces a matplotlib chart with default styling that you'd be embarrassed to put in a deck.

  2. "Here's a bar chart" — every AI assistant reaches for the same three chart types because they optimize for the most likely token, not the most informative visualization.

Dolex replaces both. No Python. No REPL. No import pandas. No plt.show(). No debugging dependency conflicts. Just tell Claude: "load everything in ~/data/ and show me quarterly trends."

What It Actually Is

Dolex is an MCP server that gives Claude a complete data analysis toolkit. It runs locally inside Claude — you don't need to know how that works, just install it and Claude gains new abilities:

Load a whole folder of CSV files at once — point it at a directory and Dolex loads every CSV it finds, profiles each one automatically (column types, distributions, stats, sample values), and makes them all queryable. Loose quarterly exports, separate files per region, whatever you have — Dolex handles it.

A built-in query engine — aggregations (sum, avg, median, stddev, percentiles), time bucketing (group by month/quarter/year), window functions (lag, lead, rank, running totals, percent of total), automatic joins across files, and filters. Handles 500k+ rows. No code generation, no sandboxes — Dolex crunches the numbers directly.

43 handcrafted visualization patterns — not chart.js defaults. Bump charts for rankings, beeswarms for distributions, Sankey diagrams for flows, ridgeline plots for comparing distributions, connected dot plots for two-metric comparisons, calendar heatmaps for temporal patterns, and 37 more. Each pattern has selection rules that encode real data visualization expertise.

Pattern intelligence — Dolex doesn't just render charts. It analyzes the shape of your data and your intent, scores all 43 patterns, and recommends the one that actually communicates the insight — not the obvious one.

Auto-analysis planning — give it a dataset and it generates a structured analysis plan: which columns matter, what relationships to explore, what charts to build, with ready-to-execute queries for each step.

100% local, 100% offline — your data never leaves your machine. Charts render as self-contained HTML. 33 TopoJSON map files ship with the package. Zero CDN calls, zero external dependencies.

Install

npm install -g @outsidedata/dolex

To update:

npm update -g @outsidedata/dolex

Claude Desktop

Add to your config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "dolex": {
      "command": "dolex"
    }
  }
}

Claude Code

claude mcp add dolex -- dolex

Any MCP Client

dolex

The Query Engine

Point Claude at a folder of CSV files and start asking questions. No schema definition, no imports, no setup. Dolex loads every file, profiles your data automatically — column types, distributions, cardinality, sample values — and gives Claude everything it needs to answer your questions.

Claude never writes code or raw SQL. Instead it works with Dolex's built-in query language:

Aggregations: sum, avg, min, max, count, count_distinct, median, stddev, p25, p75, percentile

Window functions: lag, lead, rank, dense_rank, row_number, running_sum, running_avg, pct_of_total — with partition and order control

Time bucketing: group by day, week, month, quarter, year — automatic date parsing

Joins: inner and left joins across tables within the same source, with dot-notation field references and ambiguity detection

Filters: before aggregation (filter) and after (having), with operators =, !=, >, >=, <, <=, in, not_in, between, like, is_null, is_not_null

Every query is validated before execution — field names are checked against the schema with fuzzy "did you mean?" suggestions for typos.

43 Patterns

| Category | What they're for | |----------|-----------------| | Comparison (9) | Bar, Diverging Bar, Slope Chart, Connected Dot Plot, Bump Chart, Lollipop, Bullet, Grouped Bar, Waterfall | | Distribution (7) | Histogram, Beeswarm, Violin, Ridgeline, Strip Plot, Box Plot, Density Plot | | Composition (9) | Stacked Bar, Waffle, Treemap, Sunburst, Circle Pack, Metric, Donut, Marimekko, Icicle | | Time (7) | Line, Area, Small Multiples, Sparkline Grid, Calendar Heatmap, Stream Graph, Horizon Chart | | Relationship (5) | Scatter, Connected Scatter, Parallel Coordinates, Radar, Heatmap | | Flow (4) | Sankey, Alluvial, Chord, Funnel | | Geo (2) | Choropleth, Proportional Symbol — 33 offline maps (world, US, continents, 17 countries) |

Tools

| Tool | What it does | |------|-------------| | load_csv | Load a CSV file or directory | | describe_data | Profile columns, stats, sample rows | | analyze_data | Auto-generate an analysis plan | | query_data | Run SQL queries (JOINs, GROUP BY, window functions, CTEs) | | visualize | Data → ranked chart recommendations (inline, cached, or CSV+SQL) | | refine_visualization | Iterate on a chart | | transform_data | Create derived columns with expressions | | promote_columns | Persist working columns to disk | | list_transforms | List columns by layer (source/derived/working) | | drop_columns | Drop derived or working columns | | list_patterns | Browse all 43 patterns | | export_html | Get raw HTML | | screenshot | Render to PNG | | server_status | Inspect server state | | clear_cache | Reset |

License

MIT