Skip to main content

elixcee

English | 日本語 | 中文

Run, test, and diagnose Excel VBA macros without requiring Microsoft Excel. elixcee is a Rust-powered headless VBA runtime for Linux, macOS, and Windows, with static checks, property-based workbook testing, and structured diagnostics for VBA and workbook-operation failures.

The core engine is written in Rust; Python bindings are provided via pyo3 + maturin.

Name

elixcee = Excel + elixir + C

An elixir that cures your Excel dependency — running at C-level speed via Rust.


Comparison with similar tools

Feature elixcee xlwings LibreOffice UNO openpyxl xlcalculator
Runs VBA macros Yes Yes Yes (subset) No No
Requires Excel No Yes No No No
Requires LibreOffice No No Yes No No
Evaluates formulas Yes Yes Yes No Yes
macOS/Linux/Windows Yes partial Yes Yes Yes
Simple Python API Yes Yes No Yes Yes
Read .xlsx Yes Yes Yes Yes Yes
Read .ods Yes Yes Yes No No
Write .xlsx Yes Yes Yes Yes No
Write .ods Yes Yes Yes No No
Execution speed Rust (native) COM/IPC (slow) IPC (slow) Python

Notes:

  • xlwings requires Excel for Mac on macOS (via AppleScript) and Excel on Windows (via COM). Linux support requires a running Excel instance or a cloud bridge.
  • LibreOffice UNO has a slow startup (≥ 1 s process launch) and a complex API. It runs VBA via LibreOffice's own interpreter, which may not match Excel's behavior exactly.
  • openpyxl reads cached formula values from .xlsx files but does not re-evaluate formulas at runtime.
  • xlcalculator re-evaluates Excel formulas in Python but has no VBA support.
  • elixcee's VBA interpreter covers the subset of VBA used in typical data-processing macros (loops, conditionals, cell read/write, string/math functions, multi-sheet access). Most Excel UI operations such as charting and formatting are unsupported or no-ops. MsgBox is handled specially: depending on the mode, it's printed to stdout, collected in JSON output, or raised as an error.

Installation

pip install elixcee

Development build (from source):

python3 -m venv .venv && source .venv/bin/activate
maturin develop

CLI (Windows / Linux / macOS)

Pre-built binaries are available on the Releases page — no Python required.

Download Platform
elixcee-x86_64-windows.exe Windows x64
elixcee-x86_64-linux Linux x64
elixcee-aarch64-macos macOS Apple Silicon

Usage

elixcee <vba_file>... <MacroName> [OPTIONS]

Arguments:
  <vba_file>...  One or more VBA source files (.vbs / .bas / .txt). With
                 more than one, use Module.Sub to disambiguate same-named
                 Subs/Functions across modules.
  <MacroName>    Name of the Sub to execute (last argument)

Options:
  --file <path>    Load cell data from spreadsheet (.xlsx / .xlsm / .ods)
  --sheet <name>   Active sheet name (default: first sheet in --file)
  --output <path>  Save result cells to spreadsheet (.xlsx / .ods)
  --json           Emit a single JSON object (result or error) instead of plain text

Examples

Run a VBA file and print results to stdout:

elixcee macro.vbs ProcessData

Load data from an Excel file, run a macro, and save the output:

elixcee macro.vbs ProcessData --file input.xlsx --output result.xlsx

Output format — one line per non-empty cell, tab-separated address and value:

A1    Hello
B1    42
A2    3.14

MsgBox calls are printed to stdout.

Multiple files (multi-module projects)

Pass more than one source file to run a project spanning several modules. Sub/Function names are shared project-wide — use Module.Sub to pick a specific one if the bare name exists in more than one module (module names come from Attribute VB_Name if present, else the filename):

elixcee Helpers.bas Main.bas Main.ProcessData

There's no project manifest yet (see docs/agent-contract.md for exactly what is/isn't supported, including how cross-module name collisions are handled).

JSON output (for scripts / AI agents)

Add --json for a single machine-readable JSON object instead of plain text:

elixcee macro.vbs ProcessData --json
{"schema_version":1,"ok":true,"entrypoint":"ProcessData","duration_ms":0.42,"cells":[{"sheet":"sheet1","address":"A1","value":42}],"messages":[]}

Full contract — error codes, exit codes, messages semantics: docs/agent-contract.md.

Static analysis without running the macro

elixcee check inspects one or more .bas files without executing them: parse errors, whether the entrypoint macro exists, undefined Sub/Function calls anywhere in the body, and interactive MsgBox calls. Every positional argument is a file; the entrypoint (if any) is always --entry, never positional — so elixcee check *.bas checks every module in a project without asserting any particular entrypoint.

elixcee check macro.vbs --entry ProcessData --json
{"schema_version":1,"ok":true,"diagnostics":[]}

Workbook snapshot

elixcee snapshot reads a .xlsx/.xlsm/.ods file directly — no VBA execution — and prints every sheet's non-empty cells as Markdown by default, or JSON with --json:

elixcee snapshot Book1.xlsx --json
{"schema_version":1,"ok":true,"file":"Book1.xlsx","sheets":[{"name":"Sheet1","sheet_id":"1","stable_id":"sheet1","cells":[{"address":"A1","value":42}]}]}

