
IterableData
io.github.datenoioPublished by GitHub account datenoiov1.2.0Updated Nov 8, 2026
Streaming read, convert, and inspect 100+ formats. Install iterabledata[mcp] and run iterable-mcp.
Overview
Local MCP server exposing IterableData so an assistant can stream-read, convert and inspect 100+ data formats, including compressed files and databases.
- What you can do
- Read data from 100+ formats, with automatic format, compression, encoding and delimiter detection
- Convert files between formats, including bulk conversion of globs or directories and atomic writes
- Inspect datasets: infer schemas, compute statistics, list tables, sheets and datasets, and query format capabilities
- Read from cloud storage URIs and read-only SQL/NoSQL database engines, plus lakehouse table formats
- Run pipeline transformations with progress callbacks and structured metrics
- When to use it
- Useful when an assistant needs to open or convert data files in many formats (CSV, Parquet, JSONL, XML, Excel, archives, scientific formats) or pull read-only data from databases and object storage during a data task.
- Requirements
- Runs locally over stdio as a Python package (iterabledata, Python 3.10+), installed with the mcp extra and started via iterable-mcp, for example with uvx. Optional extras are needed for databases, lakehouse, genomic, geospatial and other format families. No authentication or environment variables are declared.
Installation
In SourceWeft
- Open IterableData in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Iterable Data
[Iterable Data]Iterable Data is a Python library for reading and writing data files row by row in a consistent, iterator-based interface. It provides a unified API for working with various data formats (CSV, JSON, Parquet, XML, etc.) similar to csv.DictReader but supporting many more formats.
This library simplifies data processing and conversion between formats while preserving complex nested data structures (unlike pandas DataFrames which require flattening).
Features
- Unified API: Single interface for reading/writing multiple data formats
- Automatic Format Detection: Detects file type and compression from filename or content (magic numbers and heuristics)
- Format Capability Reporting: Programmatically query format capabilities (read/write/bulk/totals/streaming/tables)
- Support for Compression: Works seamlessly with compressed files
- Preserves Nested Data: Handles complex nested structures as Python dictionaries
- DuckDB Integration: Optional DuckDB engine for high-performance queries with pushdown optimizations
- Pipeline Processing: Built-in pipeline support for data transformation
- Encoding Detection: Automatic encoding and delimiter detection for text files
- Bulk Operations: Efficient batch reading and writing
- Native Batch Conversion: Opt-in columnar-to-columnar transfers with projection, row-range, and batch-size selection
- Bounded Columnar I/O: Shared row/bulk cursors and configurable Parquet row groups keep large reads and writes bounded
- Codec Performance Profiles: Choose
fast,balanced, ormaxcompression settings with effective-setting diagnostics - Table Listing: Discover available tables, sheets, and datasets in multi-table formats
- Context Manager Support: Use
withstatements for automatic resource cleanup - DataFrame Bridges: Convert iterable data to Pandas, Polars, and Dask DataFrames with one-liner methods
- Cloud Storage Support: Direct access to S3, GCS, and Azure Blob Storage via URI schemes
- Database Engine Support: Read-only access to SQL and NoSQL databases (PostgreSQL, ClickHouse, MySQL, MongoDB, Elasticsearch, etc.) as iterable data sources
- Atomic Writes: Production-safe file writing with temporary files and atomic renames
- Bulk File Conversion: Convert multiple files at once using glob patterns or directories
- Progress Tracking and Metrics: Built-in progress bars, callbacks, and structured metrics objects
- Error Handling Controls: Configurable error policies and structured error logging; malformed input raises typed errors by default instead of reading as empty datasets
- Security Hardening: XXE-safe XML parsing, AST-whitelisted filter expressions, and explicit pickle trust acknowledgement
- Performance Regression Gate: CI-enforced baselines for representative read/convert workloads
- Container Formats: Stream records from TAR archives without extracting members to disk
- Type Hints and Type Safety: Complete type annotations with typed helper functions for dataclasses and Pydantic models
- Lakehouse Tables: Read and write Delta Lake, Iceberg, and DuckLake; read Hudi; experimental Apache Paimon tables plus Row/Mosaic file formats
Supported File Types
Core Formats
- JSON - Standard JSON files
- JSONL/NDJSON - JSON Lines format (one JSON object per line)
- JSON-LD - JSON for Linking Data (RDF format)
- CSV/TSV - Comma and tab-separated values
- Annotated CSV - CSV with type annotations and metadata
- CSVW - CSV on the Web (with metadata)
- PSV/SSV - Pipe and semicolon-separated values
- LTSV - Labeled Tab-Separated Values
- FWF - Fixed Width Format
- XML - XML files with configurable tag parsing
- ZIP XML - XML files within ZIP archives
- HTML - HTML files with table extraction
Binary Formats
- BSON - Binary JSON format
- MessagePack - Efficient binary serialization
- CBOR - Concise Binary Object Representation
- UBJSON - Universal Binary JSON
- SMILE - Binary JSON variant
- Bencode - BitTorrent encoding format
- Avro - Apache Avro binary format (read & write)
- Pickle - Python pickle format (untrusted input is unsafe; pass
trust=Trueto acknowledge)
Columnar & Analytics Formats
- Parquet - Apache Parquet columnar format
- ORC - Optimized Row Columnar format
- Arrow/Feather - Apache Arrow columnar format
- GeoParquet - GeoParquet metadata-aware Parquet profile with geometry/CRS preservation
- Lance - Modern columnar format optimized for ML and vector search
- Vortex - Modern columnar format with fast random access
- Paimon Row - Apache Paimon row format for O(1) row-number access
- Paimon Mosaic - Apache Paimon columnar-bucket format for wide tables
- Paimon - Apache Paimon warehouse/catalog tables
- Delta Lake - Delta Lake format (read & write)
- Iceberg - Apache Iceberg format (read & write)
- DuckLake - DuckLake lakehouse tables (read & write)
- Hudi - Apache Hudi format (read; writes deferred)
Database Formats
- SQLite - SQLite database files
- DBF - dBase/FoxPro database files
- MySQL Dump - MySQL dump files
- PostgreSQL Copy - PostgreSQL COPY format
- DuckDB - DuckDB database files
Statistical Formats
- SAS - SAS data files
- Stata - Stata data files
- SPSS - SPSS data files
- R Data - R RDS and RData files
- fst - R fst columnar on-disk frames (
fstextra; experimental) - PX - PC-Axis format
- ARFF - Attribute-Relation File Format (Weka format)
- LIBSVM - Sparse labeled feature vectors (read & write)
- NumPy -
.npy/.npzarray rows (read & write;npyextra)
Scientific Formats
- NetCDF - Network Common Data Form for scientific data
- CDF - NASA Common Data Format (space science)
- HDF5 - Hierarchical Data Format
- Zarr - Chunked array stores (
zarrextra; experimental) - XYZ - Molecular/point coordinate tables
- CIF - Crystallographic Information File (
atom_siteloops; experimental) - PDB - Protein Data Bank ATOM/HETATM records
- MATLAB MAT - MATLAB
.matvariables (matextra; experimental) - SEG-Y - Seismic traces (
geophysicalextra; experimental) - GRIB2 - Meteorological messages (
geophysicalextra; experimental) - miniSEED - Seismological waveform windows (
geophysicalextra; experimental)
Geospatial Formats
- GeoJSON - Geographic JSON format
- GeoJSON Text Sequence - RFC 8142 line-delimited GeoJSON Features (
.geojsonl,.geojsons); streaming-friendly - GeoPackage - OGC GeoPackage format
- GML - Geography Markup Language
- KML - Keyhole Markup Language
- KMZ - KML Zipped (ZIP archive containing KML)
- GPX - GPS Exchange Format (waypoints, routes, tracks)
- Shapefile - ESRI Shapefile format
- File Geodatabase - ESRI FileGDB layers via Fiona (
geospatialextra; experimental) - MapInfo MIF - MapInfo Interchange Format (
geospatialextra; experimental) - Esri ASCII Grid - Raster grids as cell or row records (
.asc) - ArcInfo E00 - Interchange exports (experimental subset)
- LAS - LiDAR point clouds (
lidarextra; experimental) - BAG - Bathymetric Attributed Grid (
hdf5extra; experimental) - CZML - Cesium CZML document packets
- FlatGeobuf - Streaming geospatial features with optional spatial-index filtering
- MVT/PBF - Mapbox Vector Tiles
- TopoJSON - Topology-preserving GeoJSON extension
RDF & Semantic Formats
- JSON-LD - JSON for Linking Data
- RDF/XML - RDF in XML format
- Turtle - Terse RDF Triple Language
- N-Triples - Line-based RDF format
- N-Quads - N-Triples with context
- TriG - RDF Triple Graph format
- N3 - Notation3 RDF format
- TriX - XML Triple RDF format
- HDT - Header-Dictionary-Triples compact RDF (
rdfextra; experimental)
Feed Formats
- Atom - Atom Syndication Format
- RSS - Rich Site Summary feed format
Network Formats
- PCAP - Packet Capture format
- PCAPNG - PCAP Next Generation format
Log & Event Formats
- Apache Log - Apache access/error logs
- CEF - Common Event Format
- GELF - Graylog Extended Log Format
- WARC - Web ARChive format
- CDX - Web archive index format
- ILP - InfluxDB Line Protocol
- HTML - HTML files with table extraction
Email Formats
- EML - Email message format
- MBOX - Mailbox format
- MHTML - MIME HTML format
Configuration Formats
- INI - INI configuration files
- TOML - Tom's Obvious Minimal Language
- YAML - YAML Ain't Markup Language
- HOCON - Human-Optimized Config Object Notation
- EDN - Extensible Data Notation
Office Formats
- XLS/XLSX - Microsoft Excel files
- XLSB - Excel Binary format
- ODS - OpenDocument Spreadsheet
- Microsoft Access - Access
.mdb/.accdbtables (accessextra; experimental) - Lotus 1-2-3 - Legacy WK1 /
.123spreadsheets (experimental)
Business & Exchange Formats
- EDI - X12 / EDIFACT segment streams (experimental)
- IATI - Aid-transparency activity XML (
xmlextra; experimental)
CAD Formats
- DXF - AutoCAD Drawing Exchange Format
Graph Formats
- GraphML - Graph Markup Language
- GEXF - Graph Exchange XML Format
- DOT - GraphViz DOT format
Sequence & Alignment Formats
- FASTA - Sequence format (protein/nucleotide)
- FASTQ - Sequence with quality format
- SAM - Sequence Alignment/Map (text)
- BAM - Binary SAM format
- Genomic VCF/BCF - Variant Call Format for genomic data (distinct from vCard
.vcf; requiresbioextra) - CRAM - Reference-compressed sequence alignments (requires
alignmentextra and an explicit reference when needed) - BED - BED3–BED12 genomic intervals
- GFF3/GTF - Genomic feature annotations with coordinate and attribute preservation
Streaming & Big Data Formats
- Kafka - Apache Kafka format
- Pulsar - Apache Pulsar format
- Flink - Apache Flink format
- Beam - Apache Beam format
- RecordIO - RecordIO format
- SequenceFile - Hadoop SequenceFile
- TFRecord - TensorFlow Record format
- WebDataset - TAR shards grouped into ML sample dicts (
format="webdataset"; experimental)
Protocol & Serialization Formats
- Protocol Buffers - Google Protocol Buffers
- Cap'n Proto - Cap'n Proto serialization
- FlatBuffers - FlatBuffers serialization
- FlexBuffers - FlexBuffers format
- Thrift - Apache Thrift format
- ASN.1 - ASN.1 encoding format
- Ion - Amazon Ion format
- OTLP JSON/Protobuf - OpenTelemetry traces, logs, and metrics export profiles (requires
otlpextra)
Other Formats
- TAR - Multi-file archive container (read-only; streams members without extracting to disk)
- vCard (VCF) - Electronic business cards (RFC 6350); not genomic Variant Call Format
- iCal - iCalendar format
- LDIF - LDAP Data Interchange Format
- TXT - Plain text files
See the formats documentation (or docs/docs/formats/ in this repo) for per-format parameters, record shapes, and extras.
Supported Compression Codecs
- GZip (.gz)
- BZip2 (.bz2)
- LZMA (.xz, .lzma)
- LZ4 (.lz4)
- ZIP (.zip)
- Brotli (.br)
- ZStandard (.zst, .zstd)
- Snappy (.snappy, .sz) — streaming decompression for framed files
- LZO (.lzo, .lzop) — streaming decompression with legacy blob fallback
- 7z (.7z; requires
py7zrviaiterabledata[compression])
Requirements
Python 3.10+
Installation
The PyPI package is iterabledata. Import iterable:
Or install from source:
Optional Dependencies
IterableData supports optional extras for additional features:
AI Features ([ai]): Enables AI-powered documentation generation using OpenAI, OpenRouter, Ollama, LMStudio, or Perplexity.
Database Engines ([db]): Enables read-only database access as iterable data sources. Supports PostgreSQL, ClickHouse, MySQL/MariaDB, Microsoft SQL Server, SQLite, MongoDB, and Elasticsearch/OpenSearch. Includes convenience groups:
[db-sql]: SQL databases only (PostgreSQL, ClickHouse, MySQL, MSSQL)[db-nosql]: NoSQL databases only (MongoDB, Elasticsearch)
Genomic formats ([bio]): Enables genomic VCF/BCF, CRAM, BED, GFF3, and GTF support. Alignment formats use pysam and may require a reference file.
Geospatial / scientific extras: [geospatial] covers FileGDB and MapInfo MIF (plus existing GeoPackage/Shapefile stack). [lidar], [mat], and [geophysical] enable LAS, MATLAB MAT, and SEG-Y/GRIB2/miniSEED respectively. Many structure formats (XYZ, CIF, PDB, ASCII Grid, CZML, EDI, WebDataset, Lotus WK1) need no extra.
Lakehouse ([lakehouse]): Delta Lake, Apache Iceberg, Lance, Apache Hudi, and DuckLake. Delta, Iceberg, and DuckLake support bounded writes; Hudi is read-only for now.
Paimon ([paimon]): Apache Paimon warehouse tables plus Row and Mosaic file formats. Install [paimon-table], [paimon-row], or [paimon-mosaic] individually if you only need one surface. DuckLake alone is also available as [ducklake].
See the API documentation for details on these features.
For AI agents and LLM tooling, see llms.txt (short index), llms-full.txt (copy-paste recipes), the portable skill skills/iterabledata/SKILL.md, and CONTRIBUTING.md.
AI Quick Start
Generate dataset documentation with a local LLM (no API key) via LM Studio or Ollama, or use OpenAI:
Need structured, machine-readable output? Use generate_blocks() to get independent documentation blocks (general, schema, quality, examples, statistics, agent_skill; plus opt-in codebook) plus the assembled markdown:
The agent_skill block emits a portable skill document (YAML frontmatter + Markdown) that AI agents can load for dataset-specific load/query/safety guidance.
Install AI support: pip install iterabledata[ai]. See examples/ai/ and docs/docs/api/ai.md.
Nested schema and stats (opt-in)
For multi-table workbooks/databases, iterable.ai.table_profile.profile_selected_table()
profiles one named sheet/table under row/time budgets (nested flattening enabled).
Format catalog (agents)
Full export: dev/formats.json or export_catalog(format="json"). See docs/docs/api/catalog.md.
Quick Start
Basic Reading
Writing Data
Async API
aopen_iterable() is the async counterpart of open_iterable(). Detection,
open, and every read run in the default thread-pool executor, so the event
loop stays responsive and concurrent sources interleave:
Note: file and codec I/O underneath remains synchronous (offloaded to worker
threads); this is not native async I/O. The stream parameter is not
supported for async operations.
Usage Examples
Reading Compressed CSV Files
Reading Different Formats
Reading from Databases
Format Detection and Encoding
Error Handling
IterableData provides a comprehensive exception hierarchy and configurable error handling:
Configurable Error Policies: Control how malformed records are handled:
No silent empty reads: Under the default policy (on_error='raise'), a malformed non-empty file raises FormatParseError rather than yielding zero records. Use on_error='skip' or 'warn' to tolerate bad records explicitly.
Pickle safety: Unpickling executes arbitrary code. Reading pickle files emits a warning unless you pass trust=True:
Error Logging: Structured JSON logs with context (filename, row number, byte offset, error message, original line).
See Exception Hierarchy documentation for complete exception reference.
Querying Format Capabilities
Format Conversion
Atomic Writes for Production Safety
Use atomic writes to ensure output files are never left in a partially written state:
Benefits: Prevents data corruption from crashes, interruptions, or mid-process failures. Original files are preserved on failure.
Bulk File Conversion
Convert multiple files at once using glob patterns, directories, or file lists:
Features: Error resilience (continues if one file fails), aggregated metrics, flexible output naming with placeholders ({name}, {stem}, {ext}).
Progress Tracking and Metrics
Track conversion and pipeline progress with callbacks, progress bars, and structured metrics:
Features: Real-time progress callbacks, automatic progress bars with tqdm, structured metrics objects (ConversionResult, PipelineResult).
Using Pipeline for Data Processing
Manual Format and Codec Usage
Cloud Storage Support
Read and write data directly from cloud object storage (S3, GCS, Azure):
Supported Providers:
- Amazon S3:
s3://ands3a://schemes - Google Cloud Storage:
gs://andgcs://schemes - Azure Blob Storage:
az://,abfs://, andabfss://schemes
Installation: pip install iterabledata[cloud]
Note: DuckDB engine does not support cloud storage URIs; use engine='internal' (default).
Using DuckDB Engine with Pushdown Optimizations
The DuckDB engine provides high-performance querying with advanced optimizations:
Supported Formats: CSV, JSONL, NDJSON, JSON, Parquet
Supported Codecs: GZIP, ZStandard (.zst)
Benefits: Reduced I/O, lower memory usage, faster processing through database-level optimizations
Bulk Operations
Performance-oriented Conversion
Use native batches when both endpoints are Parquet or Arrow/Feather. The selection is pushed into the columnar reader when supported; otherwise the conversion safely falls back to the regular row/bulk loop:
For general compression workloads, use the balanced profile. Choose fast
for CPU-bound pipelines or max for archival output:
See native batches, codec profiles, and the performance guide for selection, memory, row-group, and fallback behavior.
Working with Excel Files
XML Processing
DataFrame Bridges
Convert iterable data to Pandas, Polars, or Dask DataFrames:
Note: DataFrame bridges require optional dependencies. Install with:
Type Hints and Type Safety
IterableData includes complete type annotations and typed helper functions for modern Python development:
Benefits:
- Complete type annotations across the public API
py.typedmarker file enables mypy, pyright, and other type checkers- Typed helpers provide IDE autocomplete and type safety
- Pydantic validation catches schema issues early
Installation: pip install iterabledata[pydantic] for Pydantic support
Advanced: Converting Compressed XML to Parquet
API Reference
Main Functions
open_iterable(filename, mode='r', engine='internal', codecargs={}, iterableargs={})
Opens a file and returns an iterable object.
Parameters:
filename(str): Path to the file (supports local files and cloud storage URIs:s3://,gs://,az://)mode(str): File mode ('r' for read, 'w' for write)engine(str): Processing engine ('internal' or 'duckdb')codecargs(dict): Arguments for codec initializationiterableargs(dict): Arguments for iterable initializationcolumns(list[str]): For DuckDB engine, only read specified columns (pushdown optimization)filter(str | callable): For DuckDB engine, filter rows at database level (SQL string or Python callable)query(str): For DuckDB engine, execute custom SQL query (read-only)on_error(str): Error policy ('raise', 'skip', or 'warn')error_log(str | file-like): Path or file object for structured error loggingstorage_options(dict): Cloud storage authentication options
Returns: Iterable object for the detected file type
detect_file_type(filename)
Detects file type and compression codec from filename.
Returns: Dictionary with success, datatype, and codec keys
convert(fromfile, tofile, iterableargs={}, toiterableargs={}, scan_limit=1000, batch_size=50000, silent=True, is_flatten=False, use_totals=False, progress=None, show_progress=False, atomic=False, use_native_batch=False, selection=None, strict_native=False) -> ConversionResult
Converts data between formats.
Parameters:
fromfile(str): Source file pathtofile(str): Destination file pathiterableargs(dict): Options for reading source filetoiterableargs(dict): Options for writing destination filescan_limit(int): Number of records to scan for schema detectionbatch_size(int): Batch size for bulk operationssilent(bool): Suppress progress outputis_flatten(bool): Flatten nested structuresuse_totals(bool): Use total count for progress tracking (if available)progress(callable): Optional callback function receiving progress stats dictionaryshow_progress(bool): Display progress bar using tqdm (if available)atomic(bool): Write to temporary file and atomically rename on successuse_native_batch(bool): Request native columnar batch transfer when both endpoints support itselection(BatchSelectionor dict): Optional columns, row range, slice, table, or backend predicate selectionstrict_native(bool): Raise instead of falling back when native batching or the requested selection is unsupported
Returns: ConversionResult object with:
rows_in(int): Total rows readrows_out(int): Total rows writtenelapsed_seconds(float): Conversion timebytes_read(int | None): Bytes read (if available)bytes_written(int | None): Bytes written (if available)errors(list[Exception]): List of errors encountered
bulk_convert(source, destination, pattern=None, to_ext=None, **kwargs) -> BulkConversionResult
Convert multiple files at once using glob patterns, directories, or file lists.
Parameters:
source(str): Glob pattern, directory path, or file pathdestination(str): Output directory or filename patternpattern(str): Filename pattern with placeholders ({name},{stem},{ext})to_ext(str): Replace file extension (e.g.,'parquet')**kwargs: All parameters fromconvert()function
Returns: BulkConversionResult object with:
total_files(int): Total files processedsuccessful_files(int): Files successfully convertedfailed_files(int): Files that failedtotal_rows_in(int): Total rows read across all filestotal_rows_out(int): Total rows written across all filestotal_elapsed_seconds(float): Total conversion timefile_results(list[FileConversionResult]): Per-file resultserrors(list[Exception]): All errors encounteredthroughput(float | None): Rows per second
pipeline(source, destination, process_func, trigger_func=None, trigger_on=1000, final_func=None, reset_iterables=True, skip_nulls=True, start_state=None, debug=False, batch_size=1000, progress=None, atomic=False) -> PipelineResult
Execute a data processing pipeline.
Parameters:
source(BaseIterable): Source iterable to read fromdestination(BaseIterable | None): Destination iterable to write toprocess_func(callable): Function to process each recordtrigger_func(callable | None): Function called periodically during processingtrigger_on(int): Number of records between trigger function callsfinal_func(callable | None): Function called after processing completesreset_iterables(bool): Reset iterables before processingskip_nulls(bool): Skip None results from process_funcstart_state(dict | None): Initial state dictionarydebug(bool): Raise exceptions instead of catching thembatch_size(int): Number of records to batch before writingprogress(callable | None): Optional callback function for progress updatesatomic(bool): Use atomic writes if destination is a file
Returns: PipelineResult object with:
rows_processed(int): Total rows processedelapsed_seconds(float): Processing timethroughput(float | None): Rows per secondexceptions(int): Number of exceptions encounterednulls(int): Number of null results- Supports both attribute access (
result.rows_processed) and dictionary access (result['rec_count']) for backward compatibility
Iterable Methods
All iterable objects support:
read(skip_empty=True) -> Row- Read single recordread_bulk(num=DEFAULT_BULK_NUMBER) -> list[Row]- Read multiple recordswrite(record)- Write single recordwrite_bulk(records)- Write multiple recordsreset()- Reset iterator to beginningclose()- Close file handlesto_pandas(chunksize=None)- Convert to pandas DataFrame (optional chunked processing)to_polars(chunksize=None)- Convert to Polars DataFrame (optional chunked processing)to_dask(chunksize=1000000)- Convert to Dask DataFramelist_tables(filename=None) -> list[str] | None- List available tables/sheets/datasetshas_tables() -> bool- Check if format supports multiple tables
Helper Functions
as_dataclasses(iterable, dataclass_type, skip_empty=True) -> Iterator[T]
Convert dict-based rows from an iterable into dataclass instances.
Parameters:
iterable(BaseIterable): The iterable to read rows fromdataclass_type(type[T]): The dataclass type to convert rows toskip_empty(bool): Whether to skip empty rows
Returns: Iterator of dataclass instances
as_pydantic(iterable, model_type, skip_empty=True, validate=True) -> Iterator[T]
Convert dict-based rows from an iterable into Pydantic model instances.
Parameters:
iterable(BaseIterable): The iterable to read rows frommodel_type(type[T]): The Pydantic model type to convert rows toskip_empty(bool): Whether to skip empty rowsvalidate(bool): Whether to validate rows against the model schema
Returns: Iterator of Pydantic model instances
Raises: ImportError if pydantic is not installed
to_dask(files, chunksize=1000000, **iterableargs) -> DaskDataFrame
Convert multiple files to a unified Dask DataFrame with automatic format detection.
Parameters:
files(str | list[str]): Single file path or list of file pathschunksize(int): Number of rows per partition**iterableargs: Additional arguments to pass toopen_iterable()for each file
Returns: Dask DataFrame containing data from all files
Raises: ImportError if dask or pandas is not installed
Engines
Internal Engine (Default)
The internal engine uses pure Python implementations for all formats. It supports all file types and compression codecs.
DuckDB Engine
The DuckDB engine provides high-performance querying capabilities for supported formats:
- Formats: CSV, JSONL, NDJSON, JSON
- Codecs: GZIP, ZStandard (.zst)
- Features: Fast querying, totals counting, SQL-like operations
Use engine='duckdb' when opening files:
Examples Directory
See the examples directory for more complete examples:
simplewiki/- Processing Wikipedia XML dumps
More Examples and Tests
See the tests directory for comprehensive usage examples and test cases.
Contributors: run the full suite with pytest --verbose. The performance regression gate is opt-in:
Regenerate baselines intentionally after legitimate performance changes:
See AGENTS.md for development conventions.
AI Integration Guides
IterableData can be integrated with AI platforms and frameworks for intelligent data processing:
- AI Frameworks - Integration with LangChain, CrewAI, and AutoGen
- Tool creation for data reading and format conversion
- Schema inference and data quality analysis
- Multi-agent workflows for data processing
- OpenAI - Direct OpenAI API integration (GPT-4, GPT-3.5, etc.)
- Function calling and Assistants API
- Structured outputs for consistent results
- Natural language data analysis and transformation
- Claude - Anthropic Claude AI integration
- Claude API integration with tools support
- Intelligent data analysis and schema inference
- Format conversion with AI guidance
- Data quality assessment and documentation
- Gemini - Google Gemini AI integration
- Natural language data analysis
- Intelligent format conversion with AI guidance
- Schema documentation and data quality assessment
- Function calling integration
These guides provide patterns, examples, and best practices for combining IterableData's unified data interface with AI capabilities.
Related Projects
This library is part of the Dateno open-source project. It is also used in:
- undatum - Command line data processing tool
- datacrafter - Data processing ETL engine
License
IterableData is part of the Dateno open-source project.
- Code is licensed under the MIT License. Copyright © 2022–2026 Dateno.
- Documentation and data (including this README, the docs site, and test fixtures) are licensed under CC BY 4.0.
See the license page for attribution guidance.
Contributing
Contributions are welcome! Please feel free to submit pull requests or open issues.
Changelog
See CHANGELOG.md for detailed version history.
Version 1.1.0 (2026-10-29)
- Faster formats: new
iterabledata[fast]extra (orjson, msgspec, ISA-L): JSON Lines write ~5x and read ~2x; Parquet write ~5x; CSV -> Parquet ~12x withconvert(..., use_native_batch=True) - No silent data loss: JSON writers keep
time,Decimal,UUID,bytes,timedelta,setvalues (also in binary containers);convert()no longer drops nested rows or swallows write errors - CSV/TSV: dialect options from
iterableargs,.tsvis tab-separated, an explicitformat=keeps the compression codec - Light
import iterable: 0.42 s -> 0.09 s; AI prompt templates now ship in the wheel - Convert API:
codecargs/tocodecargsinconvert()andbulk_convert(),list_codecs(), public AI helpers - Formats and runtime: XLSX/ODS/XML writes, validation hooks on every writable format, genuine async iteration, ClickHouse/MSSQL ingest
- Changed: JSON and JSON Lines output is compact (
{"a":1}); NaN and infinities are written asnull
Version 1.0.23 (2026-08-18)
- MCP Registry: Shorten
server.jsondescription to the 100-character registry limit
Version 1.0.22 (2026-08-18)
- Coding agents: Canonical
open_iterable/convertimports,llms-full.txt, portable skill, cookbook - Discovery: MCP
server.json,/.well-known/llms.txt, prompt-eval; OIDC publish to the MCP Registry on tagged releases - CI: Windows file-lock and CSV newline fixes; optional extras skip cleanly in the base install
Version 1.0.21 (2026-08-10)
- Nested schema/stats: Opt-in
flatten_nested=Trueonschema.infer()/stats.compute()for dotted paths likecapital_city.lat - Bounded table profiling:
iterable.ai.table_profile.profile_selected_table()with row/time budgets for multi-table sources - Excel/SQLite hardening: Correct named-sheet opens, skip blank header rows, recover bad XLSX dimensions; SQLite prefers read-only opens and quotes table names
Version 1.0.20 (2026-08-07)
- Agent skill block (
agent_skill): Defaultgenerate_blocks()now includes a portable agent-skill document (YAML frontmatter + Markdown) with dataset facts, workflow, and safety guidance - Safer usage examples: Examples / legacy autodoc prompts require
python/r/sql, SQL against tabledataset, and read-only constraints - Schema examples: Nested provider
examplevalues are coerced to strings for structured-output validation
Version 1.0.18 (2026-07-22)
- Open-data formats (experimental): FileGDB, MapInfo MIF, ASCII Grid, E00, LAS, BAG, CZML, XYZ, CIF, PDB, MATLAB MAT, SEG-Y, GRIB2, miniSEED, EDI, Access MDB, Lotus 1-2-3, WebDataset, R fst, HDT, IATI
- Extras:
[lidar],[mat],[geophysical],[access],[fst](plus existing[geospatial],[hdf5],[xml],[rdf]) - New lakehouse formats: Apache Paimon Row/Mosaic files and Paimon catalog tables; DuckLake (
ducklake/lakehouseextras) - Lakehouse writes: Bounded create/append/overwrite for Delta Lake and Iceberg; DuckLake and Paimon table writes; Hudi writes deferred
- Extras (lakehouse):
[paimon],[paimon-table],[paimon-row],[paimon-mosaic], and[ducklake]; DuckLake folded into[lakehouse] - Docs: All format stub pages expanded; formats index and sidebars updated; Delta/Iceberg write docs corrected
Version 1.0.17 (2026-07-16)
- Performance: Bounded Parquet/Arrow/Lance batching, shared row/bulk cursors, cached conversion totals, and opt-in native columnar batch conversion.
- Compression:
fast,balanced, andmaxcodec profiles with effective-setting diagnostics. - Format support: Zarr, GeoParquet, FlatGeobuf, CRAM, BED, GFF3/GTF, and OTLP JSON/Protobuf profiles.
- Repository quality: Versioned capability metadata, distribution-content checks, fixture isolation, optional-family CI coverage, and OIDC release guidance.
Version 1.0.16 (2026-07-15)
- New formats: GeoJSON Text Sequence (
geojsonseq), TAR container (tar), genomic VCF/BCF (genomic_vcf,bioextra) - Security: XXE-safe XML parsing, AST-whitelisted filter expressions, pickle
trust=Trueacknowledgement - Streaming: Snappy/LZO streaming codecs; lazy/batch readers for Shapefile, Arrow, Lance, Delta, Iceberg
- Error policy: Malformed input raises typed errors by default;
open_iterable()surfacesIterableDataErrorsubclasses - Quality: Performance regression gate in CI; refactored core entry points; expanded test resilience
Version 1.0.15 (2026-07-04)
- Bare install importability:
import iterableno longer requires optional BSON or Pydantic dependencies
Source: README.md at commit 6b50c47
Tools
0Version history
2- v1.1.0Oct 29, 2026
- v1.0.23Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts