# typed-xlsx > Type-safe Excel (.xlsx) reports for TypeScript, for any report built from rows and columns. Describe columns once against your row type and typed-xlsx writes values, number formats and styles. Live Excel formulas, summary rows, native Excel tables, charts and pivot tables are opt-in, so a plain read-only export needs none of them. The same schema grows from a three-column export to a styled report, and exports buffered with createWorkbook() or streamed in batches with createWorkbookStream() for millions of rows across sheets. Zero runtime dependencies; runs on Node.js, Bun, Deno and edge runtimes. It writes .xlsx files and does not read them. ## Documentation Sets - [typed-xlsx](https://typed-xlsx.vercel.app/llms-full.txt) ## Docs - [Introduction](https://typed-xlsx.vercel.app/raw/getting-started/introduction.md): typed-xlsx turns a typed schema into polished XLSX reports, from one row to a million, buffered or streamed, with its own OOXML and ZIP engine. - [Installation](https://typed-xlsx.vercel.app/raw/getting-started/installation.md): Install typed-xlsx, the three entry points you will use, and which runtimes it supports. - [Quick Start](https://typed-xlsx.vercel.app/raw/getting-started/quick-start.md): Build an invoice report with formula columns, a totals row and status badges, then export it buffered and streamed from the same schema. - [Comparison](https://typed-xlsx.vercel.app/raw/getting-started/comparison.md): How typed-xlsx differs from SheetJS and ExcelJS, and when each one is the better choice. - [Schema Modes](https://typed-xlsx.vercel.app/raw/core-concepts/schema-modes.md): Report mode writes a laid-out range with titles and summary rows; excel-table mode writes a native Excel table with filters and a totals row. How to choose. - [Row Model](https://typed-xlsx.vercel.app/raw/core-concepts/row-model.md): How one input row becomes several worksheet rows, and how refs.column(), row.series(), expansion and summaries behave on expanded reports. - [Schema Context](https://typed-xlsx.vercel.app/raw/core-concepts/schema-context.md): Pass export-time inputs such as regions, locale or feature flags into a schema, and use them in columns, formulas, styles and labels. - [Execution Model](https://typed-xlsx.vercel.app/raw/core-concepts/execution-model.md): createWorkbook() builds from rows in memory; createWorkbookStream() commits batches to a temporary spool. What each one holds in memory and when to use it. - [Defining Columns](https://typed-xlsx.vercel.app/raw/columns/defining-columns.md): Column IDs, typed accessors, transforms, default values, widths, conditional columns, and the full list of column options. - [Column Groups](https://typed-xlsx.vercel.app/raw/columns/column-groups.md): Use .group() for structural scopes, grouped headers, and structural formula aggregation. - [Dynamic Columns](https://typed-xlsx.vercel.app/raw/columns/dynamic-columns.md): Use .dynamic() to generate runtime-driven columns from schema context. - [Column Selection](https://typed-xlsx.vercel.app/raw/columns/column-selection.md): Restricting which columns appear in a given export using include and exclude lists. - [Summary Rows](https://typed-xlsx.vercel.app/raw/columns/summary-rows.md): Add total, average and custom rows below a report table, as live Excel formulas or values computed in JavaScript. - [Data Validation](https://typed-xlsx.vercel.app/raw/columns/data-validation.md): Add native Excel dropdowns, prompts, blocking errors, and formula-based validation rules. - [Hyperlinks](https://typed-xlsx.vercel.app/raw/columns/hyperlinks.md): Add native Excel hyperlinks without changing the rendered cell value. - [Sparklines](https://typed-xlsx.vercel.app/raw/columns/sparklines.md): Add native Excel sparkline columns from typed source columns, groups, or dynamic scopes. - [Images](https://typed-xlsx.vercel.app/raw/columns/images.md): Add embedded worksheet images or URL-backed Excel IMAGE formulas. - [Badges and Checkboxes](https://typed-xlsx.vercel.app/raw/columns/badges-and-checkboxes.md): Render typed status badges and native Excel checkbox cells from schema columns. - [Themes](https://typed-xlsx.vercel.app/raw/styling/themes.md): Package a visual system into theme slots, apply it to a schema or a table, and know which style wins when layers overlap. - [Cell Styles](https://typed-xlsx.vercel.app/raw/styling/cell-styles.md): Apply stable export-time CellStyle objects to data cells, headers, and shared style defaults. - [Dynamic Styles](https://typed-xlsx.vercel.app/raw/styling/dynamic-styles.md): Compute export-time styles from the source row when styling depends on known data. - [Conditional Styles](https://typed-xlsx.vercel.app/raw/styling/conditional-styles.md): Apply native Excel conditional formatting with the same formula DSL used by formula columns. - [Formula Columns](https://typed-xlsx.vercel.app/raw/formulas/formula-columns.md): Write Excel formulas with a typed DSL. References are checked by TypeScript, and the file gets real formulas that recalculate in Excel. - [Scope & References](https://typed-xlsx.vercel.app/raw/formulas/scope-and-references.md): Complete reference for the formula DSL, scope rules, predecessor ordering, and report-vs-table output behavior. - [Table Mode](https://typed-xlsx.vercel.app/raw/excel-tables/table-mode.md): [object Object] - [Table Styles](https://typed-xlsx.vercel.app/raw/excel-tables/table-styles.md): Apply native Excel table styles, Light, Medium, and Dark presets, to excel-table mode schemas. - [Totals Row](https://typed-xlsx.vercel.app/raw/excel-tables/totals-row.md): [object Object] - [Charts](https://typed-xlsx.vercel.app/raw/charts/overview.md): Native Excel charts built from the tables you already declare, with column names and value types checked by TypeScript. - [Marks](https://typed-xlsx.vercel.app/raw/charts/marks.md): Bars, lines, areas, scatter plots, pies and doughnuts, with one or many series and dynamic columns. - [Axes and Styling](https://typed-xlsx.vercel.app/raw/charts/axes-and-styling.md): Titles, axes, a secondary axis, legends, colors and data labels. - [Pivot Tables](https://typed-xlsx.vercel.app/raw/charts/pivot-tables.md): Native Excel pivot tables and pivot charts over the tables you declare, with fields and aggregations checked by TypeScript. - [Building Workbooks](https://typed-xlsx.vercel.app/raw/workbook/building-workbooks.md): Compose a workbook from sheets and tables with createWorkbook(), lay out several tables on one sheet, set table defaults, and write the file. - [Sheet Options](https://typed-xlsx.vercel.app/raw/workbook/sheet-options.md): Options for .sheet(name, options), freeze panes, table layout, right-to-left sheets and protection. - [Protection](https://typed-xlsx.vercel.app/raw/workbook/protection.md): Lock a workbook's structure, protect sheets, and choose which cells stay editable or hide their formulas. - [Streaming Intro](https://typed-xlsx.vercel.app/raw/streaming/streaming-intro.md): Open a stream table, commit batches as they arrive, and finalize the workbook, with the same schemas as the buffered builder. - [Output Targets](https://typed-xlsx.vercel.app/raw/streaming/output-targets.md): [object Object] - [Memory Tuning](https://typed-xlsx.vercel.app/raw/streaming/memory-tuning.md): The streaming options that decide where temporary data lives and how strings are stored, and what each one costs. - [Stream Examples](https://typed-xlsx.vercel.app/raw/streaming/stream-examples.md): S3 upload, progress tracking, parallel tables, and stream finalization patterns. - [Benchmarks](https://typed-xlsx.vercel.app/raw/performance/benchmarks.md): Measured streaming throughput and peak memory for 200k and 500k rows, and a real 202k-row export, comparing typed-xlsx 4.2.0 with the current engine. - [Large Exports](https://typed-xlsx.vercel.app/raw/performance/large-exports.md): How to keep big exports fast and memory-bounded, choose between buffered and streaming, shared and inline strings, and size your batches. - [v0 → v1](https://typed-xlsx.vercel.app/raw/migration/v0-to-v1.md): Every breaking change from v0.x to v1.0 with before/after examples. - [v1 → v2](https://typed-xlsx.vercel.app/raw/migration/v1-to-v2.md): What changed between v1.x and v2.0, how to adopt the new features, and what to watch out for. - [v2 → typed-xlsx](https://typed-xlsx.vercel.app/raw/migration/v2-to-typed-xlsx.md): Package rename from @chronicstone/typed-xlsx to typed-xlsx. - [v4 → v5](https://typed-xlsx.vercel.app/raw/migration/v4-to-v5.md): typed-xlsx 5 changes no runtime behaviour. Its types are stricter, so code that compiled on 4.x can report new errors. What can break and how to fix each one. ## Landing - [Type-safe Excel (XLSX) reports for TypeScript](https://typed-xlsx.vercel.app/raw/index.md): Generate Excel .xlsx reports from typed TypeScript schemas: real formulas, styles, native Excel tables and streamed exports of millions of rows across sheets.