stable_id is derived from the file's own sheetId when available (else a positional fallback) — it is not VBA's CodeName property. See docs/agent-contract.md for the full rationale.

Property-based workbook testing

elixcee test-workbook reruns a macro against a starting workbook many times with generated boundary-value inputs (blank, 0, 1, -1, near overflow, empty/short/long strings), checking every run for panics, runtime errors, timeouts, and Excel error values — each case starts from a completely fresh workbook state:

# fixture.toml
name = "order calculation"
workbook = "orders.xlsx"
vba_files = ["Main.bas"]
macro = "Main.Process"
cases = 100
seed = 42

[[inputs]]
range = "Input!B2:B10"
strategy = "boundary_numeric"

[[assertions]]
range = "Result!A1:F100"
rule = "no_excel_errors"
elixcee test-workbook fixture.toml --json

A failing case reports its seed and case index so it can be reproduced exactly: elixcee test-workbook fixture.toml --seed 42 --case 17. Full schema, strategies, and assertion rules: docs/agent-contract.md.

Excel operation diagnostics

elixcee diagnose runs a macro once and explains why Excel would reject it — a missing worksheet, a missing workbook, an out-of-bounds array index, a Copy/Paste shape mismatch, a write to a protected sheet, or a Copy/Paste that conflicts with a merged-cell layout — with evidence, instead of a bare error string:

elixcee diagnose Main.bas --file report.xlsx --json Main.Run
{
  "schema_version": 1,
  "ok": false,
  "message": "Sheet 'Sales2025' not found",
  "location": {"file": "Main.bas", "line": 2, "column": 5},
  "root_causes": [
    {
      "code": "WORKSHEET_NOT_FOUND",
      "certainty": "definite",
      "expression": "Worksheets(\"Sales2025\")",
      "requested": "Sales2025",
      "available": ["input", "sales2026", "summary"],
      "suggested": "sales2026",
      "suggestions": ["did you mean 'sales2026'?"]
    }
  ],
  "messages": []
}

Range("A1:C10").Copy followed by Range("E1:F10").PasteSpecial reports both the shape mismatch and where each statement is:

{
  "code": "PASTE_SHAPE_MISMATCH",
  "source_addr": "A1:C10", "source_rows": 10, "source_cols": 3,
  "dest_addr": "E1:F10", "dest_rows": 10, "dest_cols": 2,
  "copy_location": {"file": "Main.bas", "line": 2, "column": 5},
  "suggestions": [
    "resize the destination to E1:G10",
    "or specify only the top-left cell E1"
  ]
}

Writing to a .Protected sheet reports which sheet and how to fix it:

{
  "code": "SHEET_PROTECTED",
  "sheet": "sheet1",
  "suggestions": ["unprotect the sheet first: Worksheets(\"sheet1\").Unprotect"]
}

Pasting A1:C10 into E1:G10 when the destination's first row is merged (E1:G1) but the source's isn't reports the layout conflict and both locations:

{
  "code": "PASTE_MERGE_LAYOUT_MISMATCH",
  "source_addr": "A1:C10", "dest_addr": "E1:G10",
  "conflicts": ["E1:G1"],
  "copy_location": {"file": "Main.bas", "line": 2, "column": 5},
  "suggestions": [
    "unmerge E1:G1 before pasting",
    "or make the source and destination merge layouts identical"
  ]
}

Full classification rules and JSON schema: docs/agent-contract.md.

Diagnosing across generated inputs

elixcee diagnose-workbook combines the two features above: it reruns a macro across test-workbook's generated cases and classifies whichever failures it finds, instead of only reporting a bare error string. It's most useful for input-dependent failures like array-bounds errors, where only some drawn values trigger the bug — a single diagnose call already finds structural issues (shape mismatches, merged-cell conflicts, sheet protection) in one shot, since those don't depend on the input at all:

elixcee diagnose-workbook fixture.toml --json
{
  "schema_version": 1,
  "ok": false,
  "seed": 42,
  "case_index": 3,
  "inputs": [{"address": "sheet1!B2", "value": 999999999}],
  "failure": {
    "rule": "no_runtime_error",
    "message": "Array 'arr': index 999999999 out of bounds (len=6)"
  },
  "root_causes": [
    {
      "code": "ARRAY_INDEX_OUT_OF_BOUNDS",
      "name": "arr", "index": 999999999, "lower": 0, "upper": 5,
      "suggestions": ["check that 'arr' is large enough for index 999999999 (valid range is 0 To 5)"]
    }
  ]
}

Same fixture format and --seed/--case replay as test-workbook, plus --cases N to override the fixture's own case count for one run. Full schema: docs/agent-contract.md.

Multi-area ranges

Range("A1:A10,C1:C10") — a disjoint, multi-area range — is now recognized by .Copy, but pasting it is diagnose-only: diagnose/ diagnose-workbook classify why, instead of silently doing nothing:

{
  "code": "MULTI_AREA_TO_SINGLE_AREA_PASTE",
  "source_areas": [
    {"address": "A1:A10", "rows": 10, "columns": 1},
    {"address": "C1:C10", "rows": 10, "columns": 1}
  ],
  "destination_areas": [
    {"address": "E1:F10", "rows": 10, "columns": 2}
  ],
  "suggestions": [
    "paste each source area separately",
    "copy a contiguous rectangular range",
    "use destination areas with matching count and shapes"
  ]
}

