MCPcopy Index your code
hub / github.com/dathere/qsv

github.com/dathere/qsv @21.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 21.1.0 ↗ · + Follow
4,921 symbols 31,160 edges 206 files 824 documented · 17%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

qsv: Blazing-fast Data-Wrangling toolkit

Linux build status Windows build status macOS build status Security audit Codacy Badge Crates.io Discussions Minimum supported Rust version FOSSA Status DOI Ask DeepWiki

  Table of Contents
qsv logo

Hi-ho "Quicksilver" away!

original logo details * Base AI-reimagined logo * Event logo archive

|qsv is a data-wrangling toolkit for querying, slicing,

sorting, analyzing, filtering, enriching, transforming,

validating, joining, formatting, converting, chatting,

FAIRifying & documenting tabular data (CSV, Excel, etc).

Commands are simple, composable & "blazing fast".

   csv,conf,v9/NYC SOD 2026

  • "Have we achieved ACI?" series - 123

  • Sponsor

Try it out at qsv.dathere.com!

Command Description
apply

📇🧠🤖🚀🔣👆⛩️ | Apply series of string, date, math & currency transformations to given CSV column/s. It also has some basic NLP functions (similarity, sentiment analysis, profanity, eudex, language & name gender) detection. Its summarize subcommand condenses a column or group of columns using an OpenAI API-compatible LLM (local or commercial) with customizable, Mini Jinja-templated per-record prompts. | | applydp

📇🚀🔣👆 CKAN | applydp is a slimmed-down version of apply with only Datapusher+ relevant subcommands/operations (qsvdp binary variant only). | | behead | Drop headers from a CSV. | | blake3

🚀 | Compute or check BLAKE3 hashes of files. | | cat

🗄️ | Concatenate CSV files by row or by column. | | clipboard

🖥️ | Provide input from the clipboard or save output to the clipboard. | | color

🤯🐻‍❄️🖥️ | Outputs tabular data as a pretty, colorized table that always fits into the terminal. Apart from CSV and its dialects, Arrow, Avro/IPC, Parquet, JSON array & JSONL formats are supported with the "polars" feature. | | count

📇🐻‍❄️🏎️ | Count the rows and optionally compile record width statistics of a CSV file. (11.87 seconds for a 15gb, 28m row NYC 311 dataset without an index. Instantaneous with an index.) If the polars feature is enabled, uses Polars' multithreaded, mem-mapped CSV reader for fast counts even without an index | | datefmt

📇🚀👆 | Formats recognized date fields (19 formats recognized) to a specified date format using strftime date format specifiers. | | dedup

🤯🚀👆 | Remove duplicate rows (See also extdedup, extsort, sort & sortcheck commands). | | describegpt

📇🗃️🤖🌐🪄📚⛩️ CKAN | Infer a "neuro-symbolic" Data Dictionary, Description & Tags or ask questions about a CSV with a configurable, Mini Jinja prompt file, using any OpenAI API-compatible LLM, including local LLMs.

(e.g. Markdown, JSON, TOON, JSON Schema, Semantic Markdown, Everything, Spanish, Mandarin, Controlled Tags;

--prompt "What are the top 10 complaint types by community board & borough by year?" - deterministic, hallucination-free SQL RAG result; iterative, session-based SQL RAG refinement - refined SQL RAG result) | | diff

🚀 | Find the difference between two CSVs with ludicrous speed!

e.g. compare two CSVs with 1M rows x 9 columns in under 600ms! | | edit | Replace the value of a cell specified by its row and column. | | enum

👆 | Add a new column enumerating rows by adding a column of incremental or uuid identifiers. Can also be used to copy a column or fill a new column with a constant value. | | excel

🚀 | Exports a specified Excel/ODS sheet to a CSV file. | | exclude

📇👆 | Removes a set of CSV data from another set based on the specified columns. | | explode

🔣👆 | Explode rows into multiple ones by splitting a column value based on the given separator. The inverse of implode. | | extdedup

👆 | Remove duplicate rows from an arbitrarily large CSV/text file using a memory-mapped, on-disk hash table. Unlike the dedup command, this command does not load the entire file into memory nor does it sort the deduped file. | | extsort

📇🚀👆 | Sort an arbitrarily large CSV/text file using a multithreaded external merge sort algorithm. | | fetch

📇🧠🌐 | Send/Fetch data to/from web services for every row using HTTP Get. Comes with HTTP/2 adaptive flow control, jaq JSON query language support, dynamic throttling (RateLimit) & caching with available persistent caching using Redis or a disk-cache. | | fetchpost

