Skip to main content

excelsior

Rust Build maturin wheels

A project for fast and predictable .xlsx editing from Rust and Python. It consists of two crates:

  • rust-core – the core library that works directly with spreadsheet XML.
  • python-bindings – Python wrapper built with pyo3 and maturin.

The library supports:

  • opening existing workbooks,
  • creating an empty workbook from scratch,
  • editing cells/tables/styles/column widths,
  • saving changes back to disk without loading the full workbook model.

For detailed usage examples see the usage guide.

Create and write a new XLSX

from excelsior import Editor, create_excel

editor = Editor.create("new.xlsx", "Data")
editor.append_row(["Hello", "42"])
editor.save()

create_excel("empty.xlsx")

CPython 3.10–3.15 is supported. The base package has no Python runtime dependencies. Creation replaces an existing destination and creates missing parent directories.

Optional Polars support

Editor.with_polars(frame, start_cell=None) runs entirely in Python using frame.columns and frame.iter_rows(). It neither imports Polars nor converts through Arrow. Use your existing Polars installation or install excelsior-fast[polars]; there is no upper Polars version pin.

import polars as pl
from excelsior import Editor

editor = Editor.create("report.xlsx")
editor = editor.add_worksheet("Data")
editor.with_polars(pl.DataFrame({"value": [1, 2]}))
editor.save()

The package exposes excelsior.__version__ to identify the loaded build.

Python method contracts in 0.15

Methods returning Editor return an independent snapshot, including unsaved changes. Always keep the result:

editor = editor.add_worksheet("Data")
editor = editor.set_column_width("A", 24)
editor = editor.set_number_format("B:", "0.00")
branch = editor.with_worksheet("Sheet1")  # editor still selects Data

This applies to worksheet operations, styling, merges, column widths, remove_style, and copy. Ignoring their return value leaves the input unchanged. Snapshots share XML and metadata through Arc; writing detaches the affected component. Rust methods explicitly taking &mut self retain Rust's mutating contract.

Methods returning None modify the current editor: set_cell, append_row, append_table_at, and with_polars. save() writes to the file passed to create/open. save(other_path) writes a copy, retaining the original path for subsequent save() calls. Queries last_row_index/last_rows_index return values without editing.

Dataframe types and column formats

with_polars(frame, start_cell=None, *, force_column_formats=True) preserves cell types. Strings such as "00123", "111111119999999", and "=1+1" stay text, including headers. Integers, floats, and decimals become numbers; nulls become empty cells. NaN and infinity are stored as text because Excel has no corresponding numeric values.

By default dataframe dtypes force the number format of each entire destination column, including cells outside the written area and column defaults. Integer columns use 0, floats use 0.###############, strings/categorical/enum use @, and decimals use their declared scale. Dates, datetimes, times, and durations use their corresponding Excel formats; both 1900 and 1904 date systems work. Explicit cell styling and column widths are retained.

editor.with_polars(frame)  # mutate; force formats for all affected columns
editor.with_polars(frame, "B3", force_column_formats=False)  # keep template formats

Disabling forcing preserves template formats while values still retain their explicit types. Excel numeric cells have about 15 significant decimal digits; store identifiers or longer exact numbers in Polars String columns. The fixed float display shows up to 15 fractional digits; use set_number_format after writing when more suitable scientific/precision formatting is needed. Nanosecond temporal precision is limited by Polars iter_rows() conversion to Python datetime values. Nested values are stored as text; object columns use their Python value types.

The legacy string APIs set_cell, append_row, and append_table_at retain numeric/formula inference. Use dataframe String columns to write numeric-looking text through the typed path.

Saving a dataframe across worksheets

from excelsior import Editor

MAX_ROWS = 1_000_000  # must be <= 1_048_575: one Excel row is used by headers
editor = Editor.create(f"out/{name}.xlsx")
for i, offset in enumerate(range(0, df.height, MAX_ROWS), start=1):
    if i > 1:
        editor = editor.add_worksheet(f"Sheet{i}")
    editor.with_polars(df.slice(offset, MAX_ROWS))
editor.save()
# editor.save("out/another.xlsx") writes a copy; the original file is unchanged.

Saving after every sheet rewrites the entire ZIP each time. Save once after the loop unless intermediate on-disk checkpoints are needed. Both save() and save(path) replace the destination atomically using a temporary file beside it.

