parquet-js

Read, write, and optimize Apache Parquet files in Node.js and TypeScript.

2|Updated May 16, 2026
One-click install
npx skills add https://github.com/avbel/ai-skills --skill parquet-js-avbel
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: parquet-js
Source: https://github.com/avbel/ai-skills/tree/main/skills/parquet-js
Command: npx skills add https://github.com/avbel/ai-skills --skill parquet-js-avbel

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Working with Apache Parquet in JavaScript requires understanding its columnar file structure, encodings, compression codecs, and choosing between libraries with very different trade-offs. This Skill provides the conventions and library-specific APIs needed to read, write, and optimize Parquet files correctly in Node.js and browser environments. ## Core Features & Use Cases - Format Internals Reference: Covers row groups, column chunks, pages, primitive and logical types, encodings (RLE_DICTIONARY, DELTA_BINARY_PACKED), and compression codecs (SNAPPY, ZSTD, GZIP, LZ4_RAW, BROTLI). - Library Guidance: Compares hyparquet (zero-dependency reads), parquet-wasm (Arrow-native read/write), and @duckdb/node-api (SQL with automatic predicate pushdown), with working TypeScript examples for each. - Performance Optimization: Explains predicate pushdown, column pruning, bloom filters, row group sizing, and sort-order strategies for efficient queries. - Use Case: You need to filter a large Parquet dataset in a Node.js API. Use hyparquet's parquetQuery with row-group statistics and bloom filters to read only matching rows, selecting just the columns you need. ## Quick Start Ask the agent to read a Parquet file in Node.js, filter rows where a column matches a condition, and return only the columns you specify.

Frequently Asked Questions about parquet-js

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I read a Parquet file in Node.js?▼

Use hyparquet's parquetReadObjects with asyncBufferFromFile for zero-dependency reads returning plain JS objects. For Arrow-native workflows use parquet-wasm's readParquet, or query directly with SQL via @duckdb/node-api's conn.runAndReadAll.

hyparquet vs parquet-wasm vs DuckDB for Parquet in JavaScript?▼

hyparquet is ~10 KB with zero dependencies, ideal for lightweight reads and browsers. parquet-wasm (~1.2 MB) offers full Arrow-native read/write. @duckdb/node-api (~30 MB) provides SQL queries with automatic predicate pushdown but requires a native binary.

Can I use Parquet libraries in the browser?▼

Yes, hyparquet works in browsers and supports HTTP range requests via asyncBufferFromUrl. parquet-wasm also runs in browsers after calling initWasm. DuckDB's Node API does not; use duckdb-wasm instead.

How do I write Parquet files from JavaScript?▼

Use hyparquet-writer's parquetWriteBuffer or parquetWriteFile, specifying schemas for empty or ambiguous columns. Alternatively, parquet-wasm's writeParquet accepts Arrow tables with WriterPropertiesBuilder for compression settings like ZSTD.

Why is my Parquet query slow on filtered columns?▼

Slow filtered queries usually mean poor predicate pushdown. Sort data by filter columns so min/max statistics don't overlap, enable bloom filters for high-cardinality equality filters, and keep statistics enabled so row groups can be pruned.

What compression should I use for Parquet files?▼

ZSTD is the recommended modern choice with tunable speed and ratio. Use SNAPPY for maximum compatibility, GZIP for storage-sensitive workloads, LZ4_RAW for low-latency reads, and BROTLI for archival cold storage.