# Release notes

This page lists HyperFormula release notes. The format is based on Keep a Changelog (opens new window).

HyperFormula adheres to Semantic Versioning (opens new window).

# 3.5.0

Release date: October 9, 2026

# Added

  • Added support for the new license key format. A proprietary key can now grant a subset of the library: a function your key does not include evaluates to a #LIC! error, and the matching parts of the API throw a LicenseCapabilityMissingError. getAvailableFunctions() and getFunctionDetails() describe only the functions your key includes. #1728 (opens new window)

# Changed

  • Changed the VERSION function to return only the HyperFormula version (e.g. HyperFormula v3.4.0), without the license key status. #1728 (opens new window)
  • Changed the API methods gated by the license key to throw a LicenseCapabilityMissingError when the key is missing or invalid, when a classic key has expired, or when a trial key is past its grace period. The gated methods are the ones that edit cells, rows, columns, and sheets, copy(), cut(), paste(), undo(), redo(), batch(), suspendEvaluation(), and the methods that add, change, or remove named expressions. Building an engine with named expressions throws the same error, and the matching isItPossibleTo*() methods, isThereSomethingToUndo(), and isThereSomethingToRedo() return false. #1728 (opens new window)
  • Changed the MAXPOOL and MEDIANPOOL functions to accept a stride greater than the window size in a cell, where they returned the #VALUE! error before. The windows then skip the rows and columns between them, as calculateFormula() already did. #1718 (opens new window)

# Fixed

  • Fixed the validation of classic (25-character) license keys depending on the time zone: east of UTC, a key that expired the day before the build was released was still accepted, and west of UTC, the console message printed an expiry date one day too early. #1728 (opens new window)
  • Fixed the AVERAGEIF function returning a division-by-zero error when the calculated average was 0. #1733 (opens new window)
  • Fixed the localized names of VSTACK and HSTACK in 14 language packs to match Microsoft Excel. #1748 (opens new window)
  • Fixed the MAXPOOL and MEDIANPOOL functions throwing an uncaught TypeError or RangeError. They now return the #VALUE! error when the window is larger than the range or the range dimensions, reduced by the window size, are not whole multiples of the stride, and the #NUM! error when the window size or the stride is not a positive integer. #1718 (opens new window)
  • Fixed the VAR, STDEV, DEVSQ, COVARIANCE.P, COVARIANCE.S, SLOPE, STEYX, DVAR and DSTDEV functions, their variants, and the matching SUBTOTAL modes losing precision on data with a large mean and a small spread. #1784 (opens new window)
  • Fixed a bug where SLOPE and STEYX returned #NUM! or an arbitrary number instead of #DIV/0! when all the x values are equal. #1784 (opens new window)
  • Fixed a bug where STEYX returned #NUM! or 0 instead of the standard error for points that lie almost on a line. #1784 (opens new window)
  • Fixed a bug where VAR, STDEV, DVAR, DSTDEV, COVARIANCE.P, COVARIANCE.S, SLOPE, STEYX, their variants, and the matching SUBTOTAL modes returned an error or 0 for very large or very small values although the result was within the range of numbers, and DEVSQ returned 0 for very small values. #1784 (opens new window)
  • Fixed the MOD function returning a remainder with the sign of the dividend instead of the sign of the divisor, which made the results differ from Excel and Google Sheets for arguments with opposite signs (e.g. =MOD(-3, 12) now returns 9 instead of -3). #1747 (opens new window)
  • Fixed a bug where moving or pasting a formula with an undefined name to another sheet incorrectly added an empty global named expression. #1728 (opens new window)

# 3.4.0

Release date: August 10, 2026

# Added

# Fixed

  • Fixed the behavior of MATCH, VLOOKUP, HLOOKUP, and XLOOKUP functions when the search range contained empty cells. #1697 (opens new window)
  • Fixed the VLOOKUP, HLOOKUP, and XLOOKUP functions to return 0 instead of an empty value when the matched cell in the result range is empty. #1697 (opens new window)
  • Fixed the page freezing when entering a long string of digits containing a non-digit character near the end (e.g. 012...789a or 012...789 123) into a cell. #1520 (opens new window)