Union(), Areas, Dim rng As Range/Set object variables, and matching-shape multi-area paste are now implemented — see "VBA object model" below. The 4 classified codes above still apply to every multi-area shape that doesn't match exactly (different area counts or shapes, or either side single-area): full scope in docs/agent-contract.md.

Hidden row/column evidence

diagnose/diagnose-workbook now report when a .Copy'd range overlaps hidden rows/columns (read from real XLSX hidden="1" metadata) — not an error, just a new observations field, present alongside (or instead of) root_causes:

{
  "code": "RANGE_CONTAINS_HIDDEN_CELLS",
  "certainty": "observed",
  "range": {"sheet": "sheet1", "address": "A1:C100", "rows": 100, "columns": 3},
  "visibility": {
    "hidden_rows": ["11:14", "30:39"],
    "hidden_columns": ["B:B"],
    "total_cells": 300,
    "visible_cells": 172
  },
  "message": "The range contains hidden rows or columns. Excel operations using visible cells only may produce a multi-area range."
}

This is what SpecialCells(xlCellTypeVisible) (below) builds on — plain Copy/Paste itself is unaffected (hidden cells still copy/paste exactly as before). XLSX only; ODS is deferred. Full scope: docs/agent-contract.md.

VBA object model

Dim rng As Range
Set rng = Range("A1:B2")
rng.Value = 5                        ' real Set reference semantics — an alias, not a copy

Dim u As Range
Set u = Union(Range("A1"), Range("D1"))
Range("C1").Value = u.Areas.Count    ' 2

Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("A1").Value = 1

Range("F1").Value = 7 Mod 3          ' 1
Range("F2").Value = 2 ^ 3            ' 8
Range("F3").Value = 7 \ 3            ' 2 (integer division)
If Not (a And b) Then MsgBox "ok"

With Cells(r, c)                     ' any target expression, evaluated once
  .Value = 5
  If .Value > 0 Then .Value = .Value + 1   ' .member works at any nesting depth
End With

Set rng = Range("A1"): Set rng2 = rng: Set rng = Nothing
rng2.Value = 1                       ' aliases survive Set ... = Nothing on the original
rng.Value = 2                        ' raises "Object variable or With block variable not set"

Dim n
n = Null
If IsNull(n + 5) Then MsgBox "Null propagates through +"   ' True

Function DoubleIt(x As Integer) As Integer
  DoubleIt = x * 2
End Function

Set-assigned Range/Worksheet/Workbook object variables with real reference semantics — including a genuine unset/Nothing state (member access through a never-Set or explicitly-Nothing variable raises real VBA's "Object variable or With block variable not set"; Set x = Nothing clears only x, not any alias made from it earlier) — Union/Areas, SpecialCells(xlCellTypeVisible) (built on the hidden row/column evidence above), matching-shape multi-area Copy/Paste, Mod/\/^, infix And/Or/Xor/Not (real bitwise semantics on non-Boolean operands), a runtime With stack (any target expression — including a computed one like With Cells(r, c) — evaluated once, with .member resolving correctly at any nesting depth inside If/For/Do/Select Case), Variant's Null (documented VBA propagation through +/&/comparisons, distinct from Empty), the : multi-statement-per-line separator, typed Function parameters/return types, comma-separated multi-declarator Dim (Dim a As Integer, b As Range), and single-line If cond Then stmt [Else stmt] are all supported.

Known gaps: multi-area Paste only executes when both sides are multi-area with matching Areas.Count and per-area shapes — every other combination stays diagnose-only (see above).

XLSX.read()/write() — @elixcee/xlsx (npm, prepared but not yet published)

A synchronous, WebAssembly-backed XLSX.read(bytes) — no await init() required — is implemented in the @elixcee/xlsx npm package (see docs/xlsx-architecture.md for the compatibility initiative and the sync-bridge design), along with readFile()/readFileSync() (Node-only; the browser entry point throws rather than faking a filesystem). They return sheet names, !ref, !merges, !rows/!cols (hidden rows/columns), and per-cell {t, v, f, w, z} — values, formula text, formatted display strings, and date-typed cells, resolved via real styles.xml/number-format parsing. Differential-tested against the real xlsx@0.18.5 package: 33/33 MATCH, 0 disclosed (the src/reader.rs xml:space="preserve" trimming defect noted in earlier rounds is fixed; see CHANGELOG.md). Works in Node (CJS/ESM) and the browser: a "browser" export condition routes to the inlined-bytes/initSync WASM artifact, verified not just by Node simulating that export condition but by an actual headless Chrome process loading a real bundle and reading XLSX.read()'s result back out of the page's own DOM (no Safari claim). The browser entry point still assumes bundled consumption — its shared code has a CJS require('ssf'), so it's not literal no-build <script type="module"> usage — but a real packed-npm-tarball install (not a relative import into this repo) and CJS/ESM bundling both round-trip cleanly with no manual asset copy step required anymore.

XLSX.write(wb, opts)/writeFile()/writeFileSync() — pure JS/XML/ZIP generation, no Rust writer needed — are implemented too (bookType: "xlsx" only), differential-tested both directions against the real oracle: 36 MATCH + 1 disclosed (bookType: "ods", not implemented). package.json's description was updated to match, but its version (0.0.0-development), private (true), and publishConfig (unset) were deliberately left untouched — no npm publish has actually run, and @elixcee scope ownership on npm is unconfirmed from this environment either way (see ROADMAP.md's "Known gaps").