Streaming creation with bounded memory (0.15)

Use WorkbookWriter for new files whose rows only move forward. It spools the current sheet as typed records on disk and writes each closed sheet directly into ZIP. Worksheet XML is not retained in memory. Temporary disk space is required; the destination is replaced atomically when saving succeeds.

from excelsior import WorkbookWriter

with WorkbookWriter("out/report.xlsx", "Sheet1", compression_level=3) as wb:
    for i, offset in enumerate(range(0, df.height, 1_000_000), start=1):
        if i > 1:
            wb.add_worksheet(f"Sheet{i}")  # mutates, returns None
        wb.with_polars(df.slice(offset, 1_000_000))

All writer operations mutate and return None; factories return a new writer. The context manager saves on successful exit and discards temporary files on an exception. save()/close() finalizes the writer; subsequent writes are rejected. Repeated save(other_path) copies the completed archive without changing the original destination. Closed sheets cannot be revisited, edited, renamed, or copied; use Editor for templates, random edits, or snapshots.

with_polars appends headers and rows after the previous rows by default. Explicit start cells must follow previous rows. Column formats and widths can be set on the active sheet before it closes. force_column_formats=False preserves its configured formats. Python-only adaptation is shared with Editor; Polars and Arrow are not imported by the package.

write_rows(iterator) and append_row(values) preserve Python value types: strings remain text, including numeric-looking identifiers and formula-looking strings. set_number_format("A:C", "0.00") and set_column_width("A:C", 24) affect the current sheet's entire columns. A failing row iterator rolls back that write call; earlier rows remain usable.

ZIP compression

editor.save()                       # compression_level=3 by default
editor.save(compression_level=0)    # store every ZIP part without compression
editor.save("copy.xlsx", compression_level=9)

Levels are 0..9; invalid levels fail before changing the destination. Every ZIP part uses the requested level, including unchanged parts of a template; the former small-XML threshold is removed. Compression may change file size and saving time. On WorkbookWriter choose the level in its constructor, because worksheets are compressed before the final save() call.

Editor snapshots share their XML buffers, caches, dimension metadata, and the disk-backed ZIP source. On Windows the source is copied to a temporary file once when opened, because an open destination prevents atomic replacement; branches share that disk copy. Unix retains the original open file. Each branch has an independent ZIP cursor. Atomic saving by one branch does not replace the source read by the other branches. An open editor can still save if its original path has been removed.

Local before/after measurements and remaining performance limits are recorded in docs/performance-015.md.

Native parallel exports (0.15.2)

Use one multithreading.WorkbookPool for independent files. Rust owns the bounded job queue and file worker threads. Dataframe iteration uses the Python adapter; XML generation, row spooling, numeric serialization and ZIP compression run in Rust outside the GIL. No Python executor, processes, pickling or mandatory Polars/Arrow dependency is involved.

from excelsior import multithreading as mt

with mt.WorkbookPool(workers=4, compression_level=1,
                     compression_threads=8) as pool:
    for name, df in files_list:
        pool.write_polars(f"out/{name}.xlsx", df, max_rows=1_000_000)

print("Done")  # all files have finished; export failures raise before this line

write_polars splits a dataframe into sheets, repeats headers and writes an empty dataframe's headers too. max_rows counts data rows, with a maximum of 1,048,575 to leave one header row. Pass sheet_name="Index" to name the first sheet; later sheets are Sheet2, Sheet3, etc., skipping name collisions. It returns an ExportTask: task.result() waits and returns the absolute output path, task.done() checks completion, and task.cancel() cancels a queued job only. Running exports finish normally. force_column_formats=False disables whole-column dtype formats without changing typed cell storage.

For more control, keep the usual workbook syntax with a shared pool:

with mt.WorkbookPool(workers=4) as pool:
    for name, df in files_list:
        with mt.WorkbookWriter(f"out/{name}.xlsx", "Sheet1", pool=pool,
                               compression_level=1, compression_threads=8) as wb:
            for i, offset in enumerate(range(0, max(1, df.height), MAX_ROWS), 1):
                if i > 1:
                    wb.add_worksheet(f"Sheet{i}")
                wb.with_polars(df.slice(offset, MAX_ROWS))

