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.14.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.14.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

elixcee-0.14.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

elixcee-0.14.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

elixcee-0.14.0-cp314-cp314-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.14Windows x86-64

elixcee-0.14.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

elixcee-0.14.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.4 MB view details)

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

elixcee-0.14.0-cp313-cp313-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.13Windows x86-64

elixcee-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

elixcee-0.14.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.4 MB view details)

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

elixcee-0.14.0-cp312-cp312-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.12Windows x86-64

elixcee-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

elixcee-0.14.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.4 MB view details)

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

elixcee-0.14.0-cp311-cp311-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.11Windows x86-64

elixcee-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

elixcee-0.14.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.4 MB view details)

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

elixcee-0.14.0-cp310-cp310-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.10Windows x86-64

elixcee-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

elixcee-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

elixcee-0.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: elixcee-0.14.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.14.0.tar.gz
Algorithm Hash digest
SHA256 8b1c5ac1f521b34ad56448172ff450dfb67fac218a382f4b77db717afe91850d
MD5 b0c4e0f6c45e23e5bb854542f47f4ab4
BLAKE2b-256 9b51429de4cc8ce8c051d41dc68579f3233ba2f434986dfa2ee6982ed898a6ef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a443518125cd854a0248e01ce3c23dbfcdd2a4b482b71b95bcbb0c6ce77b1385
MD5 403618c354dd371f95f2d6cf44b44188
BLAKE2b-256 8df3bee7858e261adacd0a3016370c8548942a416d4a0becc3e3abb84c837fd0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3780c4c4c4cbb7465c919caea32a46228e0476b9c94efdf107878e05dc2a1d5a
MD5 80e8cfd63187e95bc35b406fabf35782
BLAKE2b-256 f6a405e87b4bbe70dc4373633d3389a6d29705d2dcfd9148324eaccabda42a55

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 faec74c77a1f7f0098802fda2f5647a059474caa844b972e92bcc6092819a70b
MD5 d6bb58cca2d4f88bdaf67c7180c9286d
BLAKE2b-256 b4c422b4625e79c50da1882f9f25ed2fd640a03a661b40d385a7aec10676e6ae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e2d13bae2a409332073dd25d694a0d24d0108b612cce7ca164575f342109da60
MD5 6f4791e51b571f972b96ec2099c982c2
BLAKE2b-256 d654b4270e05b81afec7ff3feb067b07d713916ed2c1788fc6dee1c1e6b6d628

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 58ac6b1af29cdc95833d589a614bb4fcb4db63b4b7a25c3be1d2479b5342eea6
MD5 97995f84088ecf51887d29fcd1d07bbc
BLAKE2b-256 baca8855c442b2992270cd747a83e0cbb415e1fab53f06b27d2f186d0560cc48

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 24ecc1c0553df18250cdde129bce8e080efc4480643fd4154e90da3e9f475c1b
MD5 7d5c0ba2e984c8d16a26d666e7b91439
BLAKE2b-256 cbcd6b0a6579a29ac9f9b38b260363721dfca818325727153e972c54e4bbb7ac

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: elixcee-0.14.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 1.1 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.14.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 cfe079a0a72217e8c4c714fd5c01f8bb06752c4e8141e5cee62b394c85d0f792
MD5 5abbc7962139871349a2fa453d3205bd
BLAKE2b-256 e7a4261573700061adfc7362fb5be676b3ef023178d6a151dc9d4278bc3f628c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1353b173c3bcec7ec3346c87640ed3f81b6faae3d20d95f3926a61c7bac2b4da
MD5 63b8651367ff7015d1ab0455403ca58b
BLAKE2b-256 58a368dd2c354dc64541b1c2d1eb866ba27f9f2f80c7919dce3c50b0ba1d6741

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4a6c10b055305c71db41f0585ab77887d59dc52478d0adccb9daf3a5d3ad69d0
MD5 6dce7b1f6229410d49f1fbf105abe970
BLAKE2b-256 f1a537e4f52429b1c07bf29245b2e5a36bce5ea50f45392077674a747c5080aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.14.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.14.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.14.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 735ab48e85428e6808044625e376446f4776c939a3aa48d3158eb2c625c444e1
MD5 07bde47b6123c42382e2930748eaf52b
BLAKE2b-256 f652644a248a74e6e14b413e0c7ae1377e4e9f8ce6c8f1dde4431823e4c37cf1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: elixcee-0.14.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.1 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.14.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 31a2d93987cc396b636551d815bfba76ac8a08db49e0d912e70becc80ad60413
MD5 a4807044782aed76f10d524651ebdb51
BLAKE2b-256 fa565cb1d2532a72222da17541181d5aeed36e466e47311f4719e97a2c70650e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5face7b40e5b05ca1fac761c5a4761014a984ea32ebed7b7af3b6bd434e3e8db
MD5 e11d3afc7c16b8dfeff2c812f20e05ac
BLAKE2b-256 54ba07f43da90bf60983929dabfcdfb4aaed4fb8316d779e75bde4a419da8ffe

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b292d71088fed04acbece60c4eb69d9129807d44ce8b23e1293716f5d3f22bc2
MD5 92c53d30ba7b511c96df3697ee3886e9
BLAKE2b-256 93dda099a8a772841160c12bd993ac00c0a550e2eb6af5cc6f5a94654669ec25

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.14.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.14.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.14.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 a1bdcc3cb5e09c9bf96ca4747a353ea87a28167ea10673264ffdb2751e15e9ec
MD5 339bcad365d90c54426cacfb66a380d8
BLAKE2b-256 d9865cd216e58f7aa09adcb75458ce87015ccce3e868f66608e41b43307e6555

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: elixcee-0.14.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.1 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.14.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c4876c4fa8cf53585f8b12b64a5373ddafb0fc18a3c5c99db749e839f1a55926
MD5 d5b7b1ed087754155dbf7a6d45351f7f
BLAKE2b-256 c5740693702196462f6792a9e03bd71cffdfd4f9b565427b9da7f1aa5dc79774

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c30230eb34cc3e2fb9e60b615f7a6fef875ceabb6ef002fd58586a1f785f58f9
MD5 597342f2df1b7fa9ae662dafdf3155a6
BLAKE2b-256 12160161319bf6faf085ed7046ce0f6d7061e29607a03b516506aa6891cb9637

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3be8b1727bb7badb5ba6b417dc7313254f5a1db7607e3bf5894e97ab0add5c58
MD5 571d5a4e473027aa65a30b048ca8967b
BLAKE2b-256 1f6a58bbdc8ae72a06973c4debf5a9bae94980b754012041409f587db43f1abb

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.14.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.14.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.14.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 af788016bfe9a3a76df74f4bd9a4e1611ab2d26b2eb67b3b971e639dc000640d
MD5 b4dc236078544ba4a67104c3f97721d6
BLAKE2b-256 8d9fb6b7299b734790a11730744581e9d6edd70240326683c13b4a3c3d9d09d8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: elixcee-0.14.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.1 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.14.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e85720af23e80eddf7242553d0d23c5ca371b43d21491e26f99786ffe99c73d7
MD5 709bd1f15de9775ca261be038b2e4460
BLAKE2b-256 3928ee048feacb06ba3a140dc41ac98ad2bfe509de4fce3472a3efbed08c87e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8d8d6b470bc553fc572b2942ad8bf90689cb365b014d4c3c626209e8e2920156
MD5 9d977fd79e81bedb81beff8cf7da4c4f
BLAKE2b-256 499cc53e342883be926e59200410db2f42f482876c0c4bacdae5a22b1e293b6b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c56a08ce84287bcb8ce7441d6b3c6308ef8228c22eed293da94012a5689fdfc4
MD5 8b9c6b642860e2cf750da8d367e05455
BLAKE2b-256 cbdbfa07f036b4aabd45b445d83d70f9be4c795907726d94913f107c2499dae4