Build from source

cargo build --release --bin elixcee
# binary: target/release/elixcee  (or elixcee.exe on Windows)

Quick Start

import elixcee

# Run a VBA macro and get all resulting cells
cells = elixcee.run_macro("""
Sub FillSquares()
    For i = 1 To 5
        Cells(i, 1).Value = i * i
    Next i
End Sub
""", "FillSquares")
# cells == {(1,1): 1, (2,1): 4, (3,1): 9, (4,1): 16, (5,1): 25}

# Pre-populate cells from Python, then run a macro
vm = elixcee.Vm()
vm.set_cell(1, 1, 100)
vm.set_cell(2, 1, 200)
vm.run("""
Sub CalcTotal()
    total = Cells(1,1).Value + Cells(2,1).Value
    Cells(3,1).Value = total
End Sub
""", "CalcTotal")
print(vm.get_cell(3, 1))   # 300
print(vm.variables())       # {"total": 300}

# Load cell data from an existing Excel file, then run a macro
vm = elixcee.load_workbook("data.xlsx")
vm.run(vba_code, "ProcessData")
result_cells = vm.cells()   # {(row, col): value, ...}

# Store a worksheet formula on a cell and evaluate it
vm.set_cell_formula(4, 1, "=SUM(A1:A3)")
print(vm.get_cell(4, 1))   # sum of rows 1-3 in column A

# Bulk range/row access -- no per-cell round trips needed
vm = elixcee.load_workbook("input.xlsx")
rows = vm.get_range("A1:C10", sheet="Data")
vm.set_range("E1:F2", [[1, 2], [3, 4]], sheet="Result")
vm.append_row(["Alice", 100], sheet="Result")
vm.save_workbook("output.xlsx")

# Sheet management and row/column edits
vm.rename_sheet("Result", "Summary")
vm.move_sheet("Summary", 0)          # move to the first tab
vm.insert_rows(1, sheet="Summary")   # shift everything down by one row
print(vm.merged_cells(sheet="Data")) # e.g. ["B1:C1"]

# Column iteration, sorting, and merge create/remove
cols = vm.iter_cols(max_col=3, sheet="Data")  # column-major, values only
vm.sort_range("A2:B10", key_col=1, sheet="Data")
vm.merge_cells("D1:E1", sheet="Data")
vm.unmerge_cells("B1:C1", sheet="Data")

# Hide/unhide rows and columns
vm.set_row_hidden(5, sheet="Data")
vm.set_column_hidden(4, hidden=False, sheet="Data")
print(vm.hidden_rows(sheet="Data"))  # e.g. [5]

# Copy a sheet
vm.copy_sheet("Data", "Data Backup")

# Read workbook-level defined names
print(vm.defined_names())  # e.g. {"MyRange": "Sheet1!$A$1:$A$3"}

# Read a sheet's whole-tab visibility
print(vm.sheet_state("Data"))  # "visible", "hidden", or "veryHidden"

# Read a row's height or a column's width, if explicitly set
print(vm.row_height(5, sheet="Data"))     # e.g. 30.5, or None
print(vm.column_width(2, sheet="Data"))   # e.g. 12.5, or None

# Control MsgBox behavior
vm = elixcee.Vm(on_msgbox="skip")   # silently ignore MsgBox calls (default)
vm = elixcee.Vm(on_msgbox="error")  # raise RuntimeError on MsgBox

Python API