📇🧠🌐⛩️ | Similar to fetch, but uses HTTP Post (HTTP GET vs POST methods). Supports HTML form (application/x-www-form-urlencoded), JSON (application/json) and custom content types - with the ability to render payloads using CSV data using the Mini Jinja template engine. | | fill

👆 | Fill empty values. | | fixlengths | Force a CSV to have same-length records by either padding or truncating them. | | flatten | A flattened view of CSV records. Useful for viewing one record at a time.

e.g. qsv slice -i 5 data.csv \| qsv flatten. | | fmt | Reformat a CSV with different delimiters, record terminators or quoting rules. (Supports ASCII delimited data.) | | foreach✨ | Execute a shell command once per record in a given CSV file. | | frequency

📇😣🏎️👆🪄Luau | Build frequency distribution tables of each column. Uses multithreading to go faster if an index is present (Examples: CSV JSON TOON). | | get

📇🧠🌐 CKAN | Get tabular data from local files, URLs (http/https & dathere://) & CKAN (ckan://) into a managed, queryable disk cache - with conditional revalidation (ETag/Last-Modified), transparent zstd compression, BLAKE3 hashing & automatic indexing. Cached resources are reusable by ANY qsv command via the dc: prefix (e.g. qsv stats dc:data.csv), with stale entries auto-refreshed. Efficiently seeds luau lookup tables, validate dynamicEnum reference data & speeds up Datapusher+ harvesting. | | geocode

📇🧠🚀🌐🔣👆🌎 | Geocodes a location against an updatable local copy of the Geonames cities & the Maxmind GeoLite2 databases — with caching and multi-threading, this offline path geocodes up to 360,000 records/sec! Can also geocode online (forward & reverse) via the OpenCage geocoder. | | geoconvert

🌎 | Convert between various spatial formats and CSV/SVG including GeoJSON, SHP, and more. | | headers

🗄️ | Show the headers of a CSV. Or show the intersection of all headers between many CSV files. | | implode

😣👆 | Implode rows by grouping on key column(s) and joining a value column with a given separator. The inverse of explode. | | index | Create an index (📇) for a CSV. This is very quick (even the 15gb, 28m row NYC 311 dataset takes all of 14 seconds to index) & provides constant time indexing/random access into the CSV. With an index, count, sample & slice work instantaneously; random access mode is enabled in luau; and multithreading (🏎️) is enabled for the frequency, split, stats & `sc

Extension points exported contracts — how you extend this code

RngProvider (Interface)
trait to handle different RNG types [3 implementers]
src/cmd/sample.rs
SeekRead (Interface)
Empty trait as an alias for Seek and Read that avoids auto trait errors [1 implementers]
src/config.rs
Csv (Interface)
(no doc) [3 implementers]
tests/tests.rs
HasDefault (Interface)
(no doc) [1 implementers]
src/mcp_skills_gen.rs
SerializableItem (Interface)
Items that can be (de)serialized into a sketch payload. Implementations exist for [`csv::ByteRecord`] below. [1 implementers]
src/cmd/sample/sketches.rs
StrExt (Interface)
(no doc) [1 implementers]
src/cmd/diff.rs
WriteDiffResultHeader (Interface)
(no doc) [1 implementers]
src/cmd/diff.rs
GroupKeyConstructor (Interface)
(no doc) [1 implementers]
src/cmd/fill.rs

Core symbols most depended-on inside this repo

command
called by 2745
tests/workdir.rs
create
called by 1660
tests/workdir.rs
assert_success
called by 1141
tests/workdir.rs
read_stdout
called by 1125
tests/workdir.rs
clone
called by 981
src/cmd/stats.rs
push
called by 677
src/diskcache.rs
len
called by 635
src/cmd/stats.rs
path
called by 623
tests/workdir.rs

Shape

Function 4,115
Method 431
Class 284
Enum 81
Interface 10

Languages

Rust99%
Python1%

Modules by API surface

tests/test_frequency.rs200 symbols
tests/test_stats.rs166 symbols
src/cmd/describegpt.rs136 symbols
src/util.rs115 symbols
tests/test_sqlp.rs104 symbols
src/diskcache.rs102 symbols
src/cmd/describegpt/dictionary.rs98 symbols
src/cmd/moarstats.rs92 symbols
tests/test_apply.rs91 symbols
tests/test_moarstats.rs85 symbols
tests/test_describegpt.rs82 symbols
tests/test_sample.rs81 symbols

Datastores touched

testdbDatabase · 1 repos

For agents

$ claude mcp add qsv \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact