Blazing-fast data analysis powered by WebAssembly. Rozes brings pandas-like analytics to TypeScript/JavaScript with native performance, columnar storage, and zero-copy operations.
npm install rozes (Please wait for full version)const { Rozes } = require("rozes");
const rozes = await Rozes.init();
const df = rozes.DataFrame.fromCSV(
"name,age,score\nAlice,30,95.5\nBob,25,87.3"
);
console.log(df.shape); // { rows: 2, cols: 3 }
const ages = df.column("age"); // Float64Array [30, 25] - zero-copy!- Uses a Parallel Parsing Mechanism
- SIMD for speed optimizations for very large csvs
- Radix Joins / String Interning and other optimizations for speed and memory
- WebGPU optimizations (future)
| Operation | Rozes | Papa Parse | csv-parse | Speedup |
|---|---|---|---|---|
| Parse 100K rows | 53.67ms | 207.67ms | 427.48ms | 3.87-7.96Γ |
| Parse 1M rows | 578ms | ~2-3s | ~5s | 3.5-8.7Γ |
| Filter 1M rows | 13.11ms | ~150ms | N/A | 11.4Γ |
| Sort 100K rows | 6.11ms | ~50ms | N/A | 8.2Γ |
| GroupBy 100K rows | 1.76ms | ~30ms | N/A | 17Γ |
| SIMD Sum 200K rows | 0.04ms | ~5ms | N/A | 125Γ |
| SIMD Mean 200K rows | 0.04ms | ~6ms | N/A | 150Γ |
| Radix Join 100KΓ100K | 5.29ms | N/A | N/A | N/A |
| Library | Bundle Size | Gzipped | vs Rozes |
|---|---|---|---|
| Rozes | 103KB | 52KB | 1Γ |
| Papa Parse | 206KB | 57KB | 2.0Γ larger |
| Danfo.js | 1.2MB | ~400KB | 12Γ larger |
| Polars-WASM | 2-5MB | ~1MB | 19-49Γ larger |
| DuckDB-WASM | 15MB | ~5MB | 146Γ larger |
Future Package Sizes (v1.3.0):
rozes/csv(CSV-only): 40KB gzippedrozes(universal): 120KB gzippedrozes/web(with WebGPU): 180KB gzipped
- 520+ tests passing (99.6%) - includes 200+ Node.js integration tests
- 100% RFC 4180 CSV compliance (125/125 conformance tests)
- 11/12 benchmarks passing (92% - Milestone 1.2.0)
- Zero memory leaks (verified 1000-iteration tests)
- Tiger Style compliant (safety-first Zig patterns)
npm install rozesRequirements:
- Node.js 14+ (LTS versions recommended)
- No native dependencies (pure WASM)
Add to your build.zig.zon:
.dependencies = .{
.rozes = .{
.url = "https://github.com/yourusername/rozes/archive/v1.0.0.tar.gz",
.hash = "...",
},
},Then in your build.zig:
const rozes = b.dependency("rozes", .{
.target = target,
.optimize = optimize,
});
exe.root_module.addImport("rozes", rozes.module("rozes"));Requirements:
- Zig 0.15.1+
import { Rozes } from "rozes";
const rozes = await Rozes.init();
const df = rozes.DataFrame.fromCSV(csvText);
console.log(df.shape);import { Rozes, DataFrame } from "rozes";
const rozes: Rozes = await Rozes.init();
const df: DataFrame = rozes.DataFrame.fromCSV(csvText);
// Full autocomplete support
const shape = df.shape; // { rows: number, cols: number }
const columns = df.columns; // string[]
const ages = df.column("age"); // Float64Array | Int32Array | BigInt64Array | nullconst { Rozes } = require("rozes");const std = @import("std");
const DataFrame = @import("rozes").DataFrame;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
const csv = "name,age,score\nAlice,30,95.5\nBob,25,87.3";
var df = try DataFrame.fromCSVBuffer(allocator, csv, .{});
defer df.free();
std.debug.print("Rows: {}, Cols: {}\n", .{ df.rowCount, df.columns.len });
}<!DOCTYPE html>
<html>
<head>
<script type="module">
import { Rozes } from "./node_modules/rozes/dist/index.mjs";
const rozes = await Rozes.init();
const df = rozes.DataFrame.fromCSV(csvText);
console.log(df.shape);
</script>
</head>
</html>Rozes provides a comprehensive DataFrame API for Node.js and browser environments through WebAssembly bindings.
// Parse CSV from string
const df = rozes.DataFrame.fromCSV(
"name,age,score\nAlice,30,95.5\nBob,25,87.3"
);
// Parse CSV from file (Node.js only)
const df2 = rozes.DataFrame.fromCSVFile("data.csv");// Shape and metadata
df.shape; // { rows: 2, cols: 3 }
df.columns; // ["name", "age", "score"]
df.length; // 2// Numeric columns - returns TypedArray (zero-copy!)
const ages = df.column("age"); // Float64Array [30, 25]
const scores = df.column("score"); // Float64Array [95.5, 87.3]
// String columns - returns array of strings
const names = df.column("name"); // ["Alice", "Bob"]
// Boolean columns - returns Uint8Array (0 = false, 1 = true)
const active = df.column("is_active"); // Uint8Array [1, 0]// Select columns
const subset = df.select(["name", "age"]);
// Head and tail
const first5 = df.head(5);
const last5 = df.tail(5);
// Sort
const sorted = df.sort("age", false); // ascending
const descending = df.sort("score", true); // descendingBlazing-fast statistical functions with SIMD acceleration (2-6 billion rows/sec)
// Sum - 4.48 billion rows/sec
const totalScore = df.sum("score"); // 182.8
// Mean - 4.46 billion rows/sec
const avgAge = df.mean("age"); // 27.5
// Min/Max - 6.5-6.7 billion rows/sec
const minAge = df.min("age"); // 25
const maxScore = df.max("score"); // 95.5
// Variance and Standard Deviation
const variance = df.variance("score");
const stddev = df.stddev("score");
// Note: SIMD automatically used on x86_64 with AVX2, falls back to scalar on other platformsconst df = rozes.DataFrame.fromCSV(largeCSV);
console.log(df.shape);import { Rozes, DataFrame } from "rozes";
const rozes: Rozes = await Rozes.init();
const df: DataFrame = rozes.DataFrame.fromCSV(csvText);
// Full autocomplete and type checking
const shape: { rows: number; cols: number } = df.shape;
const columns: string[] = df.columns;
const ages: Float64Array | Int32Array | null = df.column("age");
const total: number = df.sum("price");| Category | Methods | Status |
|---|---|---|
| CSV I/O | fromCSV(), fromCSVFile() |
β Available |
| Properties | shape, columns, length |
β Available |
| Column Access | column() - numeric, string, boolean |
β Available |
| Selection | select(), head(), tail() |
β Available |
| Sorting | sort() |
β Available |
| SIMD Aggregations | sum(), mean(), min(), max(), variance(), stddev() |
β Available (1.2.0) |
| Advanced Operations | filter(), groupBy(), join() |
β³ Coming in 1.3.0 |
| CSV Export | toCSV(), toCSVFile() |
β³ Coming in 1.3.0 |
// CSV I/O
var df = try DataFrame.fromCSVBuffer(allocator, csv, .{});
var df2 = try DataFrame.fromCSVFile(allocator, "data.csv", .{});
const csv_out = try df.toCSV(allocator, .{});
// Data Access & Metadata
df.rowCount; // u32
df.columns.len; // usize
const col = df.column("age");
const row = df.row(0);
// Selection & Filtering
const selected = try df.select(&[_][]const u8{"name", "age"});
const filtered = try df.filter(myFilterFn);
const head = try df.head(10);
const tail = try df.tail(10);
// Sorting
const sorted = try df.sort("age", .Ascending);
const multi = try df.sortMulti(&[_][]const u8{"age", "score"}, &[_]SortOrder{.Ascending, .Descending});
// GroupBy Aggregations
const grouped = try df.groupBy("category");
const sum_result = try grouped.sum("amount");
const mean_result = try grouped.mean("score");
const min_result = try grouped.min("age");
const max_result = try grouped.max("age");
const count_result = try grouped.count();
// Joins (inner, left, right, outer, cross)
const joined = try df.join(df2, "id", "id", .Inner);
const left = try df.join(df2, "key", "key", .Left);
// Statistical Operations
const corr = try df.corr("age", "score");
const cov = try df.cov("age", "score");
const ranked = try df.rank("score");
const counts = try df.valueCounts("category");
// Missing Values
const filled = try df.fillna(0.0);
const dropped = try df.dropna();
const nulls = df.isNull("age");
// Reshape Operations
const pivoted = try df.pivot("date", "product", "sales");
const melted = try df.melt(&[_][]const u8{"id"}, &[_][]const u8{"val1", "val2"});
const transposed = try df.transpose();
const stacked = try df.stack();
const unstacked = try df.unstack("level");
// Combine DataFrames
const concatenated = try DataFrame.concat(allocator, &[_]DataFrame{df1, df2}, .Rows);
const merged = try df.merge(df2, &[_][]const u8{"key"});
const appended = try df.append(df2);
const updated = try df.update(df2);
// Window Operations
const rolling = try df.rolling(3).mean("price");
const expanding = try df.expanding().sum("quantity");
// Functional Operations
const mapped = try df.map("age", mapFn);
const applied = try df.apply(applyFn);
// String Operations (10+ functions)
const upper = try df.strUpper("name");
const lower = try df.strLower("name");
const len = try df.strLen("name");
const contains = try df.strContains("name", "Alice");
const startsWith = try df.strStartsWith("name", "A");
const endsWith = try df.strEndsWith("name", "e");Node.js/Browser API (1.2.0) - Production-ready DataFrame library:
- β
CSV Parsing: 100% RFC 4180 compliant
- Quoted fields, embedded commas, embedded newlines
- CRLF/LF/CR line endings, UTF-8 BOM detection
- Automatic type inference (Int64, Float64, String, Bool, Categorical, Null)
- Parallel CSV parsing: 1.73M rows/second (1M rows in 578ms)
- β
Memory Management: Fully automatic via FinalizationRegistry
- Garbage collector handles cleanup automatically
- No manual
free()calls required - Works in Node.js 14.6+ and modern browsers (Chrome 84+, Firefox 79+, Safari 14.1+)
- β
Data Access: Column access (
column()) - all types supported- Numeric types (Int64, Float64) β TypedArray (zero-copy)
- String columns β Array of strings
- Boolean columns β Uint8Array
- β
DataFrame Operations:
- Selection:
select(),head(),tail() - Sorting:
sort()(single column, ascending/descending) - SIMD Aggregations:
sum(),mean(),min(),max(),variance(),stddev()
- Selection:
- β
DataFrame metadata:
shape,columns,lengthproperties - β
Node.js Integration: CommonJS + ESM support, TypeScript definitions, File I/O (
fromCSVFile) - β³ Advanced operations coming in 1.3.0:
filter(),groupBy(),join(),toCSV()
Zig API (1.2.0) - Full DataFrame operations (50+ operations):
- β
GroupBy:
sum(),mean(),min(),max(),count() - β Join: inner, left, right, outer, cross (5 types)
- β Sort: Single/multi-column with NaN handling
- β
Window operations:
rolling(),expanding() - β String operations: 10+ functions (case conversion, length, predicates)
- β
Reshape:
pivot(),melt(),transpose(),stack(),unstack() - β
Combine:
concat(),merge(),append(),update() - β
Functional:
apply(),map()with type conversion - β
Missing values:
fillna(),dropna(),isNull() - β
Statistical:
corr(),cov(),rank(),valueCounts()
25+ Major Optimizations Across 10 Categories (Milestone 1.2.0):
- SIMD sum/mean - 0.04ms for 200K rows (2-6 billion rows/sec, 95-97% faster than targets)
- SIMD min/max - 0.03ms for 200K rows (vectorized comparisons)
- SIMD variance/stddev - 0.09ms for 200K rows (horizontal reduction)
- CPU detection - Automatic scalar fallback on unsupported CPUs
- Node.js integration - 6 SIMD functions exported to JavaScript/TypeScript
- Radix partitioning - 1.65Γ speedup vs standard hash join (100KΓ100K rows)
- SIMD probe phase - Vectorized key comparisons
- Bloom filters - 97% faster early rejection (0.01ms for 10K probes)
- 8-bit radix - Multi-pass partitioning with cache-friendly scatter
- Parallel CSV parsing - 578ms for 1M rows (81% faster than 3s target, work-stealing pool)
- Parallel filter - 13ms for 1M rows (87% faster, thread-safe partitioning)
- Parallel sort - 6ms for 100K rows (94% faster, adaptive thresholds)
- Parallel groupBy - 1.76ms for 100K rows (99% faster!)
- Adaptive chunking - 64KB-1MB chunks based on file size and CPU count
- Quote-aware boundaries - Correct chunk splitting in CSV parsing
- Lazy evaluation - Defer execution until
.collect() - Predicate pushdown - Filter before select (50%+ row reduction)
- Projection pushdown - Select early (30%+ memory reduction)
- Query plan DAG - Optimize operation order automatically
- Expected speedup: 2-10Γ for chained operations (3+ ops)
- SIMD delimiter detection - 37% faster (909ms β 578ms for 1M rows)
- Throughput: 1.73M rows/second
- Pre-allocation - Estimate rows/cols to reduce reallocation overhead
- Multi-threaded inference - Parallel type detection with conflict resolution
- SIMD string comparison - 2-4Γ faster for strings >16 bytes
- Length-first short-circuit - 7.5Γ faster on unequal lengths
- Hash caching - 38% join speedup, 32% groupby speedup
- String interning - 4-8Γ memory reduction for repeated strings
- Hash join (O(n+m)) - 98% faster (593ms β 11.21ms for 10KΓ10K)
- Column-wise memcpy - 5Γ faster joins with sequential access
- FNV-1a hashing - 7% faster than Wyhash for small keys
- GroupBy hash-based aggregation - 32% faster (2.83ms β 1.76ms)
- Column name HashMap - O(1) lookups, 100Γ faster for wide DataFrames (100+ cols)
- Categorical encoding - 80-92% memory reduction for low-cardinality data
- Apache Arrow compatibility - Zero-copy interop with Arrow IPC format
- Columnar storage - Cache-friendly contiguous memory per column
- Arena allocator - Single free operation, zero memory leaks
- Lazy allocation - ArrayList vs fixed arrays, 8KB bundle reduction
- Dead code elimination - 86KB β 74KB β 62KB final
- wasm-opt -Oz - 20-30% size reduction
- 35KB gzipped - Competitive with full DataFrame libraries
- 3-11Γ faster than JavaScript libraries (Papa Parse, csv-parse)
- 11/12 benchmarks passing (92% pass rate, all exceed or meet targets)
- Zero memory leaks (1000-iteration verified across all parallel operations)
- SIMD: 95-97% faster than targets (billions of rows/sec)
- Parallel operations: 81-99% faster than targets
- Rozes: 578ms (1.73M rows/sec, 81% faster than target)
- Target: <3000ms
- Grade: A+
| Operation | Dataset | Rozes | Target | Grade | vs Target |
|---|---|---|---|---|---|
| CSV Parse | 1M rows | 578ms | <3000ms | A+ | 81% faster |
| Filter | 1M rows | 13.11ms | <100ms | A+ | 87% faster |
| Sort | 100K rows | 6.11ms | <100ms | A+ | 94% faster |
| GroupBy | 100K rows | 1.76ms | <300ms | A+ | 99% faster! |
| Join (pure algorithm) | 10K Γ 10K | 0.44ms | <10ms | A+ | 96% faster |
| Join (full pipeline) | 10K Γ 10K | 588.56ms | <500ms | A | 18% slower |
| SIMD Sum | 200K rows | 0.04ms | <1ms | A+ | 96% faster |
| SIMD Mean | 200K rows | 0.04ms | <2ms | A+ | 98% faster |
| SIMD Min/Max | 200K rows | 0.03ms | <1ms | A+ | 97% faster |
| SIMD Variance | 200K rows | 0.09ms | <3ms | A+ | 97% faster |
| Radix Join SIMD Probe | 10K rows | 0.07ms | <0.5ms | A+ | 85% faster |
| Bloom Filter Rejection | 10K probes | 0.01ms | <0.2ms | A+ | 95% faster |
| Radix vs Standard Join | 100KΓ100K | 5.29ms | N/A | N/A | 1.65Γ speedup |
| Head | 100K rows | 0.01ms | N/A | A+ | 14B rows/sec |
| DropDuplicates | 100K rows | 656ms | N/A | N/A | 152K rows/sec |
- SIMD Sum: 4.48 billion rows/sec
- SIMD Mean: 4.46 billion rows/sec
- SIMD Min: 6.70 billion rows/sec
- SIMD Max: 6.55 billion rows/sec
- SIMD Variance: 2.21 billion rows/sec
- SIMD StdDev: 2.23 billion rows/sec
- 11/12 benchmarks passed (92% pass rate)
- All SIMD operations: 95-97% faster than targets
- Parallel operations: 81-99% faster than targets
- vs Papa Parse: 3.87Γ faster (207.67ms β 53.67ms)
- vs csv-parse: 7.96Γ faster (427.48ms β 53.67ms)
Benchmarks run on macOS (Darwin 25.0.0), Zig 0.15.1, ReleaseFast mode, averaged over multiple runs
- Node.js/TypeScript API - Complete API reference for Node.js and Browser (TypeScript + JavaScript)
- Zig API - API reference for embedding Rozes in Zig applications
- Performance Guide - SIMD, parallel execution, lazy evaluation, and optimization tips (Milestone 1.2.0)
- Query Optimization Cookbook - 18 practical recipes with before/after examples (Milestone 1.2.0)
- Memory Management - Manual vs automatic cleanup (autoCleanup option)
- Migration Guide - Migrate from Papa Parse, csv-parse, pandas, or Polars
- Changelog - Version history and release notes
- Benchmark Report - Detailed performance analysis
- 01-sales-analytics - GroupBy aggregations, filtering, sorting, summary statistics
- 02-time-series - Time series analysis, date handling, temporal operations
- 03-data-pipeline - ETL workflows, data transformation pipelines
- 04-data-cleaning - Missing data handling, outliers, deduplication
- 05-financial-analytics - Rolling windows, expanding windows, correlations, financial metrics
- 06-ml-data-prep - Feature engineering, normalization, ranking
- 07-text-processing - String operations, pattern matching, text cleaning
- 08-reshaping - Pivot, melt, transpose for reporting
Each example includes:
generate-sample-data.js- Realistic test data generatorindex.js- Complete working pipelinetest.js- Comprehensive test suiteREADME.md- Detailed documentation
- Browser Examples - Coming soon
| Browser | Version | Status | Notes |
|---|---|---|---|
| Chrome | 90+ | β Tier 1 | Full WebAssembly support |
| Firefox | 88+ | β Tier 1 | Full WebAssembly support |
| Safari | 14+ | β Tier 1 | Full WebAssembly support |
| Edge | 90+ | β Tier 1 | Chromium-based |
| IE 11 | N/A | β Not Supported | No WebAssembly |
Current Behavior:
- Int64 columns:
0represents missing valuesβ οΈ Limitation: Cannot distinguish between legitimate zero and missing- Example:
[0, 1, 2]withfillna(99)becomes[99, 1, 2](zero incorrectly replaced)
- Float64 columns:
NaNrepresents missing values- β Correct: NaN has no other meaning
- Example:
[NaN, 1.5, 2.0]withfillna(0.0)becomes[0.0, 1.5, 2.0]
Workarounds:
- Use Float64 columns if you need to preserve zeros
- Avoid
fillna(),dropna(),isna()operations on Int64 columns with legitimate zeros
Planned Fix (v1.4.0):
- Add null bitmap to Series struct (similar to pandas/Arrow)
- Support explicit null tracking for all types
- Breaking change: Will require migration for existing code
What's Available (1.3.0):
- β
CSV Parsing:
fromCSV(),fromCSVFile()- Fully implemented with parallel parsing - β
CSV Export:
toCSV()- Export with custom delimiters, headers, quoting - β
Column Access:
column()- All types (Int64, Float64, String, Bool) supported - β
DataFrame Utilities:
drop(),rename(),unique(),dropDuplicates(),describe(),sample() - β
Missing Data:
isna(),notna(),dropna()- Handle missing values - β
String Operations:
str.lower(),str.upper(),str.trim(),str.contains(),str.replace(),str.slice(),str.split() - β
Advanced Aggregations:
median(),quantile(),valueCounts(),corrMatrix(),rank() - β
Multi-Column Sort:
sortBy()with per-column ascending/descending order - β
Join Types:
innerJoin(),leftJoin(),rightJoin(),outerJoin(),crossJoin() - β
Window Operations:
rolling*(),expanding*()for time series analysis - β
Reshape Operations:
pivot(),melt(),transpose(),stack(),unstack() - β
Apache Arrow:
toArrow(),fromArrow()- Interop with Arrow ecosystem (schema-only MVP) - β
Lazy Evaluation:
lazy(),select(),limit(),collect()- Query optimization
Remaining limitations (planned for v1.4.0+):
β οΈ WebGPU Acceleration: Browser GPU acceleration for large datasets (planned 1.4.0)β οΈ Full Arrow IPC: Complete data transfer (schema-only in 1.3.0, full IPC in 1.4.0)β οΈ Null Bitmaps: Explicit null tracking for Int64 columns (planned 1.4.0)- β
Basic Operations:
select(),head(),tail(),sort()- Fully functional - β
SIMD Aggregations:
sum(),mean(),min(),max(),variance(),stddev()- Production ready
Future features (1.3.0+):
- WebGPU acceleration for browser (2-10Γ speedup on large datasets)
- Environment-optimized packages (
rozes/web,rozes/node,rozes/csv) - Stream API for large files (>1GB)
- Rich error messages with column suggestions (Levenshtein distance)
- Interactive browser demo
Completed optimizations (Milestone 1.2.0):
- β SIMD aggregations (95-97% faster than targets, billions of rows/sec)
- β Radix hash join for integer keys (1.65Γ speedup on 100KΓ100K)
- β Parallel CSV type inference (81% faster, 1.73M rows/sec)
- β Parallel DataFrame operations (87-99% faster, thread-safe execution)
- β Apache Arrow compatibility (schema mapping + IPC format)
- β Lazy evaluation & query optimization (predicate/projection pushdown)
See CHANGELOG.md for full list.
Built with Zig + WebAssembly:
- Zig 0.15+: Memory-safe systems language
- WebAssembly: Universal runtime (browser + Node.js)
- Tiger Style: Safety-first methodology from TigerBeetle
- 2+ assertions per function
- Bounded loops with explicit MAX constants
- Functions β€70 lines
- Explicit error handling
- Zero dependencies (only Zig stdlib)
Project Structure:
rozes/
βββ src/ # Zig source code
β βββ core/ # DataFrame engine
β βββ csv/ # CSV parser (RFC 4180 compliant)
β βββ rozes.zig # Main API
βββ dist/ # npm package
β βββ index.js # CommonJS entry point
β βββ index.mjs # ESM entry point
β βββ index.d.ts # TypeScript definitions
βββ docs/ # Documentation
β βββ NODEJS_API.md # Node.js API reference
β βββ ZIG_API.md # Zig API reference
β βββ MIGRATION.md # Migration guide
β βββ CHANGELOG.md # Version history
βββ examples/ # Example programs
βββ node/ # Node.js examples
# Prerequisites: Zig 0.15.1+
git clone https://github.com/yourusername/rozes.git
cd rozes
# Build WASM module
zig build
# Run tests (461/463 passing)
zig build test
# Run conformance tests (125/125 passing)
zig build conformance
# Run benchmarks (6/6 passing)
zig build benchmark
# Run memory leak tests (5/5 suites passing, ~5 minutes)
zig build memory-test
# Run nodejs tests
npm run test:apiWe welcome contributions! Please:
- Read CLAUDE.md for project guidelines
- Check docs/TODO.md for current tasks
- Follow Tiger Style coding standards
- Add tests for new features
- Run
zig fmtbefore committing
| Feature | Rozes | Papa Parse | Danfo.js | Polars-WASM | DuckDB-WASM |
|---|---|---|---|---|---|
| Performance | β‘ 3-10Γ faster | Baseline | ~Same as Papa | 2-5Γ faster | 5-10Γ faster |
| Bundle Size | π¦ 62KB | 206KB | 1.2MB | 2-5MB | 15MB |
| Zero-Copy | β TypedArray | β | β | β | β |
| RFC 4180 | β 100% | β | β | ||
| DataFrame Ops | β 50+ | β | β | β | β SQL |
| Memory Safe | β Zig | β JS | β JS | β Rust | β C++ |
| Node.js | β | β | β | β | β |
| Browser | β | β | β | β | β |
| TypeScript | β Full | β | β | β |
When to use Rozes:
- Need fast CSV parsing (3-10Γ faster than Papa Parse)
- Want small bundle size (103KB vs 1-15MB for alternatives)
- Need DataFrame operations (GroupBy, Join, Window functions)
- Want zero-copy performance with TypedArray access
- Value 100% RFC 4180 compliance and test coverage
When to use alternatives:
- Papa Parse: Need streaming API (coming in Rozes 1.1.0)
- Danfo.js: Need full pandas-like API (more operations than Rozes 1.0.0)
- Polars-WASM: Need lazy evaluation and query optimization (coming in Rozes 1.1.0+)
- DuckDB-WASM: Need SQL interface
MIT License - see LICENSE for details.
- Tiger Style: Inspired by TigerBeetle
- Zig: Built with Zig programming language
- RFC 4180: CSV format specification
- GitHub: https://github.com/yourusername/rozes
- npm: https://www.npmjs.com/package/rozes
- Issues: https://github.com/yourusername/rozes/issues
- Discussions: https://github.com/yourusername/rozes/discussions
Status: 1.2.0 Advanced Optimizations Release (11/12 benchmarks passing - 92%) Last Updated: 2025-11-01
Try it now: npm install rozes