[HN Gopher] IronCalc - Open-Source Spreadsheet Engine
___________________________________________________________________
IronCalc - Open-Source Spreadsheet Engine
Author : kaathewise
Score : 147 points
Date : 2024-11-09 16:36 UTC (6 hours ago)
(HTM) web link (www.ironcalc.com)
(TXT) w3m dump (www.ironcalc.com)
| kaathewise wrote:
| A spreadsheet engine. It's a React app with a Rust backend, but
| it impressed me how snappy it was[0]. Of course, it's not nearly
| as feature rich as Google Sheets, not to mention Excel.
|
| [0]: https://app.ironcalc.com/
| mdaniel wrote:
| "backend" seemed to imply it was contacting some server, but
| https://github.com/ironcalc/ironcalc#early-testing claims (and
| the network tab confirms) it is just Rust compiled to wasm, no
| "backend" required
|
| _MIT or Apache 2 (player 's choice) if anyone else has grown
| deeply suspicious about any "open source" HN headlines of late_
| fsckboy wrote:
| backend does not imply server to me, it implies software that
| does the calculating engine work and does not concern itself
| with display refresh.
| readthenotes1 wrote:
| In code that typically runs in on e process, that's a
| plausible interpretation.
|
| However, the browser, sorry, the Internet browser, is
| typically a distributed system and a more plausible
| interpretation of backend is server-side.
|
| IMNSHO.
| ninalanyon wrote:
| Surely that's background not backend.
| bonoboTP wrote:
| Backend is a general word, not limited to client-server or
| the web. You can have a rendering backend with various
| configurable choices, like in Matplotlib (https://matplotli
| b.org/stable/users/explain/figure/backends....), or the
| deep learning library Keras has a choice between PyTorch,
| JAX and TensorFlow backends.
| kaathewise wrote:
| Right, I've made a mistake! I keep getting surprised by the
| fact it's possible to simply compile a Rust crate with a WASM
| target and run it in the browser.
| nhatcher wrote:
| It's running entirely on your browser unless you click share,
| download or import. The computation part is done in Rust
| compiled to wasm.
|
| Thank you for posting!
| kaathewise wrote:
| Yep, I've misunderstood, realized it after seeing mdaniel's
| comment.
|
| Thanks for making this in the first place! I saw IronCalc in
| the list of projects supported by NLnet and it grabbed my
| attention.
|
| By the way, if You don't mind me asking, how'd Tuta end up
| sponsoring IronCalc? It seems that lately they and Proton
| have been trying to expand their business away from just
| email. The fact that Tuta is interested in IronCalc makes me
| think they want to have an office-like offering.
| nhatcher wrote:
| Tuta sponsors by providing us with free email accounts,
| that's all. I reached out months ago, they liked the
| project and were kind enough to help us out with the email.
|
| I haven't have talks with them about integrating IronCalc,
| but it is something that is on my mind.
| kaathewise wrote:
| Ah, I see. Best of luck with that!
|
| There are a few projects where I'd love to see a modern
| spreadsheet implementation. CryptPad comes to mind. They
| use OnlyOffice, which is quite featurefull, but takes
| awhile to load and isn't as responsive.
| nhatcher wrote:
| Hey! This is my project! Amazed to see this here. I'll try to
| answer questions people might have
| fatih-erikli-cg wrote:
| Where and how do you handle the operator precedence? I couldn't
| find in the codebase.
| mdaniel wrote:
| I'm cognizant it's just documentation, because the code is
| its own thing, but it seems to be a recursive descent parser
| https://github.com/ironcalc/IronCalc/blob/2c2228c2c26386b019.
| ..
| nhatcher wrote:
| I wrote about it at length here:
|
| https://www.nhatcher.com/post/a-rustic-invitation-to-
| parsing...
|
| The implementation in IronCalc follows that.
| wslh wrote:
| Thanks for your great work! I'd love to hear your thoughts on a
| recent "brainstorm" a few of us had here on HN about
| spreadsheets. How does this resonate with you? [1][2]
|
| [1] https://news.ycombinator.com/item?id=42027356
|
| [2] https://news.ycombinator.com/item?id=41970554
| nhatcher wrote:
| Hi wsih, thanks! There is a lot to unpack on those threads
| but of the top of my head: 1. Clear separation between
| UX/backend Done by design in IronCalc. It is first a
| spreadsheet engine.
|
| 2. Multi language support, language connectivity, enhanced
| data types, ...
|
| You might very well be right, but out first step is to be as
| close to Excel as possible. We are ~ 1 year away from being
| formula compatible in a reasonable way. Once we are there we
| can do better in different directions. I think strict typing
| might be very beneficial for spreadsheets engines. Anything
| you can do to reduce errors and human mistakes.
|
| I strongly believe that having a competitive spreadsheet
| engine fully open source might be a good first step in
| extending and improving Excel.
|
| Let's see!
| wslh wrote:
| I am sure you are in the right track! It would also be
| great to know if you have some kind of business model on
| mind.
| nhatcher wrote:
| Noup. I'm not doing this for money. Not saying there is
| not a business angle, and happy to help anyone that wants
| to build a business using IronCalc.
| readthenotes1 wrote:
| What keeps me in Excel 2007 is Goal Seek.
|
| I'm not sure how unusual I am, but would be interested in
| knowing:)
| nhatcher wrote:
| Thanks for the feedback, I will keep this on the back of my
| head. This and things like sensitivity analysis are not in
| our immediate roadmap, but this is the kind of thing that
| would be fairly easy to add. You can do it right now
| programmatically, of course.
| echoangle wrote:
| Where does the name come from?
| nhatcher wrote:
| The first well known spreadsheet application was called
| VisiCalc[0] (the killer app!). The "Iron" side is because it
| is written in Rust and the domain was available.
|
| [0]: https://en.wikipedia.org/wiki/VisiCalc
| ericra wrote:
| Great project. I particularly love the:
|
| 1) mit license 2) using plausible instead of Google analytics.
| Practically speaking, uBO is going to block both by default,
| but for non-tech users this is great. 3) appreciate how the app
| respects your pc when the web app is running in the background.
| Very low footprint, no random CPU spikes or anything.
|
| Wish you guys the best.
| nhatcher wrote:
| Thanks :).
|
| WRT: Plausible. I think I will remove all kinds of analytics,
| I'm not yet convinced I should be using them at all. That
| being said I had been longing to try Plausible for the a long
| time and this seemed like a good opportunity.
| nhatcher wrote:
| If you are curious, I just made the analytics public:
|
| https://plausible.io/ironcalc.com
|
| I think more than one folk in HN might be interested. All
| traffic is because of this post. I had no visitors as of
| today. This was work in progress :)
| airstrike wrote:
| Where were you when I started writing my code ;_; I have also
| written a spreadsheet engine in Rust from scratch, for an app
| built with the iced GUI library!
|
| I'll take a deep dive through your repo and compare notes later
| this week. Congrats on the huge lift!!
| nhatcher wrote:
| Thanks you very much! Lets continue talking on Discord in the
| coming days!
| dpe82 wrote:
| What a cool project! I intend to dive in and I'm sure I'll have
| questions as I do. Are you active in Discord? The invite link
| on the bottom of ironcalc.com isn't currently valid.
| airstrike wrote:
| I got in via https://discord.gg/zZYWfh3RHJ from the github
| repo
| nhatcher wrote:
| Ooops, just fixed it. Here is the link:
|
| https://discord.gg/zZYWfh3RHJ
|
| I don't necessarily respond every day immediately, but I am
| active.
| arjunlol wrote:
| Looks cool! What sort of different solutions do you imagine
| devs building on top of the engine?
| nhatcher wrote:
| One of the recurrent topics is integration with spreadsheets
| done by non-developers.
|
| Imagine a spreadsheet built by the finance department of an
| institution. It is also maintained by them. The developer
| team might want to integrate this tool in their workflow.
| With IronCalc the can add units test or compute it a thousand
| times, one for each user.
|
| I don't think developers would choose IronCalc to do any
| actual development. They will be forced to by other parts of
| their tool chain being spreadsheets.
|
| Another way would be developers wanting to build spreadsheets
| with some extensions for a company or organization. Imagine
| needing a spreadsheet that has a built in SAT solver (like
| https://github.com/shnarazk/splr). That would be easily built
| in IronCalc.
|
| Not sure if any of those ideas convinces you :)
| madjam002 wrote:
| Do you see this as an alternative to OnlyOffice? I'm wondering
| if you've tried it and how you think this compares
| nhatcher wrote:
| I remember trying it out, yes. I yet need to do a serious
| comparative analysis.
|
| For what I can see OnlyOffice is feature complete, it's a
| full office solution. The sheets component is way ahead from
| IronCalc.
|
| On the plus side, IronCalc is way lighter. When you go to
| IronCalc you download < 1Mb (compressed), it is faster and
| able to load larger workbooks on the web. IronCalc is an
| engine, meaning you don't need a UI at all to run it.
|
| I don't think IronCalc is an alternative today to OnlyOffice.
| At most one day might be an alternative to the sheets
| component.
| alexk101 wrote:
| I haven't looked into the source for your project, but am
| curious if you are integrating any kind of existing
| engine/backend (Polars is what I am thinking) into it, or if
| that is even possible.
| nhatcher wrote:
| Not as of now. We first want to be a first class spreadsheet
| engine that implements 90% of Excel functions and features
| like array functions, LAMBDA, ...
|
| A goal of IronCalc is to make things like integrating Polars
| trivial for a developer.
| hitradostava wrote:
| Amazing project. The question I have is why rust? Is the
| compiled WASM significantly faster than JS?
| nhatcher wrote:
| Yes, the compiled WASM is significantly faster. Easily by an
| order of magnitude. I might be completely wrong about this
| but I _think_ if the brilliant folks at Microsoft research in
| the calc intelligence group would have waited a few years
| they might have used wasm instead of TypeScript
| (https://www.microsoft.com/en-us/garage/wall-of-fame/calc-
| ts-...)
|
| As for Rust, could have been C or Zig. I just needed a
| language that minimally compiles to wasm.
|
| There is another reason though. IronCalc runs in the bare
| metal, not only in the web and needs to have bindings to
| languages like Python, R or Julia. I can't get that today
| easily with TypeScript.
| franga2000 wrote:
| It's a cool project, but wow is the top of the page just absolute
| buzzword salad!
|
| > The democratization of spreadsheets > Empowering Everyone with
| Advanced, Open-Source Spreadsheet Solutions
|
| It's a really fast spreadsheet engine that runs entirely in the
| browser and is fully open source. That's all the sales pitch I'd
| need, but I'm a developer...
|
| So, serious question: who is this kind of marketing targeting?
| nhatcher wrote:
| I'm a software developer with extremely bad marketing skills...
|
| This project targets both end spreadsheet users and developers.
| In its first an engine (a Rust crate) then a full fledged
| product.
|
| FWIW, I'm over them moon this project is getting some traction
| :)
| bonoboTP wrote:
| I agree that the bullet points feel like ChatGPT output.
| Whether an LLM was involved or not, it's good practice
| nowadays to avoid that AI style as many are getting used to
| spotting it and frown about it.
| howthisends wrote:
| This is awesome. Will try using it as the foundation of some web
| tools.
| nhatcher wrote:
| If you do and want help with, don't hesitate in contacting me.
|
| Right now you can't just `npm install ironcalc`, but hopefully
| that will be in place in a month from now.
| dwroberts wrote:
| Had a comment here about larger values/arbitrary precision (e.g.
| 74829901923401860/14408150751351922) and realised that it isn't
| choking on the number but it seems to error if I paste in values?
| In Firefox:
|
| Uncaught RuntimeError: unreachable executed pasteCsvText
| assets/index-BxqQcmeI.js:40
| nhatcher wrote:
| Thanks for the bug report!
|
| I just added csv copy/paste, most likely an error there. We
| don't support arbitrary precision arithmetic but I would like
| to.
| iamthejuan wrote:
| I am genuinely looking forward for the success of this project. I
| am just wondering will this support scripting language like VBA
| for Microsoft Excel?
| nhatcher wrote:
| Thanks. I am thinking a lot about this recently. We will
| definitely support a scripting language, or rather several
| scripting languages. VBA won't be one of them, I think. I
| wouldn't want to create a language just for this. Maybe use a
| language like Lua or perhaps Rhai[0]. By design extending and
| embedding IronCalc should be very easy. Work in this direction
| will not start in the next 9 months though.
|
| [0]: https://github.com/rhaiscript/rhai
| kingo55 wrote:
| Thank god for that, VBA gives me nightmares.
| bonoboTP wrote:
| Nice work. Clicked around in it, some default features I'm used
| to are missing, like clicking on a row or column header to select
| the whole thing, or double click the resizer between two columns
| to autosize the column to content length.
| nhatcher wrote:
| Thanks, those things are on the roadmap :)
| phonon wrote:
| This looks great! Do you use cached calculation chains for
| performance optimizations? Do you take volatile functions into
| account?
|
| https://learn.microsoft.com/en-us/office/vba/excel/concepts/...
| nhatcher wrote:
| > Do you use cached calculation chains for performance
| optimizations?
|
| Not yet, there is heavy research in that direction. I will
| write on this soo-ish
|
| > Do you take volatile functions into account?
|
| Yes, for instance RANDBETWEEN and NOW are implemented. Things
| like `IF(RANDBTWEEN(1, 500)> 200,A1, A2)` work fine
|
| Thnaks
___________________________________________________________________
(page generated 2024-11-09 23:00 UTC)