# 3.3.0

Release date: May 20, 2026

# Added

# Fixed

  • Fixed a memory leak in LazilyTransformingAstService where the transformations array grew unboundedly, causing increasing memory usage over time. #1629 (opens new window)
  • Fixed a memory leak in UndoRedo where oldData entries for evicted undo stack entries were never cleaned up, causing increasing memory usage over time. #1629 (opens new window)
  • Fixed the IRR function returning #NUM! error when the initial investment significantly exceeds the sum of returns. #1628 (opens new window)
  • Fixed the ADDRESS function ignoring defaultValue when arguments are syntactically empty (e.g., =ADDRESS(2,3,,FALSE())). #1632 (opens new window)

# 3.2.0

Release date: February 19, 2026

# Added

# Fixed

# 3.1.1

Release date: December 18, 2025

# Fixed

  • Fixed an issue where cells were not recalculated after adding, removing and renaming sheets. #1116 (opens new window)
  • Fixed an issue where overwriting a non-computed cell caused the Value of the formula cell is not computed error. #1194 (opens new window)

# 3.1.0

Release date: October 14, 2025

# Changed

  • Renamed the arraySizeMethod parameter in the FunctionMetadata interface to sizeOfResultArrayMethod. The arraySizeMethod is deprecated and will be removed in one of the next major releases. #1401 (opens new window)
  • Renamed the arrayFunction parameter in the FunctionMetadata interface to enableArrayArithmeticForArguments. The arrayFunction is deprecated and will be removed in one of the next major releases. #1401 (opens new window)

# Fixed

  • Fixed an issue where the OFFSET function was ignoring the sheet reference in the provided address. #1477 (opens new window)

# 3.0.1

Release date: August 11, 2025

# Fixed

# 3.0.0

Release date: January 14, 2025

# Added

# Changed

  • Breaking change: Changed ES module build to use mjs files and exports property in package.json to make importing language files possible in Node environment. #1344 (opens new window)
  • Breaking change: Changed the default value of the precisionRounding configuration option to 10. #1300 (opens new window)
  • Make methods simpleCellAddressToString and simpleCellRangeToString more logical and easier to use. #1151 (opens new window)

# Removed

# 2.7.1

Release date: July 18, 2024

# Fixed

  • Fixed an issue where adding or removing columns with DenseStrategy for address mapping resulted in the Cannot read properties of undefined (reading 'splice') error. #1406 (opens new window)

# 2.7.0

Release date: Apr 10, 2024

# Added

# 2.6.2

Release date: Feb 15, 2024

# Changed

# 2.6.1

Release date: Dec 27, 2023

# Fixed

# 2.6.0

Release date: Sep 19, 2023

# Added

  • Exported the EmptyValue symbol as a public API. This allows custom functions to handle empty cell values. #1232 (opens new window)

# Changed

# Fixed

# 2.5.0

Release date: May 29, 2023

# Added

# Changed

# Fixed

# 2.4.0

Release date: April 24, 2023

# Added

# Fixed

# 2.3.1

Release date: March 3, 2023

# Fixed

  • Fixed an issue where named-expression names were not allowed to start with a cell reference. #1058 (opens new window)
  • Fixed an issue where named-expression names were allowed to start with "R1C1" cell references. For better compatibility with other spreadsheet software, strings such as R4C5, RC1000, R1C or RC can't be used in named-expression names anymore. #1058 (opens new window)
  • Fixed an issue where using reversed ranges with absolute addressing could cause the Incorrect array size error. #1106 (opens new window)
  • Fixed an issue where removing a sheet (removeSheet()) without clearing it (clearSheet()) could cause an error. #1121 (opens new window)

# 2.3.0

Release date: December 22, 2022

# Added

# 2.2.0

Release date: November 17, 2022

# Added

  • Added an American English (enUS) language pack. It's a convenience alias: it contains the same translations as the existing British English (enGB) language pack. #1025 (opens new window)

# Fixed

# 2.1.0

Release date: September 8, 2022

# Added

# Changed

  • Changed the rounding strategy of the default time-parsing function to be independent of the timeFormats configuration option. Now, time values are always rounded to the nearest millisecond (0.001 s). #953 (opens new window)

