excelsior
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
pyo3andmaturin.
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)
| 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)
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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logSecurity 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.
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 logA 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.