IronCalc v0.8 is by far our biggest release to date. We internally nicknamed it the dynamic arrays release: formulas can now spill into neighbouring cells, making IronCalc a powerful engine. You can create full ranges of numbers with SEQUENCE, or FILTER values, SORT them, MAP and REDUCE, remove duplicates with UNIQUE. With LET and LAMBDA we have taken the engine to the next level making the formula language Turing complete.

On top of that, we've added conditional formatting, named cell styles, and full theming support, plus more than a hundred new functions across text, regex, financial, matrix, and statistical categories. Under the hood, we removed MUI entirely and rebuilt the UI on our own design system, which makes IronCalc lighter, faster, and genuinely themable.

Six people opened their first pull request during this cycle, adding much-needed fixes and new features: fixes in number formats, indexed theme color resolution on import, matrix multiplication, an implementation of the truly difficult ACCRINT... Community contributions now reach every layer of the project, from the XLSX parser up to the toolbar. Thank you all!

What's New in IronCalc v0.8

Highlights

  • Dynamic arrays and the spill operator, with the full modern function family
  • LAMBDA and LET for reusable, readable formulas
  • Conditional formatting, including icon sets and rule priorities
  • Named cell styles that can be imported, exported and edited
  • Full theming support with 9 fresh themes
  • 100+ new functions: text, regex, financial, matrix, lookup, and statistical
  • MUI removed in favour of our own design system, built on CSS variables
  • Many XLSX import/export compatibility fixes

Dynamic Arrays

Finally! With Dynamic Arrays, formulas now return ranges that spill into adjacent cells, with proper #SPILL! errors, spill outlines in the UI, and correct behaviour across undo/redo, copy/paste, cut, and autofill.