# Fixed

  • Fixed a rounding issue that caused the TEXT function to convert dates and times to strings incorrectly. #1043 (opens new window)
  • Fixed an issue where functions SUMIF, SUMIFS, COUNTIF, COUNTIFS, and AVERAGEIF incorrectly handled complex numeric values. #951 (opens new window)

# Removed

# 2.0.1

Release date: June 14, 2022

# Changed

  • Changed the following npm scripts (used internally): docs, docs:api, docs:dev, docs:build, coverage, typings:check. #977 (opens new window)

# Fixed

# 2.0.0

Release date: April 14, 2022

# Added

# Changed

# Fixed

# 1.3.1

Release date: January 11, 2022

# Fixed

  • Fixed an issue where warnings about deprecated configuration options were getting duplicated. #882 (opens new window)

# 1.3.0

Release date: October 20, 2021

# Added

# Fixed

# 1.2.0

Release date: September 23, 2021

# Changed

  • Removed gpu.js from optional dependencies and marked config options gpujs and gpuMode as deprecated.

# 1.1.0

Release date: August 12, 2021

# Added

  • Added support for the array arithmetic mode in the calculateFormula() method. #782 (opens new window)
  • Added a new CellType returned by getCellType: CellType.ARRAYFORMULA. It's assigned to the top-left corner of an array, and is recognized by the isCellPartOfArray() and doesCellHaveFormula() methods. #781 (opens new window)

# Changed

  • Deprecated the binarySearchThreshold configuration option, as every search of sorted data always uses binary search. #791 (opens new window)

# Fixed

# 1.0.0

Release date: July 15, 2021

# Added

# Changed

  • Breaking change: Changed API of many sheet-related methods to take sheetId instead of sheetName as an argument. #645 (opens new window)
  • Breaking change: Removed support for matrix formulas ({=FORMULA}) notation. Engine now supports formulas returning array of values (instead of only scalars). #652 (opens new window)
  • Breaking change: Removed numeric matrix detection along with matrixDetection and matrixDetectionThreshold config options. #669 (opens new window)
  • Breaking change: Changed API of the following methods to take SimpleCellRange type argument: copy, cut, getCellDependents, getCellPrecedents, getFillRangeData, getRangeFormulas, getRangeSerialized, getRangeValues, isItPossibleToMoveCells, isItPossibleToSetCellContents, moveCells. #687 (opens new window)
  • Breaking change: Changed the AGPLv3 license to GPLv3.
  • Breaking change: Removed the free non-commercial license.
  • Breaking change: Changed behaviour of setCellContents so that it is possible to override space occupied by spilled array. #708 (opens new window)
  • Breaking change: Changed behaviour of addRows/removeRows so that it is possible to add/remove rows across spilled array without changing array size. #708 (opens new window)
  • Breaking change: Changed behaviour of addColumns/removeColumns so that it is possible to add/remove columns across spilled array without changing array size. #732 (opens new window)
  • Breaking change: Changed config options #747 (opens new window):
before after
matrixColumnSeparator arrayColumnSeparator
matrixRowSeparator arrayRowSeparator
before after
matrixMapping arrrayMapping
isCellPartOfMatrix isCellPartOfArray
before after
SourceLocationHasMatrixError SourceLocationHasArrayError
TargetLocationHasMatrixError TargetLocationHasArrayError
  • Changed SWITCH function, so it takes array as its first argument.
  • Changed TRANSPOSE function, so it works with data of any type. #708 (opens new window)
  • Changed the way how we include gpu.js making it even more optional #753 (opens new window)

# Fixed

# 0.6.2

Release date: May 26, 2021

# Changed

  • Modified a private field in one of the classes to ensure broader compatibility with older TypeScript versions. #681 (opens new window)

# 0.6.1

Release date: May 24, 2021

# Changed

# Fixed

# 0.6.0

Release date: April 27, 2021

# Added

# Changed

  • Breaking change: Moved GPU.js from dependencies to devDependencies and optionalDependencies. #642 (opens new window)

# Fixed

