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.23.0.tar.gz (2.9 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.23.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

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

Uploaded PyPymanylinux: glibc 2.17+ ARM64

elixcee-0.23.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

elixcee-0.23.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

elixcee-0.23.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

elixcee-0.23.0-cp314-cp314-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.14Windows x86-64

elixcee-0.23.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

elixcee-0.23.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.23.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.9 MB view details)

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

elixcee-0.23.0-cp313-cp313-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.13Windows x86-64

elixcee-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

elixcee-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

elixcee-0.23.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.9 MB view details)

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

elixcee-0.23.0-cp312-cp312-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.12Windows x86-64

elixcee-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

elixcee-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

elixcee-0.23.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.9 MB view details)

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

elixcee-0.23.0-cp311-cp311-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.11Windows x86-64

elixcee-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

elixcee-0.23.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.23.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.9 MB view details)

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

elixcee-0.23.0-cp310-cp310-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.10Windows x86-64

elixcee-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

elixcee-0.23.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.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

elixcee-0.23.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.23.0.tar.gz.

File metadata

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

File hashes

Hashes for elixcee-0.23.0.tar.gz
Algorithm Hash digest
SHA256 f8285551a463652edd4135ede34cb515db021dd9adb5577ab6538d5b282ff203
MD5 c23cc3aaf69e5b4712c0e6e9adadf12d
BLAKE2b-256 15edd275c818dc33ddfb92ce6fe8257344922ea4f929ae443ea92bc3aca18f51

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e9bd6841d3fc3c4cbf188c5305a788c8ae8eb6ee9ab2cab11c9d6b3c283fe78e
MD5 83dfedf8506052c734aa3888b8eae7f5
BLAKE2b-256 b722982470464e1677301b2ae327177bc8eac954ebd317ff0708d3f51585f357

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d8997cbf5552bd32d913a8780b25db07d73b12bfd7ba8453e17b7d277e54280b
MD5 dff3744220db81f21bf6ee7085ac9dc8
BLAKE2b-256 fe6db1842886a0d6d8969e701881920e19d6f719497a06376fd8cf9b86a7c71f

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 26113f36295aea92808ecec2cba1f9d2a086d11f918ee4511c0e04af3c5a334c
MD5 6942ac31a776c8d357d92f5737be0afe
BLAKE2b-256 d998d7150781f07e2a55a4f4654ae9502182e1915bd30d51fc058f8009692a5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6737e8f54df123c8cf856ae0e415a7fcf9a68e499f519a4c4d803141bd66cdc5
MD5 4dfde011354687b665b8b2700acb6299
BLAKE2b-256 7cb55952d975c1eadee4e81791db8cd309712254cef5ec421d30221aa0462827

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8f360459c64c77f2be0d56f9861535a61cc74e95377cdc93d4fc1e8755cc9b78
MD5 0f437d8857f492bf8d0632c188925b52
BLAKE2b-256 477dd21d48e9c8cdc562c2465fdd81df44c194156d94f35f2da5729edad5fb98

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bf20b3261d9b6bbffff2c60935d9910e64251dc0b6bbc28147f49bb8c1d02b43
MD5 4709fc41f99a31270d5c61b67a0be127
BLAKE2b-256 a7df7c382600f4de4a8737632073aa9dfea83d02b2bd7b5c2f4df084bd8bcf21

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.23.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.4 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.23.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 43232c6f1aceb72dd942ed8d974fedb68f4c98321845d98e19ebad715b8d1ee7
MD5 77418b5c4211b963cc91d46a3922a867
BLAKE2b-256 0df6f75148ac767b9b3c15e05deca27c7560e9f7cfe360bfdf108150d0a15507

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b133fee9a2cf417bf505dcd0e6105b50a151ab728d3526b9767897161e180051
MD5 3ea84ffc8282178683dc8185c26c5270
BLAKE2b-256 5ab0f94f399b9436f09a00d3def27cf86637c9fe9fb8a81c512244d26274992b

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a5e46fb5f58f38cfbc8ce38fffb51d9cb960862d7ac4530bd168c8d666550d5a
MD5 3e381f4ff808ebeb9f880d80b16ec658
BLAKE2b-256 7810ac9e00e0798f6b9b93fb913d9ba73f7dec4cefa8440d4478c09976e86311

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.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.23.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 4ffd614fe2549a4c6e5ea85ddb8b272bacd27986bc4eae67c56e6a5377ff4a1d
MD5 657ceb600546065575fba78ef586dbdc
BLAKE2b-256 ed6d83c4587435a18e649e745a43c523b3cef039bf4b7d5d21ab1d7add81159c

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.23.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.4 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.23.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c2d4545ce8749b7617af50594e2ccbb9ffa4aaf6775d9dcdbab59cd9a5f4334c
MD5 a6a85125a54e2896782f1d303e841a99
BLAKE2b-256 260e63e56bed10b4dcfc771ed2d51af85dabd7aad6ff3072dca0f3756199f061

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4f3edae4713d2ab5fa40d1980176313a9edd647d9d674b08b53fd689c77e9722
MD5 1939e9a5ad4b45ab3b38ed0b8ea09fbe
BLAKE2b-256 f4f9224846dc0f95679baa1f722658cbe9b240bc93f581b0c449e36bec90ff64

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e1b689cc4a3d99d279aa73c188f307853971ba374df5f72557ab0d225e21fb08
MD5 cbc165797daa385a9fa07efd92b00854
BLAKE2b-256 a3ddff60914ebe7364775c850755bd84f9c8bb87fcbfd760b04975da3b3bcf2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.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.23.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 ed3a442784dfccbd52da29b043351a09822104627266a46b333766dab9459e77
MD5 988b09d90ad9a830574930a41137ac54
BLAKE2b-256 2dad57c160d1b22ee7a0b80d65d0f866d5ac865b78df55f0f94973bdc6da1497

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.23.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.4 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.23.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9c29c501b59ea3beb98148508207af61724c69508c58928855729a7ecc09a21f
MD5 e42558d45ad04157767456dffd036ab6
BLAKE2b-256 a2ae56ea1e65f041ba9449be7bca30f7689d6f5cef14d63b7035e2474f985e47

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 82c4a1391df840604ab5efff90aff3d483fe1e3071cb2bd80964278d7efbaf92
MD5 6eca909139fa03b7f7f4c4151940c45f
BLAKE2b-256 9344bf4bdca38e43c4a676ec830b36e2cdb1e84f3c2c3d1a6ba7edbad0948123

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 03208a6fa258d1fbf4cb95c13cfe8045ece59ab613e41e1610ea4edbb16b50ae
MD5 67ecc19595e30fa9138331980ab222d3
BLAKE2b-256 e70406fc8efa79d178b98b4d40e9a7b1edc4cc409be4c3b4bb6c85c8cf1cfab8

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.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.23.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 5d9174ad94c283509fb3c43df9b45626f09157df68c819ea8fde2324287964dd
MD5 464fcbffa5083400a3841ce88f09fb25
BLAKE2b-256 5fbebf9121e14d97aa1bf1c7f4764027942c099924021653e14cde84386e20bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.23.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.4 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.23.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c3046ce714942f8cf314e6517756877d58bda849b56531e51eb008514d188d5a
MD5 031036229b7217b5a4d9ce1afefd57f6
BLAKE2b-256 3a042b1ed16305d20d569f690bd40eec045c5516cf6f7b133542d02fa1e32f30

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 836e09503ce62f1434cda489e25d5d5a754bf9b65715caa9ae694722e3b47d8b
MD5 5b9e1449852993b6463b890a24387567
BLAKE2b-256 02f280e6241b0d2719309c60e398939acf1aefd3590a978deeb2885586fbc7c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 16a3a66197f544f86b3ba36bd4daddd66c98465a6079e1fc6b4a43a5f2f4f9b4
MD5 929100eb8caa0cf591b9c67cec27d2e0
BLAKE2b-256 affc54d4a48dbd2a204d9f79625a8001b15c4b95ef0149df884e94500429ce41

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.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.23.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 bd9932437cb5432a4aa70c0002b0c911d648cd9e0d12351c6a6c35350af00aa6
MD5 8105b270af0baf3a9c8380875804267a
BLAKE2b-256 bfa1bbd3dd6ddff08b09d1b2432bfa62c5ceb0f2aa726fee5aa3a21664b184b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: elixcee-0.23.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.4 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.23.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e7c33310815ba2368c6a703b88113b75a2244a5e7d14be5bd4957426f9487993
MD5 4940e8f05b8346f9b2d2d7e8fab18229
BLAKE2b-256 fb220f4c1905bed4a5185ad1eeaffdcb2a669c474cf601f6495de7ba969c5628

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 424f9b786068e73df99847ebbacee47665b21a51f193531d4bc06154522cb51b
MD5 47fc3672c3d7a7ee0f03cb6d0f993cff
BLAKE2b-256 f3a805bd59d1ca40ca22f5fa1c124f02494670d2ac12e0d860b8064eea350ec9

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ee9de3d8a397dab69c8ac66786d2ea2badc2614acc3eec7eae5c505b5b0bd2de
MD5 64b363ffd2e1fb7a007b88b3950a3c1f
BLAKE2b-256 f38064f5030fa9deb702e949abeeefd47fa38f85244a308db4d3e9c28c14b18f

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a48e402493547232b62e8d6e0831ecf2559508663b59fa395ce8224637813e1
MD5 a03d01d8555355fbf0f992d1a9169393
BLAKE2b-256 ac4c96e1c8c6353707b628414aafe7a318138c8708ca7892f5663b70b6b41e16

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for elixcee-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1e2a9fd246cd4db9a86e65bd727800e5778e7d43782059accff3d3d9046b4d73
MD5 e95fc1bc1617b294cd6bde92b735b415
BLAKE2b-256 47d78bc7709747b49ac2ef7e0ea062b7b18349467df83dd6a346b9f4796b3f45

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.23.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

This release

0.23.0 This release

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

0.17.0

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