pool.workbook(path, ...) is shorthand for the shared-pool writer and inherits its compression defaults. The inner context records writes and submits one file; the outer context joins every file before returning or raising the first export exception in submission order. wb.wait() waits for just that book. Standalone with mt.WorkbookWriter(path, ...) owns one worker and waits at its own exit; use a shared pool to overlap files. Mutators return None and modify the recorded book. save()/close() submit once; save(other_path) submits under another name and preserves the original. Submitted iterators cannot be replayed to another destination. Repeated save() is harmless.

Commands and dataframe iterators are consumed in background workers after submission. Keep their inputs unchanged until completion. At most workers books run and workers more wait in the native queue; submission blocks when that queue is full, releasing the GIL so workers can progress. Duplicate output paths are rejected within a pool. Do not call submit/wait/close on a pool from one of its own row iterators; this raises instead of deadlocking. Close pools explicitly, normally with with.

Original exception types and tracebacks propagate from workers. Each file is saved atomically; a failed file preserves any existing destination. Successful files remain even if another job fails. If the outer body raises, queued jobs are cancelled, active jobs are joined, and the body's exception is preserved. Each active writer uses disk spooling and bounded native row batches, while the supplied dataframes remain owned by the caller. Recorded commands stay in memory until submission; for large row-wise exports use write_rows(iterator) in one command to keep the recording small. Python conversion still requires the GIL, so more workers do not guarantee more speed.

Parallel ZIP compression (0.15.1)

compression_threads is supported by Editor.save and both WorkbookWriter variants. It defaults to 1. Independent sheets/ZIP members compress concurrently using temporary files; one member's Deflate stream is not split across threads. A one-sheet workbook generally benefits from exporting separate files in parallel. Combining many file and compression workers can oversubscribe CPUs; compare 2 and 8 compression threads for your workload. Atomic saving and cleanup apply on success, error and abort.

The regular WorkbookWriter and Editor also remain usable from a Python ThreadPoolExecutor if the application already owns one. Each thread must own its writer. Editor.create is a classmethod: origin.create(...) creates a new book rather than copying origin or inheriting its sheet name; specify it explicitly. A separate blank.xlsx is unnecessary for export.

Metadata

Release files for excelsior-fast 0.15.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for excelsior-fast 0.15.2
File Size Uploaded Provenance Actions
excelsior_fast-0.15.2.tar.gz 172.1 kB With provenance Details for excelsior_fast-0.15.2.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for excelsior-fast 0.15.2
File Actions
excelsior_fast-0.15.2-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details for excelsior_fast-0.15.2-cp315-cp315-win_amd64.whl
excelsior_fast-0.15.2-cp315-cp315-manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ x86-64 Details for excelsior_fast-0.15.2-cp315-cp315-manylinux_2_28_x86_64.whl
excelsior_fast-0.15.2-cp315-cp315-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64, macOS 10.12+ x86-64, macOS 10.12+ universal2 (ARM64, x86-64) Details for excelsior_fast-0.15.2-cp315-cp315-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
excelsior_fast-0.15.2-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for excelsior_fast-0.15.2-cp314-cp314-win_amd64.whl
excelsior_fast-0.15.2-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details for excelsior_fast-0.15.2-cp314-cp314-manylinux_2_28_x86_64.whl
excelsior_fast-0.15.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64, macOS 10.12+ x86-64, macOS 10.12+ universal2 (ARM64, x86-64) Details for excelsior_fast-0.15.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
excelsior_fast-0.15.2-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for excelsior_fast-0.15.2-cp313-cp313-win_amd64.whl
excelsior_fast-0.15.2-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for excelsior_fast-0.15.2-cp313-cp313-manylinux_2_28_x86_64.whl
excelsior_fast-0.15.2-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64, macOS 10.12+ x86-64, macOS 10.12+ universal2 (ARM64, x86-64) Details for excelsior_fast-0.15.2-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
excelsior_fast-0.15.2-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for excelsior_fast-0.15.2-cp312-cp312-win_amd64.whl
excelsior_fast-0.15.2-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for excelsior_fast-0.15.2-cp312-cp312-manylinux_2_28_x86_64.whl
excelsior_fast-0.15.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.12 CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64, macOS 10.12+ x86-64 Details for excelsior_fast-0.15.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
excelsior_fast-0.15.2-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for excelsior_fast-0.15.2-cp311-cp311-win_amd64.whl
excelsior_fast-0.15.2-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details for excelsior_fast-0.15.2-cp311-cp311-manylinux_2_28_x86_64.whl
excelsior_fast-0.15.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.11 CPython 3.11 macOS 10.12+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64, macOS 10.12+ x86-64 Details for excelsior_fast-0.15.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
excelsior_fast-0.15.2-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for excelsior_fast-0.15.2-cp310-cp310-win_amd64.whl
excelsior_fast-0.15.2-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details for excelsior_fast-0.15.2-cp310-cp310-manylinux_2_28_x86_64.whl
excelsior_fast-0.15.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64, macOS 10.12+ x86-64, macOS 10.12+ universal2 (ARM64, x86-64) Details for excelsior_fast-0.15.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Total release size: 27.0 MB