# 0.5.0

Release date: April 15, 2021

# Added

# Changed

# Fixed

# 0.4.0

Release date: December 17, 2020

# Added

  • Added 50 mathematical functions: ROMAN, ARABIC, FACT, FACTDOUBLE, COMBIN, COMBINA, GCD, LCM, MROUND, MULTINOMIAL, QUOTIENT, RANDBETWEEN, SERIESSUM, SIGN, SQRTPI, SUMX2MY2, SUMX2PY2, SUMXMY2, CEILING.MATH, FLOOR.MATH, FLOOR, CEILING.PRECISE, FLOOR.PRECISE, ISO.CEILING, COMPLEX, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN. #537 (opens new window) , #582 (opens new window) , #281 (opens new window) , #581 (opens new window)
  • Added 106 statistical functions: EXPON.DIST, EXPONDIST, FISHER, FISHERINV, GAMMA, GAMMA.DIST, GAMMADIST, GAMMALN, GAMMALN.PRECISE, GAMMA.INV, GAMMAINV, GAUSS, BETA.DIST, BETADIST, BETA.INV, BETAINV, BINOM.DIST, BINOMDIST, BINOM.INV, BESSELI, BESSELJ, BESSELK, BESSELY, CHISQ.DIST, CHISQ.DIST.RT, CHISQ.INV, CHISQ.INV.RT, CHIDIST, CHIINV, F.DIST, F.DIST.RT, F.INV, F.INV.RT, FDIST, FINV, WEIBULL, WEIBULL.DIST, HYPGEOMDIST, HYPGEOM.DIST, T.DIST, T.DIST.2T, T.DIST.RT, T.INV, T.INV.2T, TDIST, TINV, LOGNORM.DIST, LOGNORMDIST, LOGNORM.INV, LOGINV, NORM.DIST, NORMDIST, NORM.S.DIST, NORMSDIST, NORM.INV, NORMINV, NORM.S.INV, NORMSINV, PHI, NEGBINOM.DIST, NEGBINOMDIST, POISSON, POISSON.DIST, LARGE, SMALL, AVEDEV, CONFIDENCE, CONFIDENCE.NORM, CONFIDENCE.T, DEVSQ, GEOMEAN, HARMEAN, CRITBINOM, COVAR, COVARIANCE.P, COVARIANCE.S, PEARSON, RSQ, STANDARDIZE, Z.TEST, ZTEST, F.TEST, FTEST, STEYX, SLOPE, CHITEST, CHISQ.TEST, T.TEST, TTEST, SKEW.P, SKEW, WEIBULLDIST, VARS, TINV2T, TDISTRT, TDIST2T, STDEVS, FINVRT, FDISTRT, CHIDISTRT, CHIINVRT, COVARIANCEP, COVARIANCES, LOGNORMINV, POISSONDIST, SKEWP. #152 (opens new window) , #154 (opens new window) , #160 (opens new window)
  • Added function aliases mechanism. #569 (opens new window)
  • Added support for scientific notation. #579 (opens new window)
  • Added support for complex numbers. #281 (opens new window)

# Changed

  • A breaking change: CEILING function implementation to be consistent with existing implementations. #582 (opens new window)

# Fixed

# 0.3.0

Release date: October 22, 2020

# Added

  • Added 9 text functions EXACT, LOWER, UPPER, MID, T, SUBSTITUTE, REPLACE, UNICODE, UNICHAR. #159 (opens new window)
  • Added 5 datetime functions: INTERVAL, NETWORKDAYS, NETWORKDAYS.INTL, WORKDAY, WORKDAY.INTL. #153 (opens new window)
  • Added 3 information functions HLOOKUP, ROW, COLUMN. #520 (opens new window)
  • Added 5 financial functions FVSCHEDULE, NPV, MIRR, PDURATION, XNPV. #542 (opens new window)
  • Added 12 statistical functions VAR.P, VAR.S, VARA, VARPA, STDEV.P, STDEV.S, STDEVA, STDEVPA, VARP, VAR, STDEVP, STDEV. #536 (opens new window)
  • Added 2 mathematical functions SUBTOTAL, PRODUCT. #536 (opens new window)
  • Added 15 operator functions HF.ADD, HF.CONCAT, HF.DIVIDE, HF.EQ, HF.GT, HF.GTE, HF.LT, HF.LTE, HF.MINUS, HF.MULTIPLY, HF.NE, HF.POW, HF.UMINUS, HF.UNARY_PERCENT, HF.UPLUS. #543 (opens new window)

# Fixed

# 0.2.0

Release date: September 22, 2020

# Added

# Changed

  • Operation moveCells creating cyclic dependencies does not cause losing original formula. #479 (opens new window)
  • Simplified adding new function modules, reworked (simplified) implementations of existing modules. #480 (opens new window)

# Fixed

# 0.1.3

Release date: July 21, 2020

# Fixed

# 0.1.2

Release date: July 13, 2020

# Fixed

# 0.1.1

Release date: July 1, 2020

# Fixed

# 0.1.0

Alpha release date: June 25, 2020 🎉

  • Core functionality of the engine
  • Support for data types: String, Error, Number, Date, Time, DateTime, Duration, Distinct Logical
  • Support for logical operators: =, <>, >, <, >=, <=
  • Support for arithmetic operators: +, -, *, /, %
  • Support for text operator: &
  • CRUD operations:
    • modifying the value of a single cell
    • adding/deleting row/column
    • reading the value or formula from the selected cell
    • moving a cell or a block of cells
    • deleting a subset of rows or columns
    • recalculating and refreshing of a worksheet
    • batching CRUD operations
    • support for wildcards and regex inside criterion functions like SUMIF, COUNTIF
    • named expressions support
    • support for cut, copy, paste
    • undo/redo support
  • The following functions: ABS(), ACOS(), AND(), ASIN(), ATAN(), ATAN2(), AVERAGE(), AVERAGEA(), AVERAGEIF(), BASE(), BIN2DEC(), BIN2HEX()BIN2OCT(), BITAND(), BITLSHIFT(), BITOR(), BITRSHIFT(), BITXOR(), CEILING(), CHAR(), CHOOSE(), CODE(), COLUMNS(), CONCATENATE(), CORREL(), COS(), COT(), COUNT(), COUNTA(), COUNTBLANK(), COUNTIF(), COUNTIFS(), COUNTUNIQUE(), DATE(), DAY(), DAYS(), DEC2BIN(), DEC2HEX(), DEC2OCT(), DECIMAL(), DEGREES(), DELTA(), E(), EOMONTH(), ERF(), ERFC(), EVEN(), EXP(), FALSE(), IF(), IFERROR(), IFNA(), INDEX(), INT(), ISBLANK(), ISERROR(), ISEVEN(), ISLOGICAL(), ISNONTEXT(), ISNUMBER(), ISODD(), ISTEXT(), LN(), LOG(), LOG10(), MATCH(), MAX(), MAXA(), MAXPOOL(), MEDIAN(), MEDIANPOOL(), MIN(), MINA(), MMULT(), MOD(), MONTH(), NOT(), ODD(), OFFSET(), OR(), PI(), POWER(), RADIANS() , RAND(), ROUND(), ROUNDDOWN(), ROUNDUP(), ROWS(), SIN(), SPLIT(), SQRT(), SUM(), SUMIF(), SUMIFS(), SUMPRODUCT(), SUMSQ(), SWITCH(), TAN(), TEXT(), TRANSPOSE(), TRUE(), TRUNC(), VLOOKUP(), XOR(), YEAR()
  • Support for volatile functions
  • Cultures supports - can be configured according to the application need
  • Custom functions support
  • Set OpenDocument v1.2 (opens new window) as a standard to follow
  • Error handling:
    • Division by zero: #DIV/0!
    • Unknown function name: #NAME?
    • Wrong type of argument in a function or wrong type of operator: #VALUE!
    • Invalid numeric values: #NUM!
    • No value available: #N/A
    • Cyclic dependency: #CYCLE!
    • Wrong address reference: #REF
  • Built-in function translation support for 16 languages: English, Czech, Danish, Dutch, Finnish, French, German, Hungarian, Italian, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish, Turkish.