Reactivepad consists of the calculation engine which is responsible for:
- parsing formulas, which means tokenizing string like =SUM(table1[Column1]) + 100, then resolving and evaluating dependencies
- performing the actual calculations (with the support for ~380 Excel functions)
- ensuring consistency across the formula dependency graph, i.e. change in "a" recalculates "b" given that "b" is derived from "a" (directly or not)
On top of that, there is a view layer that consumes the outcomes of the calculation engine and presents them in the UI. We use React components here as they naturally react to data changes and re-update the UI.
The last part is the plugins system for the text editors, i.e. for DraftJS and ProseMirror, both of which integrate the previous parts into editors' architecture. They allow placing formulas within the textual content, right in-between words. It ensures that often very dynamic changes in formulas characters' length on recalculations (i.e. like "10" becomes "10000") don't break the document flow and the content stays consistent.
Apart from inline formulas, there are also spreadsheet-like tables which are rendered as atomic blocks. Reactivepad stores formulas & tables JSON data inside editors document structure. This is necessary so that formulas are not lost after closing the document as well as they can be restored when the document is reopened.
At last, the plugin is responsible to sync formulas from the document with the calculation engine.
Reactivepad is completely client-side and we do not have access to any of your data, nor we use any kind of analytics.