Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
42ae583
Deploying docs with we-are-hiring banner (#1596)
sequba Jan 2, 2026
c115813
Docs: Add sitemap and robots.txt (#1601)
sequba Jan 8, 2026
a48ef73
Remove tests and test-related configuration from the public repositor…
sequba Jan 28, 2026
e5bb1ed
Remove tests and test-related configuration from the public repositor…
sequba Jan 28, 2026
639bc2d
Add smoke tests (#1613)
sequba Jan 29, 2026
6d66c11
Add smoke tests (#1614)
sequba Jan 30, 2026
5966ca6
3.2.0
sequba Feb 13, 2026
004bc23
Remove we-are-hiring banner
sequba Feb 18, 2026
600919e
Add information about the private test suite to our documentation and…
sequba Feb 19, 2026
689fb0d
Merge branch 'release/3.2.0'
sequba Feb 19, 2026
0d91cc8
Merge tag '3.2.0' into develop
sequba Feb 19, 2026
1fd3ca0
Fix package-lock file
sequba Feb 19, 2026
7616150
Docs: remove CodeSandbox embedded demos and add links to working exa,…
sequba Feb 20, 2026
6de904b
Deploying fix to the documentation (#1622)
sequba Feb 20, 2026
c96a600
Setup workflow with private tests repo (#1616)
qunabu Mar 4, 2026
4042b04
Fix IRR error when income > sum of payments (#1627)
sequba Mar 5, 2026
266089d
Fix: ADDRESS function ignores defaultValue when user provides empty v…
marcin-kordas-hoc Mar 24, 2026
72db14b
Describe Definition of Done for the code changes (#1642)
sequba Mar 26, 2026
0c1d130
Add TEXTJOIN function with i18n and documentation (#1640)
marcin-kordas-hoc Mar 26, 2026
04180f8
Fix #1629: resolve memory leaks in LazilyTransformingAstService and U…
marcin-kordas-hoc Apr 2, 2026
ca0bb89
Add SEQUENCE built-in function (#1645)
marcin-kordas-hoc Apr 3, 2026
357eee3
Add AI integration docs and reorganize sidebar (#1644)
GreenFlux Apr 9, 2026
736235e
Add hardcoded trial license key (#1649)
sequba Apr 14, 2026
9a510a2
Deploy docs: AI integration landing pages (#1656)
sequba Apr 15, 2026
1852159
Add PERCENTILE and QUARTILE function families (#1650)
marcin-kordas-hoc Apr 16, 2026
110a28a
Make VuePress base, dest and sitemap hostname configurable (#1663)
qunabu Apr 28, 2026
8b525cb
Fix Netlify publish dir so /docs/ is reachable (#1664)
qunabu Apr 28, 2026
362df83
HF-85: Implement all database functions (#1652)
marcin-kordas-hoc May 5, 2026
456addd
HF-122: Framework integration guides for React, Angular, Vue, Svelte …
marcin-kordas-hoc May 7, 2026
24121f8
docs: reframe AI SDK page as Vercel integration with prototype status…
GreenFlux May 11, 2026
1b6767f
Refine the AI toolkits landing pages (#1670)
sequba May 11, 2026
bbacfc9
3.3.0
sequba May 11, 2026
d213a57
Fetch hyperformula-tests before running linter (#1672)
sequba May 11, 2026
3a286f6
Improve wording in the AI toolchains landing pages
sequba May 14, 2026
f62db38
HF-161: document OFFSET function limitations (#1666)
marcin-kordas-hoc May 19, 2026
4049fa5
Change release date
sequba May 20, 2026
5f7ea1d
Improve docs links
sequba May 20, 2026
55d5380
Bring back old links
sequba May 20, 2026
68ae691
Merge branch 'release/3.3.0'
sequba May 20, 2026
508d78f
Merge branch 'release/3.3.0' into develop
sequba May 20, 2026
1a578df
Add Indonesian language pack (#1683)
sequba May 27, 2026
c7cfc9d
Improve docs UX on narrow screens (#1684)
sequba May 27, 2026
00e5c73
Clean up in-repo dev docs (HF-65) (#1682)
sequba Jun 1, 2026
0e047ee
docs: fix SSR section framing in React integration guide (#1688)
Haxikowy Jun 3, 2026
79f2f15
docs: rewrite Vue integration guide around markRaw pattern (#1689)
Haxikowy Jun 3, 2026
d4195b5
HF-238 - Review "Integration with Angular" guide and demo (#1691)
KrzysztofZie Jun 9, 2026
72205bd
docs(api): fix getAllSheetsSerialized/getRangeSerialized JSDoc for nu…
marcin-kordas-hoc Jun 15, 2026
8bfa558
docs(guide): named ranges in formulas + fix limitations pointer (HF-2…
marcin-kordas-hoc Jun 25, 2026
cffd922
HF-24: add stringifyCurrency config callback for TEXT (#1665)
marcin-kordas-hoc Jul 6, 2026
2471a37
Fix a non-correct changelog entry
sequba Jul 6, 2026
4e302ff
Update share capital in LICENSE.txt (#1700)
demtario Jul 6, 2026
d03c3e3
Add function XIRR (#1701)
sequba Jul 9, 2026
033f8ac
Add independent security certificate documentation (#1704)
sequba Jul 9, 2026
92e6c73
Update contact link for feature requests (#1706)
GreenFlux Jul 14, 2026
3064a8b
feat(functions): implement VSTACK and HSTACK (HF-71) (#1698)
marcin-kordas-hoc Jul 14, 2026
e0e1261
docs: clarify setRowOrder/setColumnOrder permutation semantics (#1687)
sequba Jul 15, 2026
fd04f77
fix(lookup): skip empty cells in approximate MATCH/VLOOKUP/HLOOKUP/XL…
marcin-kordas-hoc Jul 16, 2026
6e87a37
docs(guide): update support page (HF-128) (#1712)
GreenFlux Jul 22, 2026
fbb4710
feat: implement SORT dynamic array function (HF-69) (#1707)
marcin-kordas-hoc Jul 23, 2026
23a7437
feat: implement UNIQUE dynamic array function (HF-68) (#1708)
marcin-kordas-hoc Jul 23, 2026
3b0ebc5
Agent-friendly documentation: .md companions, llms.txt, coding-agent …
marcin-kordas-hoc Jul 27, 2026
d860eef
Add docs content guide
sequba Jul 28, 2026
ad142ba
fix: avoid catastrophic backtracking in number parsing for empty thou…
marcin-kordas-hoc Jul 28, 2026
ebaa2b2
Function metadata API: getAvailableFunctions / getFunctionDetails (HF…
marcin-kordas-hoc Jul 31, 2026
dcff210
3.4.0
sequba Aug 3, 2026
bad1bfa
Update the release script
sequba Aug 3, 2026
7df5d0b
Release script (#1723)
sequba Aug 6, 2026
a4bb95f
Merge branch 'master' into release/3.4.0
sequba Aug 6, 2026
0e58778
Update release script
sequba Aug 6, 2026
e41e4d5
Migrate the documentation deployment from Netlify to Cloudflare Worke…
qunabu Aug 7, 2026
90c7b4f
Move functions to different categories (consistency with Excel)
sequba Aug 7, 2026
814c3b3
Remove snippet testing mechanism
sequba Aug 7, 2026
f2420c3
Remove the static function metadata API (HF-349) (#1724)
sequba Aug 10, 2026
7f3c9da
Merge branch 'release/3.4.0' into develop
sequba Aug 10, 2026
61ead73
Minor change to the text showed by the release script
sequba Aug 10, 2026
db18a8e
Merge remote-tracking branch 'origin/develop' into spike/iterative-ca…
marcin-kordas-hoc Aug 19, 2026
a616349
Finish the Evaluator rename left unfinished by the WIP commit
marcin-kordas-hoc Aug 19, 2026
ce803bc
Restore the docs wording broken by the WIP commit
marcin-kordas-hoc Aug 19, 2026
08be570
Move the iterative-calculation unit tests to the private test suite
marcin-kordas-hoc Aug 19, 2026
832b580
Move the iterative-calculation changelog entry back under Unreleased
marcin-kordas-hoc Aug 19, 2026
e956c1e
Rename iterative-calculation config options per sequba's own review r…
marcin-kordas-hoc Aug 31, 2026
5a8cb26
Fix two Bugbot findings inherited from the develop merge
marcin-kordas-hoc Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .cursor/rules/main.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
description: Project-wide guidance for AI agents working in this repository
alwaysApply: true
---

All guidance for AI agents working in this repository lives in [AGENTS.md](mdc:AGENTS.md) at the repository root. Read it first.
7 changes: 7 additions & 0 deletions .cursor/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"plugins": {
"superpowers": {
"enabled": true
}
}
}
7 changes: 6 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ src/interpreter/plugin/3rdparty
*.config.js
karma.*
doc
test/unit/_setupFiles/*.js
test/_setupFiles/*.js

# Private tests repo, checked out by CI under test/hyperformula-tests. Not part of
# tsconfig.json's "include" (src only), so type-aware rules have no project to run
# against here -- linting it is the private repo's own job, not this workflow's.
test/hyperformula-tests

# Auto-generated directories
commonjs
Expand Down
4 changes: 2 additions & 2 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ module.exports = {
},
parserOptions: {
tsconfigRootDir: __dirname,
project: './tsconfig.test.json',
project: './tsconfig.json',
Comment thread
marcin-kordas-hoc marked this conversation as resolved.
createDefaultProgram: true,
},
extends: [
Expand Down Expand Up @@ -148,6 +148,6 @@ module.exports = {
rules: {
'@typescript-eslint/no-non-null-assertion': 'off',
}
}
},
],
}
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
contact_links:
- name: Feature requests and questions
url: https://github.com/handsontable/hyperformula/discussions
url: https://forum.handsontable.com/t/about-the-hyperformula-category/9073
about: Start a new discussion about your idea.
7 changes: 3 additions & 4 deletions .github/workflows/audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,12 @@ jobs:
name: audit
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d # https://github.com/actions/setup-node/releases/tag/v1.4.4
with:
node-version: ${{ matrix.node-version }}

- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Run audit
run: |
npm run audit
run: npm run audit
10 changes: 4 additions & 6 deletions .github/workflows/build-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,15 @@ jobs:
name: build-docs
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d # https://github.com/actions/setup-node/releases/tag/v1.4.4
with:
node-version: ${{ matrix.node-version }}

- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Install dependencies
run: |
npm ci
run: npm ci

- name: Build docs
run: |
npm run docs:build
run: npm run docs:build
10 changes: 4 additions & 6 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,15 @@ jobs:
install-command: [ i, ci ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d # https://github.com/actions/setup-node/releases/tag/v1.4.4
with:
node-version: ${{ matrix.node-version }}

- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Install dependencies
run: |
npm ${{ matrix.install-command }}
run: npm ${{ matrix.install-command }}

- name: Build
run: |
npm run bundle-all
run: npm run bundle-all
21 changes: 15 additions & 6 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,26 @@ jobs:
name: lint
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d # https://github.com/actions/setup-node/releases/tag/v1.4.4
with:
node-version: ${{ matrix.node-version }}

- name: Checkout main repository
uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Checkout hyperformula-tests repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ssh-key: ${{ secrets.DEPLOY_TOKEN }}
repository: handsontable/hyperformula-tests
path: test/hyperformula-tests

- name: Fetch hyperformula-tests and sync branches
run: cd test && ./fetch-tests.sh

- name: Install dependencies
run: |
npm ci
run: npm ci

- name: Run linter
run: |
npm run lint
run: npm run lint
23 changes: 15 additions & 8 deletions .github/workflows/performance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,27 +24,34 @@ jobs:
with:
node-version: ${{ matrix.node-version }}

- name: (base) Checkout
- name: (base) Checkout main repository
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # https://github.com/actions/checkout/releases/tag/v2.3.4
with:
ref: ${{ github.event.pull_request.base.sha }}

- name: Checkout hyperformula-tests repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ssh-key: ${{ secrets.DEPLOY_TOKEN }}
repository: handsontable/hyperformula-tests
path: test/hyperformula-tests

- name: Fetch hyperformula-tests and sync branches
run: cd test && ./fetch-tests.sh

- name: (base) Install dependencies
run: |
npm ci
run: npm ci

- name: (base) Run performance tests
run: |
npm run benchmark:write-to-file base.json
run: npm run benchmark:write-to-file base.json

- name: (head) Checkout
- name: (head) Checkout main repository
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f # https://github.com/actions/checkout/releases/tag/v2.3.4
with:
clean: false

- name: (head) Install dependencies
run: |
npm ci
run: npm ci

- name: (head) Run performance tests
run: |
Expand Down
10 changes: 4 additions & 6 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,18 @@ jobs:
name: publish-docs
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d # https://github.com/actions/setup-node/releases/tag/v1.4.4
with:
node-version: ${{ matrix.node-version }}

- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Install dependencies
run: |
npm ci
run: npm ci

- name: Build docs
run: |
npm run docs:build
run: npm run docs:build

- name: Deploy to GH pages
uses: peaceiris/actions-gh-pages@ba0b7df03e25ff29c924be8149041119e9421ea6 # https://github.com/peaceiris/actions-gh-pages/releases/tag/v3.5.6
Expand Down
43 changes: 31 additions & 12 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,30 @@ jobs:
name: unit-tests
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d # https://github.com/actions/setup-node/releases/tag/v1.4.4
with:
node-version: ${{ matrix.node-version }}

- name: Checkout main repository
uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Checkout hyperformula-tests repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ssh-key: ${{ secrets.DEPLOY_TOKEN }}
repository: handsontable/hyperformula-tests
path: test/hyperformula-tests

- name: Fetch hyperformula-tests and sync branches
run: cd test && ./fetch-tests.sh

- name: Install dependencies
run: |
npm ci
run: npm ci

- name: Run tests
run: |
npm run test:unit.ci -- --coverage
run: npm run test:ci -- --coverage


- name: Upload coverage to Codecov
uses: codecov/codecov-action@6004246f47ab62d32be025ce173b241cd84ac58e # https://github.com/codecov/codecov-action/releases/tag/v1.0.13
Expand All @@ -51,17 +61,26 @@ jobs:
name: browser-tests
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d # https://github.com/actions/setup-node/releases/tag/v1.4.4
with:
node-version: ${{ matrix.node-version }}

- name: Checkout main repository
uses: actions/checkout@722adc63f1aa60a57ec37892e133b1d319cae598 # https://github.com/actions/checkout/releases/tag/v2.0.0

- name: Checkout hyperformula-tests repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ssh-key: ${{ secrets.DEPLOY_TOKEN }}
repository: handsontable/hyperformula-tests
path: test/hyperformula-tests

- name: Fetch hyperformula-tests and sync branches
run: cd test && ./fetch-tests.sh

- name: Install dependencies
run: |
npm ci
run: npm ci

- name: Run tests
run: |
npm run test:browser
run: npm run test:browser
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,12 @@ node_modules/
*.iml
dev*.html
.DS_Store

/test/hyperformula-tests/

# Generated at docs:build from built-in-functions.tmpl.md (HF-249 single-source); do not commit.
docs/guide/built-in-functions.md

# Wrangler (Cloudflare Workers) local state
.wrangler
.dev.vars*
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v16
22
44 changes: 44 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# AGENTS.md

Instructions for AI coding agents (Cursor, Claude Code, Codex, Aider, and any other AI tool) working in this repository.

## Start here

Whatever you do, start by reading entire [DEV_DOCS.md](DEV_DOCS.md). Only then proceed to your task.

## Other important resources

- the repository [README.md](README.md) — high-level project description and quick install/usage
- the markdown files in [`docs/guide/`](docs/guide/) — user-facing guides (installation, configuration, built-in functions, custom functions, integrations, etc.)
- the markdown files in [`docs/api/`](docs/api/) — API reference (generated from JSDoc; run `npm run docs:build` if the folder is missing)

Prefer reading these local files over fetching the rendered documentation from the web.

## Response style

- Be concise by default. Use as few words as possible unless the user asks for more detail.
- When the user asks for specific content, lead the response with the requested information.
- Structure answers with bullet lists, numbered lists, tables, or code blocks where useful.
- Ask clarifying questions when the request is ambiguous rather than guessing.
- If you do not know something, say so and ask for help.
- When answering from project documentation, quote the exact relevant fragments to support your claim.

## Common ways agents fail

This section is maintained by the team. Whenever an AI agent makes a mistake worth flagging, an item is added here describing what the agent did wrong and what it should have done instead. Read this list before starting any non-trivial task.

<!-- Add new items to the top of the list. Use the format:
- **Short title** &mdash; What the agent did wrong. What it should have done instead.
-->

1. Often pull request descriptions becomes obsolete. Remember to update it as you work.

## Skills, MCPs, and other agent tools

This section is maintained by the team. Skills, MCP servers, and other tools vetted as useful for AI agents working on this codebase are listed here.

<!-- Add new items here. Use the format:
- **Name** &mdash; What it provides and when to use it.
-->

_No items yet._
40 changes: 40 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,46 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
### Added

- Added iterative calculation support for circular references. [#1545](https://github.com/handsontable/hyperformula/issues/1545)

## [3.4.0] - 2026-08-10

### Added

- Added the `getAvailableFunctions()` and `getFunctionDetails()` instance methods for retrieving function metadata. [#1692](https://github.com/handsontable/hyperformula/pull/1692)
- Added new functions: VSTACK, HSTACK. [#1698](https://github.com/handsontable/hyperformula/pull/1698)
- Added a new function: `XIRR`. [#1701](https://github.com/handsontable/hyperformula/pull/1701)
- Added the UNIQUE function. [#1708](https://github.com/handsontable/hyperformula/pull/1708)
- Added the SORT function. [#1707](https://github.com/handsontable/hyperformula/pull/1707)
- Added an Indonesian (Bahasa Indonesia) language pack. [#1674](https://github.com/handsontable/hyperformula/pull/1674)
- Added a `stringifyCurrency` config option that lets you plug in a custom currency formatter for the `TEXT` function. [#1145](https://github.com/handsontable/hyperformula/issues/1145)

### Fixed

- Fixed the behavior of `MATCH`, `VLOOKUP`, `HLOOKUP`, and `XLOOKUP` functions when the search range contained empty cells. [#1697](https://github.com/handsontable/hyperformula/pull/1697)
- 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](https://github.com/handsontable/hyperformula/pull/1697)
- 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](https://github.com/handsontable/hyperformula/issues/1520)

## [3.3.0] - 2026-05-20

### Added

- Added 12 database functions: DCOUNT, DSUM, DAVERAGE, DMAX, DMIN, DGET, DPRODUCT, DCOUNTA, DSTDEV, DSTDEVP, DVAR, DVARP. [#1652](https://github.com/handsontable/hyperformula/pull/1652)
- Added new functions: PERCENTILE, PERCENTILE.INC, PERCENTILE.EXC, QUARTILE, QUARTILE.INC, QUARTILE.EXC. [#1650](https://github.com/handsontable/hyperformula/pull/1650)
- Added `maxPendingLazyTransformations` configuration option to control memory usage by limiting accumulated transformations before cleanup. [#1629](https://github.com/handsontable/hyperformula/issues/1629)
- Added a new function: TEXTJOIN. [#1640](https://github.com/handsontable/hyperformula/pull/1640)
- Added a new function: SEQUENCE. [#1645](https://github.com/handsontable/hyperformula/pull/1645)

### Fixed

- Fixed a memory leak in `LazilyTransformingAstService` where the transformations array grew unboundedly, causing increasing memory usage over time. [#1629](https://github.com/handsontable/hyperformula/issues/1629)
- 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](https://github.com/handsontable/hyperformula/issues/1629)
- Fixed the IRR function returning `#NUM!` error when the initial investment significantly exceeds the sum of returns. [#1628](https://github.com/handsontable/hyperformula/issues/1628)
- Fixed the ADDRESS function ignoring `defaultValue` when arguments are syntactically empty (e.g., `=ADDRESS(2,3,,FALSE())`). [#1632](https://github.com/handsontable/hyperformula/issues/1632)

## [3.2.0] - 2026-02-19

### Added

- Added a new function: IRR. [#1591](https://github.com/handsontable/hyperformula/issues/1591)
- Added a new function: N. [#1585](https://github.com/handsontable/hyperformula/issues/1585)
- Added a new function: VALUE. [#1592](https://github.com/handsontable/hyperformula/issues/1592)
Expand Down
Loading
Loading