xlsxturbo
High-performance Excel writer with automatic type detection. Written in Rust, usable from Python.
xlsxturbo exports pandas and polars DataFrames and CSV files to .xlsx. It uses Rust for
the hot path and keeps the Python API small enough to drop straight into a script, a
report job, or a batch pipeline. Roughly 7-9x faster than pandas + openpyxl on the
reference benchmarks, with the Excel features those exports usually need — tables,
conditional formatting, charts, data validation, images — available as focused keyword
arguments rather than a workbook object model.
Full documentation · Capability matrix · Changelog
Install
pip install xlsxturbo
Wheels are published for Python 3.9+ on Linux, Windows, and macOS. There are no runtime dependencies beyond the interpreter.
Export a DataFrame
import pandas as pd
from xlsxturbo import df_to_xlsx
df = pd.DataFrame({
"product": ["Widget", "Gadget", "Gizmo"],
"price": [19.99, 34.50, 8.75],
"in_stock": [True, False, True],
"restock": pd.to_datetime(["2024-03-01", "2024-03-15", "2024-04-01"]),
})
df_to_xlsx(df, "products.xlsx", table_style="Medium2", autofit=True)
Types carry across without configuration: numbers stay numbers, booleans become Excel booleans, and dates and datetimes become real Excel date values with a display format attached. polars DataFrames work the same way — neither library is a dependency.
Convert a CSV
from xlsxturbo import csv_to_xlsx
csv_to_xlsx("sales.csv", "sales.xlsx")
Types are detected from the file's text. There is also a command-line tool for the same job, though it is not included in the PyPI wheel — it has to be built from source. See CSV conversion.
What it can do
- DataFrame and CSV export — pandas, polars, and CSV in,
.xlsxout - Excel tables with 61 built-in styles, autofilter, and banded rows
- Formatting — header and per-column styles, number formats, per-side borders, alignment, wrapping, auto-fit and explicit column widths, row heights, merged ranges, rich text
- Conditional formatting — colour scales, data bars, icon sets
- Formulas — calculated columns and workbook-level defined names
- Native Excel charts and in-cell sparklines, both editable in Excel
- Data validation — dropdowns, numeric ranges, text-length constraints
- Cell-level extras — arbitrary cell writes, hyperlinks, comments, checkboxes, images, textboxes
- Multi-sheet workbooks with per-sheet option overrides
- Constant memory mode for very large exports, and optional parallel CSV parsing
- Atomic writes — a failed export never truncates the file already at that path
The capability matrix is the authoritative list: it is generated from the source and shows which options each function accepts, which are overridable per sheet, and which survive constant-memory mode.
Performance
On 100,000 rows x 50 columns of mixed types, xlsxturbo is about 4.6x faster than polars,
7x faster than pandas + xlsxwriter, and 9.3x faster than pandas + openpyxl. Absolute
timings are system-specific; the ratios are stable. Full tables, test systems, and
methodology are on the
performance page, and both benchmark
suites live in benchmarks/ so you can measure your own hardware.
Known limitations
- Write-only. xlsxturbo creates workbooks; it cannot open or modify an existing one.
- Timezone-aware datetimes are written as their local wall-clock value — Excel has no timezone concept, so the UTC offset is not preserved.
- Integers above 2^53 are written as text to avoid silent precision loss.
- Durations (
Timedelta/timedelta64) are written as text; Excel has no duration type.
The compatibility page has the complete list with the workaround for each.
Project status
- Production-ready for the documented DataFrame and CSV export workflows.
- Tested in CI on Python 3.9 and 3.12 across Linux, Windows, and macOS, plus Python 3.14 on Linux.
- SemVer: breaking API changes require a major version bump.
- Advanced Excel features are exposed through focused parameters rather than a full workbook object model. That is a deliberate scope boundary, not a gap to be filled.
Contributing
Setup takes about five minutes and is described in CONTRIBUTING.md, along with the exact lint, type, and test commands CI runs. Security reports go through the process in SECURITY.md.
License
MIT
Release files for xlsxturbo 0.21.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xlsxturbo-0.21.0.tar.gz | 395.2 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| xlsxturbo-0.21.0-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| xlsxturbo-0.21.0-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| xlsxturbo-0.21.0-cp39-abi3-manylinux_2_28_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| xlsxturbo-0.21.0-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| xlsxturbo-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 6.1 MB
Release files / xlsxturbo-0.21.0.tar.gz
| Download URL | xlsxturbo-0.21.0.tar.gz |
|---|---|
| Size | 395.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8f7402c56e65a4c1f1b2823e30d720c16a9c059e23e6ca25da3f4b16ee978c58
|
|
BLAKE2b-256 checksum How to use checksums |
ca6f514ead6f17c5aa75d001e5c34c6d686542008dd070c4706aa7147cfd2d3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / xlsxturbo-0.21.0-cp39-abi3-win_amd64.whl
| Download URL | xlsxturbo-0.21.0-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
47c9ae15cb1b2d4faa60e65163fd1bb3c72939c579cc1954112662a0dd6bce03
|
|
BLAKE2b-256 checksum How to use checksums |
4ca505a459ede0fb3b1546782ca5d83165d56fa2a576f448f8f56e26ddd7dedd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / xlsxturbo-0.21.0-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | xlsxturbo-0.21.0-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
781c4d985f87484207668cb7f4bce06598f32cc8b6980351f6393d1b490e62dd
|
|
BLAKE2b-256 checksum How to use checksums |
ee56cdc543979602eb856044ac96f9ae3dd6269b52745e921f6581f7dce98059
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / xlsxturbo-0.21.0-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | xlsxturbo-0.21.0-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
25a66574766886cd5990be897aefdab20945aa6b8562e0081a180363aee70061
|
|
BLAKE2b-256 checksum How to use checksums |
d19ac20d43bc9519192d73b44e59a9d062d2ed65f115b7c503c29acb39e37f86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / xlsxturbo-0.21.0-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | xlsxturbo-0.21.0-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
42a4f8ef5075c07c57955033f11772dc8e80c8ed1e8cce43bafc79f9f3e57571
|
|
BLAKE2b-256 checksum How to use checksums |
772c4ac457ef8f95c0cd568f87598ad28c7ff2e5edf120346dbfa344af341059
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / xlsxturbo-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | xlsxturbo-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
c40b6a529c63718c577aa84583533f94ba4af439b8dbee9bce79e26a3c39b930
|
|
BLAKE2b-256 checksum How to use checksums |
5e1ebaf047b48345eeca88176f858dc0c7ac7227427ff538e25d641b2fd7b9d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency log