Search iThub

Search tools, categories and collections. Type at least two characters.

Explore all tools
↑ ↓ to explore resultsEnter to open · Esc to close

IronCalc

Open-source Rust spreadsheet engine with a web app, Python and WebAssembly bindings and .xlsx import and export

Visit website Save

IronCalc is an MIT and Apache 2.0 spreadsheet engine in Rust with about 500 functions, .xlsx support, a browser app, Python, Node.js and WebAssembly bindings, and a Docker Compose setup for self-hosting.

Pricing
Open source
Deployment
Self-hosted
Platforms
Web
4,253stars224forks
0views
Updated

What is IronCalc?

IronCalc is an open-source spreadsheet engine written in Rust, together with a web application, language bindings and import and export for Excel .xlsx files. The project describes itself as a spreadsheet engine and ecosystem, with the aim of Excel compatibility: a formula that returns a different result than Excel is treated as a bug. The project site is operated by IronCalc GmbH, and the work has been supported by the NLnet Foundation through the NGI0 Core Fund and by the European Commission's Horizon Europe programme through the ELFA Consortium.

The repository contains the calculation engine in base, the .xlsx reader and writer in xlsx, bindings for Python, Node.js and WebAssembly, a React-based web interface and the documentation sites. The engine is dual licensed under MIT and Apache 2.0, and GitHub reports the license as Apache-2.0 with the MIT text alongside it. The hosted web app runs the engine in the browser through WebAssembly and works as a showcase and a lightweight spreadsheet.

The latest release is v0.9.1, published October 21, 2026. It removes stored views from the model, adds dark mode for embeds, switches the default to light mode, moves the .xlsx ZIP handling to a patched zip 9 dependency, and makes loading a model never fail. The v0.9.0 release before it added links, merged cells with merge across, merge and center, merge down and unmerge, and a second WebAssembly package, @ironcalc/wasm-xlsx, that includes .xlsx import and export.

The project is still in an early stage. The documentation lists real-time collaboration and charts as work in progress and pivot tables as planned. A standalone desktop application for Windows, macOS and Linux is not available yet, and the docs say work on it has not begun. A terminal interface called TironCalc is documented separately. This profile is based on the repository, the release notes and the official documentation.

Inside the application

IronCalc screenshots

Explore the interface. Open a screenshot to view it at full size.

IronCalc web app File menu with the default language submenu open
IronCalc screenshot 1

Official IronCalc documentation screenshot of the File menu listing new workbook, template, import, download and default language options.

IronCalc workbook list with a context menu for download, pin, duplicate and delete
Workbook sidebar

Official documentation screenshot of the workbook sidebar and the actions menu of a workbook.

IronCalc regional settings panel with locale and timezone selectors
Regional settings

Official documentation screenshot of the regional settings panel, showing locale, number and date formats and time zone.

IronCalc import dialog for an .xlsx file with a drop area
Import dialog

Official documentation screenshot of the dialog for importing an .xlsx file.

IronCalc share dialog with a QR code and a copy URL button
Share dialog

Official documentation screenshot of the Share dialog, which creates a snapshot link and a QR code.

IronCalc font color picker with theme colors and standard colors
Color picker

Official documentation screenshot of the color picker with theme and standard colors.

Source: official IronCalc project page.