Release files / excelsior_fast-0.15.2.tar.gz

Download URL excelsior_fast-0.15.2.tar.gz
Size 172.1 kB
Tags Source
SHA-256 checksum
How to use checksums
069e68a4a31588f3d04c35a717859758a67335c434876c42e8b753517c2ad5a3
BLAKE2b-256 checksum
How to use checksums
254e85fe17a399331d204e01eb87842751c205607c9b70009e0c91e27d193044
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp315-cp315-win_amd64.whl

Download URL excelsior_fast-0.15.2-cp315-cp315-win_amd64.whl
Size 1.0 MB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
01cbc2d2ceb1c19fed46a64de719c783ef624a9f2b8fa85e513d0c3ab36e200b
BLAKE2b-256 checksum
How to use checksums
5a753fb9ae2046c2b915301ff136cd3caf8b9a9462d345357191bd4bbd6c13b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp315-cp315-manylinux_2_28_x86_64.whl

Download URL excelsior_fast-0.15.2-cp315-cp315-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.15 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8a24fd2c817008b6fb54afd157f2bb1c2e3975721abe7d0c8773c48a185ac3f5
BLAKE2b-256 checksum
How to use checksums
c6ddd504878d499ada5b951228c38cf38ccd187865c68878f2dd65c2eb1e248b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp315-cp315-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL excelsior_fast-0.15.2-cp315-cp315-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.2 MB
Tags CPython 3.15 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3a69825c820837947a3b51305362aa41c42fc72e4be6e4eabf316380557ed8de
BLAKE2b-256 checksum
How to use checksums
d014734211d8a9fab8783b92678cf282fcd698e7fbe69cbe31dd32d9d202cfe5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp314-cp314-win_amd64.whl

Download URL excelsior_fast-0.15.2-cp314-cp314-win_amd64.whl
Size 1.0 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
b039acf00dd0157caec1cb1130d16c0cd8cbcffa93b91e1eb78fdf5403bcad3c
BLAKE2b-256 checksum
How to use checksums
7ebeae66f8fe18523ea35a70ac7742228ab05bd67a4b7f7bc62b679442458aab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL excelsior_fast-0.15.2-cp314-cp314-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1f6a5a52a5e0f8d63f65117dbd4126d573c3575f273d99a303b057421047c2c6
BLAKE2b-256 checksum
How to use checksums
b39ff92a2ca11f3fd412f64bf67153684bbd216e35042ab0fa85caaa9e78bd99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL excelsior_fast-0.15.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.2 MB
Tags CPython 3.14 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b488f1ae0102ee135645dcc8fd835293cdf665f0b0daf5f5f181105d10e5580b
BLAKE2b-256 checksum
How to use checksums
e10d3ad91f5e3a0da6e17b67034e1f721e816f9f6ffe8f537e5d328f7f0ac13e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp313-cp313-win_amd64.whl

Download URL excelsior_fast-0.15.2-cp313-cp313-win_amd64.whl
Size 1.0 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
e45692e93881962193149450a37b1dc8c5e359a29091b807ddc74ec499e9f4c0
BLAKE2b-256 checksum
How to use checksums
0645b68f64a3b80dd41ff28d9a5b69cb5745460f57d065e883157a459cbd35a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL excelsior_fast-0.15.2-cp313-cp313-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7f6a46739b570709f07e217783a920b3cfbe6d93e23e0d594fcdbbd20d409c74
BLAKE2b-256 checksum
How to use checksums
d4b304918b5bfd68238d6068edd3d96ac0d239bf918c790ab49a3c20dc5bcd71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL excelsior_fast-0.15.2-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.2 MB
Tags CPython 3.13 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
73303660d33517e4c77fe17d0fe28a1425a0cfc8819148ededef00853a5d28b5
BLAKE2b-256 checksum
How to use checksums
48e2eca184e7d8b0ad837b0b0091646d01b02ea9a2cc5015787977118e069206
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp312-cp312-win_amd64.whl

Download URL excelsior_fast-0.15.2-cp312-cp312-win_amd64.whl
Size 1.0 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
9bf7db9193d563c2bced11dc2bbf4221f98f717137c1bcc894db9ceeb767e5fb
BLAKE2b-256 checksum
How to use checksums
b0d7a0c33dce1c8af010e229798053725e4d9a5fbbd0a4dcc639edad49322738
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL excelsior_fast-0.15.2-cp312-cp312-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f03d9d1393f6e4ad629c7c16511913eb82ed368e3e249a4297725a0700cd0d53
BLAKE2b-256 checksum
How to use checksums
c0ed57513626ddd8a0a73f782705cf6a8b19add913720da20a21eb57376b2d7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL excelsior_fast-0.15.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.2 MB
Tags CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ccdc45387b9a1bc0f99d0b3c3829bb9f20b158bf0a31a8ed99218caa2eb3d4dd
BLAKE2b-256 checksum
How to use checksums
5421bad040f21dfffb0c2cc79594791f6598ac6573316d3f7013819678caa289
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp311-cp311-win_amd64.whl

Download URL excelsior_fast-0.15.2-cp311-cp311-win_amd64.whl
Size 1.0 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
8c55338defe0bd2f284b0382f8ff26cdcd716f0387286c78eddbd11039642368
BLAKE2b-256 checksum
How to use checksums
41d9aea598a411b192f9718a3a0ce68d8e69a45fcebaecdc39e1766ef64c642d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL excelsior_fast-0.15.2-cp311-cp311-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
491a1d239e6638e8d218b3fc24151ef1aaf9793bddbd3fbb7a690554e7efdf32
BLAKE2b-256 checksum
How to use checksums
0a10cd1187fa9f81eb585ddf0e0ef3e8a30182fe2743d0509475d40f3dca6a63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL excelsior_fast-0.15.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.2 MB
Tags CPython 3.11 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1304093d55ba82ad4ae69dac5394cf76a70aafa9b28d3bb3a27b373c2a8f07ad
BLAKE2b-256 checksum
How to use checksums
da17351479a13fe4fce1bf5e828d9d92c5fd13df20fb33cfa9a68083799d86c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp310-cp310-win_amd64.whl

Download URL excelsior_fast-0.15.2-cp310-cp310-win_amd64.whl
Size 1.0 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
3e97a327c753e0075fc570cc6a6f975e86c3aaf35320b9c83fdfcc5d942d488b
BLAKE2b-256 checksum
How to use checksums
00df1ccd87f966caf9f9d3ef6ce43cded615b1ca41edabce939961ec0ed1ecf9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL excelsior_fast-0.15.2-cp310-cp310-manylinux_2_28_x86_64.whl
Size 1.2 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d2e1411884e034cc74d4249f422d6c7e75744fdd1d00bf2c0f9a829c030b5222
BLAKE2b-256 checksum
How to use checksums
ece59470b02ba4d84ce42c37ebf18ba6cc132998e65baaa49366157dea97f1b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Release files / excelsior_fast-0.15.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL excelsior_fast-0.15.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 2.2 MB
Tags CPython 3.10 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b73310fcc0c1a9fb1f17a5557228cdbf2dbd86e3946b3ccb6e68fc35221347d7
BLAKE2b-256 checksum
How to use checksums
9c3c20f2aec5f484717036aa421b90190a1ae1dc002808df0d00b019b665d74b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 7, 2026.

Transparency log

Security for excelsior-fast 0.15.2

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.

Full provenance

All 19 files in this release have been uploaded with provenance metadata.

Select from 19 files

Attestation for excelsior_fast-0.15.2.tar.gz

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 Nov 7, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page