Method Description
Vm(on_msgbox="skip") Create a new VM. on_msgbox="error" raises RuntimeError on MsgBox.
vm.run(vba_code, macro_name) Parse and execute the named Sub.
vm.set_cell(row, col, value) Write a value into a cell (1-based).
vm.get_cell(row, col) Read a cell value. Returns None for empty cells.
vm.cells() All non-empty cells as {(row, col): value}.
vm.variables() All VBA variables as {name: value}.
vm.set_cell_formula(row, col, formula) Store a formula (e.g. "=SUM(A1:A3)") and evaluate it.
vm.set_cell_formula_batch(formulas) Set multiple formulas at once: {(row, col): formula_str}.
vm.recalculate() Re-evaluate all formula cells (useful after manual cell writes).
vm.set_sheet(name) Switch the active sheet (creates it if absent).
vm.active_sheet() Name of the currently active sheet.
vm.sheet_names() List of all sheet names.
vm.get_sheet(name) Cells of a named sheet as {(row, col): value}.
vm.get_range(addr, sheet=None) Read a rectangular range (e.g. "A1:C5") as a nested list.
vm.set_range(addr, values, sheet=None) Write a rectangular range from a nested list.
vm.append_row(values, sheet=None) Write one row just past the sheet's used range; returns the row number.
vm.iter_rows(min_row=1, max_row=None, min_col=1, max_col=None, sheet=None) Values-only iteration over a rectangular region.
vm.iter_cols(min_row=1, max_row=None, min_col=1, max_col=None, sheet=None) Column-major values-only iteration -- the transposed sibling of iter_rows.
vm.max_row(sheet=None) / vm.max_column(sheet=None) Highest used row/column, or None if the sheet is empty.
vm.calculate_dimension(sheet=None) Used range as an A1-style string (e.g. "B2:D10"), or None if empty.
vm.sort_range(addr, key_col, descending=False, header=False, sheet=None) Sort a rectangular range in place by one column.
vm.rename_sheet(old_name, new_name) Rename a sheet.
vm.move_sheet(name, new_index) Move a sheet to an absolute 0-based tab position.
vm.copy_sheet(source_name, new_name) Duplicate a sheet (cells, merges, hidden state, styles) into a new one.
vm.defined_names() Workbook-level defined names as {name: raw_formula_text}. Read-only.
vm.sheet_state(name) A sheet's whole-tab visibility: "visible", "hidden", or "veryHidden". Read-only.
vm.row_height(row, sheet=None) / vm.column_width(col, sheet=None) A row's height in points / column's width in characters, or None if never explicitly set. Read-only.
vm.insert_rows(idx, amount=1, sheet=None) / vm.delete_rows(...) Insert/delete rows (values only -- doesn't shift merges/styles).
vm.insert_cols(idx, amount=1, sheet=None) / vm.delete_cols(...) Insert/delete columns (same caveat as rows).
vm.merged_cells(sheet=None) List a sheet's merged ranges as A1 strings, e.g. ["B1:C1"].
vm.merge_cells(addr, sheet=None) / vm.unmerge_cells(addr, sheet=None) Create/remove a merge.
vm.hidden_rows(sheet=None) / vm.hidden_columns(sheet=None) Sorted list of hidden row/column numbers.
vm.set_row_hidden(row, hidden=True, sheet=None) / vm.set_column_hidden(col, ...) Hide or unhide a single row/column.
vm.save_workbook(path) Save all sheets to .xlsx or .ods.
vm.cells_df() Return the active sheet as a pandas DataFrame (requires pandas).
elixcee.run_macro(vba, name) One-shot: run a macro and return {(row, col): value}.
elixcee.load_workbook(path) Load an .xlsx or .ods file into a Vm.

Coverage

See FUNCTIONS.md for the complete function and VBA syntax reference, including Excel version for each function.

Highlights:

  • Classic (Excel 2003-): SUM, VLOOKUP, IF, PMT, FV, PV, NPER, RATE, IPMT, PPMT, NPV, IRR, MIRR, XNPV, XIRR, DGET, DSUM, DAVERAGE, DCOUNT, DCOUNTA, DMAX, DMIN, and 100+ core functions
  • 2007–2019: IFERROR, COUNTIFS/SUMIFS, XOR, IFS, SWITCH, TEXTJOIN, MAXIFS/MINIFS
  • 365/2021: XLOOKUP, XMATCH, FILTER, SORT, UNIQUE, SEQUENCE, LET, LAMBDA, MAP, REDUCE
  • 2024/365: TEXTSPLIT, TEXTBEFORE, TEXTAFTER, VSTACK, HSTACK, TAKE, DROP, CHOOSECOLS, CHOOSEROWS
  • VBA: For/If/While/With/On Error/Function/Type...End Type/Named Ranges/Array of UDT

Named Ranges

Register a named range in VBA with Range("A1:B5").Name = "MyData", then use the name anywhere a range address is accepted:

Range("MyData").Value = 0          ' write to all cells in the range
For Each cell In Range("MyData")   ' iterate over cells
    total = total + cell
Next cell

Named ranges are stored on vm.named_ranges (a dict[str, str] mapping lowercase name → address).

Criteria Syntax (COUNTIF / SUMIF / SUMIFS / etc.)

Criteria Example Meaning
Number 10 Exact numeric match
String "apple" Case-insensitive string match
Comparison ">5", "<=10", "<>" Numeric comparison
Wildcard "a*", "?bc" * = any chars, ? = one char

Application Object

Property / Method Description Behavior
Application.Calculation = xlCalculationManual Disable auto-recalculation Active
Application.Calculation = xlCalculationAutomatic Enable auto-recalculation + re-evaluate all formula cells Active
Application.ScreenUpdating = False/True Suppress screen refresh No-op (no screen)
Application.EnableEvents = False/True Disable/enable event triggers No-op (no events)
Application.DisplayAlerts = False/True Suppress dialog boxes No-op (no dialogs)
Application.StatusBar = "..." / False Set/clear status bar text No-op (no UI)
Application.Cursor = xlWait / xlDefault Change cursor shape No-op (no UI)
Application.CutCopyMode = False Cancel clipboard mode Active (clears the modeled clipboard)

No-op properties are parsed and accepted without error, but have no effect. This allows VBA macro performance patterns (e.g., Application.ScreenUpdating = False at the start of a macro) to run unchanged.


Microsoft Excel round-trip validation

elixcee's workbook save path has been validated using five sanitized, Microsoft Excel-authored .xlsm fixtures on Microsoft Excel for Mac.

Validated scope:

  • open an Excel-authored workbook
  • modify cells with elixcee
  • save-as and in-place save
  • reopen in Microsoft Excel without a repair warning
  • preserve formulas, existing cell styles, merged cells, hidden rows/columns, VBA project bytes, unknown ZIP parts, and surviving relationships

Not validated:

  • post-save VBA macro execution
  • tables, data validation, conditional formatting, hyperlinks, comments, defined names, charts, images, and print settings embedded in regenerated worksheet XML

See compat/oracle-excel-com/results/0.9.0-A_summary.md for the full results.


Not Yet Supported

See FUNCTIONS.md — Not Yet Supported for the full list.

Key gaps by category:

  • Statistical: NORM.S.DIST, T.INV, F.DIST, CHISQ.DIST, and more
  • Text: REPT, NUMBERVALUE, PHONETIC
  • Out of scope: IMAGE (URL image fetch), GROUPBY (pivot aggregation), TRIMRANGE

Status Legend

Mark Meaning
Done Implemented and tested
TBD Not yet scheduled

Development Phases

Phase Content Status
Phase 1 Rust project setup + pyo3 Python bindings Done
Phase 2 VBA parser MVP (Sub/End Sub, assignment, Cells) Done
Phase 3 Virtual Excel VM (variables, cell storage, interpreter) Done
Phase 3.5 Excel formula engine (SUM, IF, VLOOKUP, Application.Calculation, etc.) Done
Phase 4 Control flow (For loop, If/Else, arithmetic expressions) Done
Phase 5 Python interface (Vm class, run_macro, load_workbook, MsgBox) Done
Phase 6 Formula function expansion (100+ Excel functions, 118 tests) Done
Phase 7 Advanced VBA constructs (ElseIf, Exit, For Each, On Error, Function, arrays, While-Wend) Done
Phase 8 Range API (ClearContents, Offset, Sheets.Cells, WorksheetFunction, multi-sheet) Done
Phase 9 Multi-sheet support (Sheets HashMap, With Sheets, Python API, load_workbook all sheets) Done
Phase 10 Worksheet function expansion (math, trig, stats, array/spill, lambda functions) Done
Phase 11 User-defined types (Type...End Type), named ranges, RANDARRAY, pandas integration (cells_df), type stubs (.pyi) Done
Phase D1 Remove rust_xlsxwriter, hand-written XLSX via zip (dependencies: 5→4) Done
Phase D2 Remove pest/pest_derive, hand-written recursive descent VBA parser (dependencies: 4→3) Done
Phase D3 Remove calamine from runtime, hand-written XLSX/ODS reader (dependencies: 3→2) Done
Perf R4 SUM/AVERAGE/MIN/MAX fast path (skip Vec<Variant>), RangeWrite dirty-flag batching Done
CLI Standalone elixcee binary; pyo3 made optional; GitHub Actions release workflow Done
Milestone A JSON agent contract (--json), error classification, MsgBox message log Done
Milestone A.1 JSON contract hardening (serde_json-verified tests, message-log lifecycle, error code docs) Done
Milestone A.5 Source location tracking — line/column in parse and runtime errors Done
Milestone B1 check subcommand — parse diagnostics, entrypoint check, MsgBox/interactive-call detection Done
Milestone B1.1 check: undefined Sub/Function call detection, unsupported-construct (no-op) detection Done
Milestone B2 Multi-module projects — multiple .bas files, Module.Sub qualified entrypoints, cross-module collision detection Done
Milestone B3 Deterministic black-box tests (tests/blackbox.rs, declarative .toml fixtures) Done
Milestone B4 snapshot subcommand — read a workbook's cells without executing VBA Done
Milestone B5a test-workbook subcommand — property-based testing with generated boundary-value inputs Done
Milestone B6a diagnose subcommand — missing sheet/workbook, array-out-of-bounds root causes Done
Milestone B6b diagnose: Copy/Paste shape mismatch + clipboard state Done
Milestone B6c diagnose: sheet protection (Protect/Unprotect) Done
Milestone B6c2 diagnose: merged-cell-aware Copy/Paste diagnostics Done
Milestone B6d diagnose-workbook — root-cause diagnosis across generated test cases Done
Milestone B7a Multi-area Range/Union/Areas foundation for Copy/Paste diagnostics Done
Milestone B7b Hidden row/column metadata foundation for Copy/Paste diagnostics Done
Phase 3A-1 compat/vba-semantics/ value-correctness suite: 208 → 301 cases (6 new categories); fixed single-line-If statement dispatch, Boolean arithmetic (True = -1), WorksheetFunction Boolean coercion, Empty equality Done
Phase 3A-2 CI wasm job: fresh wasm-pack build (Node + web targets) plus a Node/browser-condition smoke test, wired into GitHub Actions Done
0.5.0 VBA structural semantics (: statement separator, Variant::Null with documented propagation, real object-Nothing state with alias safety, a runtime With target stack) merged with @elixcee/xlsx real-consumer/real-browser validation (packed-tarball install, headless-Chrome smoke, bundle-safe WASM loading, readFile()); compat/vba-semantics/ 301 → 386 cases; elixcee-types bumped to 0.2.0 for the new public Variant::Null enum variant; published to crates.io, PyPI, and GitHub Releases Done

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elixcee-0.17.0.tar.gz (3.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

elixcee-0.17.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

elixcee-0.17.0-cp314-cp314-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.14Windows x86-64

elixcee-0.17.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

elixcee-0.17.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.8 MB view details)

Uploaded CPython 3.14macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

elixcee-0.17.0-cp313-cp313-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13Windows x86-64

elixcee-0.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

elixcee-0.17.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.8 MB view details)