Key capabilities

  • Rust calculation engine The core crate evaluates formulas, tracks dependencies and formats values. It is a library, so an application can create a model, set cell input, call evaluate and read formatted values without a browser. The API documentation on docs.rs describes the Rust interface.
  • About 500 spreadsheet functions The website states roughly 500 functions, grouped in the docs into lookup and reference, financial, engineering, database, statistical, text, math and trigonometry, logical, date and time, and information. Each function has a documentation page, and project contributors have been adding tests function by function. Check the function list for anything your workbooks depend on.
  • Dynamic arrays, LET and LAMBDA The 0.8 line added dynamic arrays, and the site lists LET and LAMBDA. Spill behavior and implicit intersection are areas where engines differ, so run your own formulas against Excel results.
  • .xlsx import and export The xlsx crate reads and writes Excel workbooks, and the web app can import a file by drag and drop and download a workbook as .xlsx. Features outside the supported set may be dropped, so compare a round-tripped file with the original.
  • Web application app.ironcalc.com provides a spreadsheet with a formula bar, a style toolbar, multiple sheets, freeze panes, undo and redo, autofill, hyperlinks and merged cells. The docs call it a work in progress.
  • Workbook management and templates The side panel lists workbooks and offers actions such as download, pin, duplicate and delete. A File menu offers New from template, Import, Download and a default language. See the workbook management page.
  • Sharing by snapshot link The Share button creates a link and a QR code. The docs explain that it is a snapshot: later edits to the original do not appear in the shared copy, and each link is independent. The pages reviewed do not say where shared copies are stored or whether they expire.
  • Cell styles, themes and named styles Fonts, fills, borders, number formats and named styles are supported, with theme colors and a color picker. The 0.8 release introduced themes, and the web app has light and dark appearance.
  • Conditional formatting Rule-based formatting, color scales, data bars and icon sets are documented in the conditional formatting guide, and the engine keeps the rules in the workbook model.
  • Named ranges A name manager defines and edits named ranges for use in formulas. See the name manager page.
  • Locales, languages and time zones Regional settings control the number format, date and time format, formula delimiter and time zone. The web app has a language selector with English (US and GB), Spanish, French, German and Italian, as shown in the docs. Date functions such as TODAY and NOW depend on the time zone.
  • Python bindings pip install ironcalc installs a package with a high-level UserModel API, which has undo and redo and produces diffs, and a lower-level Model API where you call evaluate() yourself. Both can read and write .xlsx files. See the Python bindings page.
  • JavaScript and WebAssembly packages @ironcalc/wasm contains the engine only, @ironcalc/wasm-xlsx adds .xlsx import and export, and a Node.js binding exists in the repository. This lets a web app run calculations client-side.
  • Embeddable component The repository includes the web interface as a React package and an embed site. The v0.9.1 release added dark mode for embeds. The docs note that the JavaScript bindings page is still under construction, so read the source for the embedding contract.
  • Docker deployment of the web app docker compose up --build builds a server image and a Caddy image and serves the app on port 2080. The compose file pins images tagged 0.9.1 under ghcr.io/ironcalc. This is the documented self-hosting route, and the stack has no user accounts.
  • TironCalc terminal interface The TUI is built with the ratatui library and is described in the docs as inspired by terminal spreadsheets such as sc and sc-im. The installation page is still being written.
  • Keyboard shortcuts and error types The docs list shortcuts, Excel-style error values and value types, which help when you are comparing behavior with another spreadsheet application.
Advertisements

Where IronCalc fits

Embedding a spreadsheet in a web application

Add the WebAssembly package or the React component to a product that needs editable tables with formulas. Build a model, bind cells to your data, and check that the formulas you need exist in the function reference. Test load time and memory on large sheets, because the engine runs in the browser, and decide early whether users need .xlsx import, since that lives in the separate wasm-xlsx package and adds download size.

Evaluating formulas on a server

Use the Rust crate, the Node.js binding or the Python package to open an .xlsx file, change input cells, call evaluate and read the results. Compare outputs against Excel for a sample of real workbooks. Prefer the raw model API for batch jobs and the user API where undo history or diffs are needed.

Generating styled reports

The Python docs describe building workbooks with styles, named styles and conditional formatting and saving them to .xlsx. Create a report from a template workbook, then open the result in Excel and LibreOffice to confirm that fonts, number formats and rules survived.

Importing and cleaning spreadsheets

Use the web application's import dialog to open an .xlsx file and inspect how formulas, merged cells and formats come through. The unsupported features page is the first place to check before assuming a workbook will convert fully.

Running a private instance

Start the Docker Compose stack to host the web application behind your own proxy. Because there are no accounts, put access control in front of it, and confirm what the share feature stores on your server before enabling it for users.

Contributing to Excel compatibility

Compatibility is the project's stated goal, and contributors have added function tests in batches. Pick a function category, write test cases from documented Excel behavior, and report mismatches through the issue tracker or the project's Discord.

Install

pip install ironcalc

Reviews of IronCalc

No reviews yet

Be the first to share your experience with IronCalc.

Loading review form…

Alternatives to IronCalc

Compare IronCalc with these tools →