Some changes are:

  • Added dynamic arrays and the spill operator (#)
  • Added SORT, SORTBY, FILTER, UNIQUE, RANDARRAY, TEXTSPLIT and SEQUENCE, and many more
  • Some previously existing functions like SUMIF, IFERROR, IFNA, MATCH and the IF family are now array-aware
  • Fixed scalar-context conversion for arrays in non-spilling positions

LAMBDA and LET

With LET and LAMBDA, the IronCalc formula language is now Turing-complete. You can now add your own defined functions in IronCalc! Did you ever want to have your own FAHRENHEIT conversion function? Now you can. A function that computes the area of a surface? No problem. Ever find yourself repeating the same formula over and over again? We've got your back.


Conditional Formatting

Another big one for this release. No self-respecting spreadsheet can get away without conditional formatting. And IronCalc is no different. The style of a cell, background, text color, borders, formatting can depend now on their values. Opening a rainbow, pun intended, of possibilities.

We went all in on this one. You will find that adding Conditional Formatting Rules in IronCalc is a breath of fresh air. We really hope you like it. We can't wait to see what you will create.

This brings:

  • A dedicated right drawer for conditional formatting
  • Classic, Color Scale, Data bar and Icon Set rules
  • Support for rule priorities and stop if true
  • Support for multiple ranges
  • Conditional formatting rules can now be imported and exported to XLSX

Themes & Cell Styles

This release adds support for Excel themes, the palette of colors stored inside the workbook that every sheet draws from. A file themed in Excel now looks the way it should in IronCalc, and the other way around. If you use themed colors you can change the look and feel of your whole spreadsheet in seconds!

  • Workbook themes are now read and written, and theme colors resolve correctly on import
  • Added a dedicated drawer for themes, with 9 built-in themes and a theme editor
  • Added a dedicated drawer for named cell styles, with create, edit and delete

Engine & Formula Support

New Functions

  • 18 TEXT functions implemented
  • Regular expressions, at last! REGEXEXTRACT, REGEXREPLACE and REGEXTEST bring real pattern matching to the formula bar, which makes short work of pulling fields out of messy text and cleaning up imported data
  • Most remaining LOOKUP and REFERENCE functions
  • Matrix functions: MMULT, MDETERM, MINVERSE, MUNIT, MULTINOMIAL, SERIESSUM, SUMPRODUCT
  • Financial functions: ACCRINT, ACCRINTM, AMORDEGRC, AMORLINC, VDB, and 8 more
  • 19 statistical functions and 37 compatibility functions
  • Added INFO (including TIMEZONE and TIMEZONES) and CELL
  • Added a STDEV alias, and 15 further functions

Fixes & Correctness

  • Massive round of updates and fixes for financial functions and time and date functions
  • Updates and fixes to functions that take many arguments, like GCD and LCM
  • Fixes and updates to functions that support ranges, like SUM and PRODUCT
  • TRIM now collapses internal runs of spaces, Excel-style
  • Fixed date comparisons in COUNTIF / SUMIF / AVERAGEIF
  • Booleans are now handled correctly in CHISQ, BINOM, FISHER, EXPON.DIST, GAMMALN and GAUSS
  • Formulas in conditional formatting and named ranges are kept in English
  • Accept + and - as formula prefixes, and treat a leading comma as text
  • Inserting, deleting or moving rows and columns now rewrites every formula pointing at the cells that moved, so references keep following the data #1280
  • Fixed cut and paste so fixed references are maintained

XLSX Import & Export

  • Corrected the built-in numFmtId table to match ECMA-376
  • Fonts are now preserved on import, and the workbook palette override is honoured
  • Accept ECMA-376 true/false forms for xsd:boolean attributes
  • Theme colors are resolved against the workbook's theme file, and unset font color is treated as None
  • Tolerate whitespace text nodes in worksheet rels
  • xfId is now optional in cellXfs
  • Indexed color 64 is now imported as transparent #1092

App & UX

New in the App

  • Added a formula helper with function and argument hints, for now only in English and the en-US locale
  • Added new cell and column context menu #964, #944
  • F4 now cycles through reference types #1212
  • Set column width and row height precisely via a dialog #1107
  • Duplicate #1163 and reorder #1261 worksheets
  • Added workbook search to the left drawer, plus bulk deletion of workbooks
  • Added read-only mode via canEdit
  • Font size is now an editable input in the toolbar
  • Redesigned the Welcome and Templates dialogs, with new templates showcasing many of the new capabilities of the engine: themes, color palettes, LAMBDA, dynamic arrays, and more
  • Default cell width and height are now closer to Excel and other engines

Autofill

Autofill has been developed by @rezat-c, who introduced a first version in v0.7 and has kept refining it ever since. Every autofill change in this release is theirs:

  • Improved progression detection #742
  • Autofill on double-click #962
  • Results now display immediately #948
  • Original date case is preserved during autofill #947

Design System

We removed MUI as a dependency across both the widget and the app, and rebuilt the UI on plain CSS with CSS variables as the single source of truth. Along the way we added reusable Button, Input, Select, Tooltip, Modal, Menu and Textarea components, all available in Storybook and in design.ironcalc.dev.

  • The widget theme can be overridden by embedders
  • Added 3 additional border styles
  • Search, filtering and UX improvements in Named Ranges
  • Color picker cleanup, improvements and better accessibility
  • Numerous mobile-specific fixes and a smaller, consistent 12px worksheet font
  • Several a11y and focus-handling improvements throughout

Widget & Embedding

  • Added the code deployed at embed.ironcalc.com, now used for docs examples and available to anyone who would like a spreadsheet embedded in their blog or website
  • MUI fully removed from the widget
  • Added a rootContainer prop
  • @ironcalc/wasm and @ironcalc/workbook are now published to npm
  • Smaller wasm builds using regex-lite and the browser's own timezone database

Documentation

We are only getting started here, but the aim is for docs.ironcalc.com to become the one-stop place for every function and feature of IronCalc, written by humans and for humans. You can also head to ironcalc.dev, which right now is very bare bones but soon will be your one-stop shop for everything you can program with IronCalc.

  • New feature pages, including documentation for themes and the new templates
  • Documentation pages added for some functions like INFO, CELL, NOW and CHOOSE

Testing & Quality

  • Extensive new unit and XLSX tests for many functions
  • Extensive tests for cell behavior and styles
  • Test files are now generated with build.rs and organised into folders
  • Frontend UX and performance improvements, plus Biome formatting across the codebase

We are not stopping here

With this release focused on features, we will work hard to fix issues and fill in the gaps of missing features in the coming months.

But the team is busy with merged cells, links, dropdowns, validation and hey, charts are coming to town. We are designing our own DSL a la VBA, we are constantly tweaking our algorithms to be faster and our builds lighter. And let's face it, we still have a lot of work to do making sure that each function is array-friendly and covers all corner cases.

And coming soon, drumroll: collaboration. But I won't say more about that, except that in our own experiments it looks great.


New Contributors (v0.8)

Thanks to all the contributors for bearing with us, even when weeks passed without a review, and even when it took several rounds to get there. To the new ones, welcome aboard!


For the full list of changes, see the v0.8.0 release on GitHub.