See more details on using hashes here.

Provenance

The following attestation bundles were made for elixcee-0.14.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.14.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.14.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 d546c499dc810517879dc402726c0b06b39350ce8409650d375dae131a602b25
MD5 8b6078e8f84570839ca37769482bb622
BLAKE2b-256 bbf6c410224c83a15a50f80da7a832c119fb1c8c840c742f1d1887451195ba43

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: elixcee-0.14.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.1 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.14.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8efc5ed05fffdc4636ed695480c5a2a9257b8f59f05fd8c3254865f31b6178c3
MD5 47a1fafc8ee89e2b66e7d4baaa55a6c0
BLAKE2b-256 38ff45914620bfa38412112a00422da26561e257aedcc40579bf1a1b64b2a3be

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8f14f1f84e02a39674ba393dd7f38bc7816b9d0f7027c97c42aec712f8db1e44
MD5 0d2dd63b277186408ff2e36e062df433
BLAKE2b-256 0a17ad3783cbad792bc90ff040189af5a50a23067d72b08f1c1f2db52f6d1571

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2fb928ad0858739e8eb36bd203b693989fb29ab3956b030be62d8e4f9265b2d4
MD5 3e6516fe9b199216ad2d70961a6b75ff
BLAKE2b-256 0420d953e0a56f913d95bdf1283f2c6e4815703fcae44f7488d6874c742114e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 531a715b56415c36e8371197c4214148526f005c49c223416ed42d8208f9d6c6
MD5 4cc5ff9559735f4630a3c655752ce528
BLAKE2b-256 eb5a243b86f435b1f1033468e8f76306935b9ca699b69469b0687101c8a49b5b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for elixcee-0.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 62d67465867aab6407cfe1a007abdd9b57e1f6706cac0fb0a5b81ef9816c105e
MD5 cdd16a519807fbe19bbc2cbc783033c8
BLAKE2b-256 45b4e790ffb0802b6837b63a822f5641b972c8cf0162ab2bfb55fff6151ecfef

See more details on using hashes here.

Provenance

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

0.17.0

28 files

0.16.0

28 files

0.15.0

28 files

This release

0.14.0 This release

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