[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)