Uploaded CPython 3.13macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

elixcee-0.17.0-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

elixcee-0.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

elixcee-0.17.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.8 MB view details)

Uploaded CPython 3.12macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

elixcee-0.17.0-cp311-cp311-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.11Windows x86-64

elixcee-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

elixcee-0.17.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

elixcee-0.17.0-cp310-cp310-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.10Windows x86-64

elixcee-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

elixcee-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

elixcee-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file elixcee-0.17.0.tar.gz.

File metadata

  • Download URL: elixcee-0.17.0.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for elixcee-0.17.0.tar.gz
Algorithm Hash digest
SHA256 05234a0d0760c314cd73dac723ce4e40a3094d3cf0871d2729c3896e362efb3f
MD5 bdb7288404fa8d9582f1813cc6e1f049
BLAKE2b-256 a9470cd5f3ed8e816701493a2f7f16cdeba3ffb7c689ba7c37b44551af5e6e1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0.tar.gz:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 973dfc30b7965908ba61489d6edb73f7ceefa607853064099e3ff38c7acaa4d6
MD5 78c1fd6e601775690c4701c80a3c2e2f
BLAKE2b-256 4c0cc4820ccde14ff23365ec87c7090d8f47c4d9ae2d524005d3e3709ed29eac

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c82ee00d4e0198813da31373b9d9286abf2268082644a4b1b79faf749a217fcb
MD5 b769f78b98188d4f10933c250f902204
BLAKE2b-256 a50f07657ef1a498436b4e3190fa5546b68cd9270a4006e56503d010eefb630a

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ce01bf77f44d0c3def1e3259b40e45f2c2073044c26aafded1ec354f841fc0b8
MD5 fa430b3363c746b659f4fd7451945999
BLAKE2b-256 cee8fa1071b7985f6620ab8ab865b2238bd1eaa6e3b01dda522558da6dc53b10

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 154b47c46ee03de8f708e8d0bfc44b78c452885f8420cbaee71f4896659dfbf1
MD5 8f11e96b90812a7792953c3bd95c42a9
BLAKE2b-256 beec174fb5f0badff6f2bb6c361367a1ee2221a564e9350be95a3133cca7f1d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 454fc5b8c046ba5f993a318e08df52f67b6d792bbd728f029937efe2949d3780
MD5 b41070d3051e56618ffb98f028871866
BLAKE2b-256 878bd49c146ee39e7d0986980e693b87514b1adf5a4ac412d309feb7192c3945

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 59079d35d2ea7b959271044f9344b02c4126369c32091756030ae89f9d8b814a
MD5 743a272171ce994cbfaafa0256c6c12d
BLAKE2b-256 6f17b2465a17eec26f869c11e867282e7e2f1206cf191de6bfc33b77ab951b95

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.17.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for elixcee-0.17.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 59ca24d0cdff49597072e0d9853c2dbd80b3c4af0a1ebcbdb3759280ae12a467
MD5 8940a107a247a25484da0c8c572585bd
BLAKE2b-256 204f722b50c18e87d4d4a1236cf3a386b7e988f6ce74ff0ec423588f0bf5a762

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb49b032a37a7aad695a85569167c3f12f7bc8fd8257fbbca8c7db23fcd404c6
MD5 72d1655baf11e383be36a68806ca392f
BLAKE2b-256 590255d5688f79d7ff0fcd145e84931b543d3e2d3847fcc6e49036f106c7b295

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7fb02f05aea953fc6a5e3dbeb47dc6d04f5aab52a8d4f42eb6a0b56c052f2c19
MD5 92b2e4efc01decf40397a6a93ffc593a
BLAKE2b-256 5d37db4f14a43f51af017c1ff8ea7738b655d919b4d65d85a48403a2c81b11b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 157d1c7cfadf9308936fab1940e06b78d1ded1e52ccf9b774300005c057f4cf6
MD5 e80322d55bbe5c133a15c7d64e63d901
BLAKE2b-256 5defa9c3d2fe64a678fff07dd06ac4d35df41fbe847102bfe24c035db4791f6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.17.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for elixcee-0.17.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 dfcb57aaaa40bce6cbe481dc9888c00a87a8c905299ee97b8aa0b7e60bfc464d
MD5 361a2fbc3d928c465352af3757440158
BLAKE2b-256 8b7cab1b6030a4b770cd1660c8c895911769b1a52cbdfb62045346a7bd303fd8

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 863dc927a6f211581f02261eba2083926da0228440224a4753a1225a5343936b
MD5 ddd616130de57cef90d604ae387edcfd
BLAKE2b-256 8cdec6514ff415b43ac7de99902662b2dc1ef7b6254425ec5345f964c63546c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4464ef81673a5104e13d1efb17a4343d05f5d8a11617eff1e4aea585daf607aa
MD5 277bf3e2ee648c7b8d618d69c5c70414
BLAKE2b-256 57f6ecc441c3d34c95b199ae08f4e839e2129ffc48f0c96f7d48c840cabec0fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 910ef23583a231aefeab91a54735c26a32e6681a3b318e5599857d0432a06efd
MD5 4bd75827134317602544dc5df611c7cd
BLAKE2b-256 44416c50a57d65ba83a847d2c514a64b517c91b2b5fd5ec5afe2181f56a9a809

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.17.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for elixcee-0.17.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bdc7ae7b7747a689075691af4fb9e6e93d29cd6de0bd4947d0d6fadbbc4bcd8c
MD5 d05c8e368e06bbcaa7a05893bbd85ae8
BLAKE2b-256 42f036b5314582c6355ed2d0618cbd7ccb9d24a1b42ee0c74635bedf7fcbd5de

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b4555d9dc6fe8122ce39eec4a023a9c5e94bfd51c775c31a7c167b9841bf5b23
MD5 c86c2a99da75f8b83bab3a72c382797d
BLAKE2b-256 855a8e7763e6e3fa2092b9355c970c1fcccb8e6dde1de39a233d9a5104f5245a

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7b8448a9cf5d2d3c65ea291b8f0541cf6073c23a810ff18a36f189bcdebab5f3
MD5 ffe9e14c598ccdf57104377723e2aeca
BLAKE2b-256 fe38a72e842eca882366307fd45ea2e0e0b71ff903bfcc194ce6f79d0fdc67ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 dfaf915bbd68ab02f0c7a63773b0cdda14eec59d8cb39f2bea3e736653925c25
MD5 2cc1db59b738555ace8d2d086c934ec1
BLAKE2b-256 4a474040f62e2cc298a012956480090ddb28394c01b07a5ad7d63b4dee671f44

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.17.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for elixcee-0.17.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 246c60fe0980c4c2cfd33331fa98cd4275b2e4c680a32d47f0a44e3aa6df0ead
MD5 15eefdc20f87de6fd1b037721415501d
BLAKE2b-256 53d933d04cfc0e04597305cd7431043d160d091977e24b76414adbe88e2227ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 78c7f7290d92945b1e60771e613a0477be8a599b310ffc965623133a752b848f
MD5 ad9a0565f4eee54267dcc4c7a71ba842
BLAKE2b-256 64ec55e9c65c8564db31188160667d164377c4d884cc9bce8ec2936116c78a74

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3f4da58f39c5619088ea3edd5f1c2e88ce5ab046ce0aa6a26c9e1e5aa952d0cc
MD5 71f8524ec11ad68db73a178118ac0a18
BLAKE2b-256 ef4785bacdd585f2246bd7fcf79830d219aade214e069435af88e0085365ebdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 fcc28f631a9fb76916fe577c71e31ace7b728579021448dc5c4f0c70dce28697
MD5 ce545778a2f9253b16109d4c5792788f
BLAKE2b-256 c9eb0591286ec6db8d54bb7ab4a736462518486dcd7f7dfaa99c843b4a3bd10c

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.17.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for elixcee-0.17.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 706f8f0bb0946c5ad89f2719d2273ca7fd6ae8483f8fd40c141bb01ecfc28152
MD5 0fd168408688054796d4834a6af21676
BLAKE2b-256 ca5f0643f0c2a19befa79e4ed2648b2c489d192de7c19f3e60598ad02f47da2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2803bdd5b8c0c1ff456172c006f359a46672b697a0db67761fd5a368e87316b
MD5 e6ecdb2d6af4968456238d34c7a55f92
BLAKE2b-256 cd085f4a4d790df6dd5fda5782ccb4945fc3f277677bc9a56b02ebabc4f508d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c236a51fbb640eaec574ee2b12a6ade585a11f68bc18c6d50ef75a7e40a4a812
MD5 cdaab99d67bfa07059289a24e68bb69c
BLAKE2b-256 ccf9019594c42761f117a816823469b5acce68b6c7aca4a48393ea4b240bd44d

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fbd8d0c0e7cfdad010350607e56bf5af23041101f6d0ec307766109044c1405a
MD5 50f6e276328df5c6d9661a2144c389cf
BLAKE2b-256 c47fbd79c25b0ba9645eeed99115eeaa919e52c48b2d6a2b08ded3987d32bed0

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elixcee-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1408696e09675bdedb9c667760593bc3cee2fbf2b847d20d03691937916a3ddc
MD5 cfa729afd4add855f230838b1b457be0
BLAKE2b-256 c416757fbd68d2b6fbf66ceb7af9d927ea9d29873611725b001ec950c6fe7b37

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on kent-tokyo/elixcee

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.0.4

28 files

1.0.3

28 files

1.0.2

28 files

1.0.1

28 files

1.0.0

28 files

0.93.0

28 files

0.34.0

28 files

0.33.0

28 files

0.32.0

28 files

0.31.0

28 files

0.30.0

28 files

0.29.0

28 files

0.28.0

28 files

0.27.0

28 files

0.26.0

28 files

0.25.0

28 files

0.24.0

28 files

0.23.0

28 files

0.22.0

28 files

0.21.1

28 files

0.20.0

28 files

0.19.0

28 files

0.18.0

28 files

This release

0.17.0 This release

28 files

0.16.0

28 files

0.15.0

28 files

0.14.0

28 files

0.13.0

28 files

0.12.0

28 files

0.11.0

28 files

0.10.1

28 files

0.10.0

28 files

0.9.0

28 files

0.8.0

28 files

0.7.0

28 files

0.6.0

28 files

0.5.0

28 files

0.4.0

28 files

0.3.0

28 files

0.2.0

28 files

0.1.2

28 files

0.1.1

28 files

0.1.0

28 files

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