I was an excel enthusiast and studied accounting mainly for Excel. Although I have moved to programming unlike most I still do think Excel is awesome.
I sincerely commend the enthusiasm, but working in the industry as the "excel expert", I think most outsider does not understand the "cult" aspect of Excel.
Excel works. That is it.
Trying to replace excel with anything will be percieved as replacing a calculator with some alien substance that does math. Excel is like Pencil and Pen. You can not replace it.
Excel is not software it is a tool.
I have had my fair share backlash when trying to introduce replacement and complimentary tools. To replace excel, you not only need to advocate for it's usefulness and you need to be also be liable to the complaints from excel users. If anything goes wrong no how minor with the new tool, you are the one who introduced all these mess.
So, in practice what usually happens is that, when people hit UX challenges they go to a consulting firm and commission a backoffice software to address the Excel limitations. Some business may pay for nocode but that is very rare. They go to backoffice software firm and they build a CRUD software that is now not replacing Excel but compliments it.
I think I understand the cult part of Excel. And to be honest, Excel is a fantastic tool. I don't think IronCalc can ever replace Excel (a boy can dream though!). But many companies need a spreadsheet of sorts they can embed in their product. Allow me a bit of humour:
> Any sufficiently complicated startup or young company contains an ad hoc, informally-specified, bug-ridden, slow implementation of 10% of Excel.
I have to mention this, when scrolling through the website, as soon as the Lakehouse illustration to the right renders, it degrades the performance on my MBP, the browser even starts to stutter!
I was viewing in Safari on an M1 Max MBP with no lag. Read this and switched to Chrome and confirmed lag when scrolling. Also lagged returning upward.
It was the only page open in Chrome, freshly launched specifically for this test. Safari has a bajillion open windows and tabs. Something about how Chrome handles the page is definitely odd.
Just for fun, I also tested in Firefox, which was already open with fifteen windows, most of which have a handful of tabs. No lag there.
It didn't lag when I loaded and tested just now to grab the version of Chrome: 122.0.6261.129. Presumably, that's because I'd visited earlier. I don't want to reset Chrome to try to repro again.
I did load up Chromium to check it and got the lag there as well: 124.0.6359.0 (Developer Build)
I don't use Chrome almost ever. Maybe my outdated version is why you can't repro.
Excel is powerful, but it is also important to consider its limitations.
Things will get real when your orgs problems/needs grow from something that was totally cool to do with spreadsheets to something requiring higher complexity, performance, resilience, testability, coordination, ... — and the point at which you cross over into the latter is not always clearly marked.
It would for example not be advisable to use Excel sheets as a replacement for a distributed database of central importance, unless your org is a lemonade stand with 3 employees.
I would also prefer maintaining a python script with written tests over maintaining an Excel file containing complex business logic, but maybe that is just personal perference.
Don't get me wrong here, Excel is amazing and we should all use it where it shines. But as with all tools we need to be aware of the fact that they heavily color the way we look at problems, as expressed by Maslows famous aphorism: "If the only tool you have is a hammer, you tend to see every problem as a nail."
Good engineers should not be blinded by their tools, but accutly aware of their limitations and know which to use when. Just like with hand tools you could probably also just hammer a nail in using a shovel or "drill" a hole using a screwdriver and Excel is very versatile in those regards: it can get you very far without being the best solution, a bit like a swiss pocket knife.
You are totally correct but, pragmatically excel can be used as a prototyping system for nearly every business and if you need to have higher complexity you port it into a Python script. This is not unheard of and I think it's a common pattern. When you have your business analysts already getting something that works its much better than having a set of meetings trying to discuss what the needs are from the business.
Yeah but that is what I meant with the right tools. Anybody would agree that drafting your application on a big whiteboard or a piece of paper might be totally acceptable.
But running your entire org on a single whiteboard or a piece of paper only works up to a certain size and comes with downsides as the org grows. Same thing goes for one big excel file where people have to take turns with editing.
I get what you're saying, and agree with lots of it, but most of the time things built in Excel are not for programmers, usually have no maintenance budgeted, and often are built by non-developers.
To extend your analogy too far, Excel is the 4mm allen key you get with all your Ikea furniture. It's good enough to build all the bog-standard, functional but not particularly nice furniture you need, but sure you'd rather have bespoke custom work. Sometimes you don't have or want the tools, or know how to use them and that's OK.
What I found is such tools barely work because what makes Excel so sticky is ability for end user to change that logic. X + Y = Z. Well, Click Clack and Z -Y = F
That's just so difficult to handle in a way that isn't "Just use Excel"
> So, in practice what usually happens is that, when people hit UX challenges they go to a consulting firm and commission a backoffice software to address the Excel limitations. Some business may pay for nocode but that is very rare. They go to backoffice software firm and they build a CRUD software that is now not replacing Excel but compliments it.
Heh, where were you 6 month ago when my team was pitching some of our traders on replacing a system they'd built for balancing their strategy. It was built in excel of course, but what surprised me was the resistance to changing it at all. They all hated the thing, it was slow and crashed often, and right in the middle of the difficult part of the work too. Working with it was a terrible experience, even for people used to medium business enterprise crap. Yet they refused to consider any alternative to building some CRUD around it that would extract the worst parts.
The issue we faced was that there was no way we could contribute to this excel monster while still following the risk tolerance of our department. It's not that we're opposed to building something that is probably a bad idea, if it helps build relationships that let us build something better later. It's more that as soon as IT touches it, we get to own every legal aspect of it too. So they ended up with an external consultant that built them what was essentially an external database they could query, which was then supplied with data by some program somewhere.
It ended exactly as you say. They got a back-office firm to develop some one-off hack that alleviated the immediate problem, without replacing excel.
I think this highlights the main issue with replacing Excel, which is that most people have an undocumented, informal workflow with their tools in Excel that would be difficult to replicate fully in other software.
As someone that has had other software tools replaced with alternatives (think Slack replaced with Teams), the new solution almost always speeds up and fixes a lot of problems. It also invariably screws up at least one thing that I need the tool to do as a part of my job.
I love my IT colleagues, but (and I mean no offense to them or other IT folks) they don't
understand that the way we use our internal tools is super flexible and doesn't adhere to an end to end process. It's how we ended up with an entire software platform that takes more manual steps, breaks in a way that we can't fix, and still requires the use of Excel to get the output into the formats that our stakeholders need. It also can't adapt quickly when we need to change things in our process.
It is a technically impressive tool that does the things they designed it to do super well. But we're like a month away from needing an Excel tool (or another piece of software) that can reliably do all the things we didn't realize relied on the "hot spacebar" from the XKCD.
Outside of specific domains such as finance and accounting, most people don’t really need Excel, and will be served perfectly well by Google Sheets or whatever.
Indeed, I have hardly used Excel in years. I do use Google Sheets at work, where they are used for adhoc tracking by engineering, product management, project managers, etc.
Our son who is 11, he uses Google Sheets - and I know he has used Apple Numbers in the past too. I’m not sure if he even knows what Excel is.
I think people conflate Excel the product with workflows that can be solved with Excel. Lots of tools like sheets and even numbers can do the latter, but nothing since Lotus competed with the former.
So if you've never used Excel, you can probably get away with an alternative. But if you already know Excel, why would you add another product for some subset of use cases?
I'm a heavy Excel user, and I have yet to find a usecase that cannot be solved in Sheets. It has App Script after all, for whenever you run into a feature that isn't there. But even then, I've translated many Excel functions to native Sheets array_formula equivalents, and found the latter much more ergonomic.
Much of Excels dominance is due to its legacy pervasiveness in certain industries/ roles (notably finance or financial related but there’s strong bureaucratic use of it as well asan ad-hoc tracking tool for instance) and the fact that two generations of people grew up using it.
I’ve noticed over the years that younger generations are far more used to using Google Sheets since schools and universities have strong adoption of Google Workspace. As a result, I’ve seen less and less use cases that were once believed to be Excel only domains turn out not to be.
I’m not going to proclaim the death of Excel by any means but it’s not as ironclad of a leader position as it once was. There is however some increasingly niche cases where Excel can do things that Sheets can’t, or doesn’t do as well. One non obvious (for todays environment) use case being offline portability, Excel being a standalone program really helps here.
That said, they both suffer from one issue that’s the same, which is there is no ergonomic way to run business logic rules over the calculations easily (and some cases at all)
> But if you already know Excel, why would you add another product for some subset of use cases?
I know Excel – I've been using Excel since before Sheets existed. First spreadsheet I ever used was Lotus 1-2-3 for DOS (I was just a kid at the time, so I was just mucking around with it, not using it in anger – but I remember watching my father use it in anger.)
At my work everyone gets Sheets, whereas you only get an Excel license if you specifically request one – and most people don't. So why would I use the product which most of my colleagues don't have, instead of the product everybody has?
Likewise on my personal laptop, I have an Excel license... and still I use Sheets for most things. Habit maybe? I've never used the web-based Excel, and I don't like having to deal with open another app.
The only time I ever use Excel nowadays is if I need to open some complex Excel spreadsheet that Sheets can't handle properly, or if I need to work on some Excel spreadsheet import/export function at work – both of which are "once in a blue moon" activities for me.
I've only watched an Excel expert work their magic in person once and it was straight up sorcery. I'm glad not to need to learn it, but it was eye-opening seeing her rapidly make changes (with me not understanding what she was doing, sorta how non-experts likely perceive what we do when we help them with their personal devices) and come out with exactly what she wanted. Must have taken her about a minute and there were changes every several seconds until she was done.
In the case of Google Sheets, one reason is that collaborative editing in M365 Excel is absolutely awful. It’s slow, clunky, and more importantly loses data. If you have a shared spreadsheet with important data in it, it’s worth switching.
I’ve worked with a “prototype CRM” that was just a big Google Sheet. Basically a lead generation form would add a row to the sheet, and the sales team would edit cells to reflect the state of the sale. It grew to 3 million rows and still worked. Doing that in Excel is a laughable idea.
I’ve also been on a management team where compensation planning was done with ten managers editing a shared Excel sheet with just a few hundred rows. Somehow some rows got deleted and others got slightly scrambled during the process. It was a huge mess.
As an expert in Excel, don’t you think Google Sheets has chipped away at Excel's dominance in a very smart way? I’m not saying that Google Sheets is a complete competitor to Excel, but it has been highly user-oriented. And, if we add Apple Numbers to this discussion, I feel it’s still at a kindergarten level by comparison.
I think this is where IronCalc like software could thrive: finding a non-complete competition to Excel, and Google Sheets that does the other part of the work better.
What Google Sheets did that was super innovative IMO was make a spreadsheet that integrates with the entire Google ecosystem.
I am partially joking (they put it on the cloud in a way that's super useful and made collaboration remotely easier, along with other scripting inprovements), but I think it highlights that the main "benefit" to Sheets is that it's a fully featured product created by a mega-corporation that complements other tools they have to offer.
Put another way: how many companies use Microsoft for everything except Excel? How does that compare to companies that use Google Drive for everything except for spreadsheets?
A tool like this one has the upward battle of needing to be so useful, it is worth employing alongside your currently existing office software. It feels like spreadsheet software is a particularly hard arena to compete in, given the quality of the major ones you mentioned.
> It feels like spreadsheet software is a particularly hard arena to compete in, given the quality of the major ones you mentioned.
It’s not just a feeling. A basic Porter’s analysis, especially with a 6th force, reveals how nearly impossible it is to compete effectively (now) in the spreadsheet software market given the dominance of the major players.
a killer feature of Sheets is querying web-based databases for adhoc reporting. You can do this lots of ways including Excel, but sheets was early and makes it very easy. I've saved so much development effort (in Excel or elsewhere) just dumping data into a sheet and letting them at it.
I think that experienced Excel users and managers don't expect Excel to be perfect, but have figured out how to cost the inevitable bugs and changes into their expectations, to a good enough level of accuracy.
Nobody knows how long a software project will take, if it will deliver something that works or not, and if responsive support will materialize. Many if not most developers agree with this, even if they disagree as to the root causes.
One way to think of it is that it's a difference between a person and a process. A spreadsheet can be created and maintained by a person -- often the end user themselves. But since most people don't program, getting software written and maintained requires a process.
The same is true of driving a car versus flying in an airplane. When you drive, you feel like you're the person who's in control of getting yourself to your destination. When you fly, you're placing yourself at the mercy of processes that you don't control and that are not all aligned with your interests.
As a long time Google sheets user I recently was involved in a project for one of these Excel heavy enterprises.
I proposed the CRUD solution to complement their use case but the solution was not received well. They couldn't allocate computer resources to host the solution within their infra easily. So they pushed back and asked us to develop some Excel add-on, PowerBI based dashboard or some kind of Microsoft no code I can't care enough to remember the name.
I had no experience with PowerBI at all. But had a lot of fun learning about it. Great ideas on that piece of software but ultimately it's too hard for Excel users and too finicky for real data processing other than very simple stuff.
It failed spectacularly in the end. We could never make it work reliably and the customer also skimped on the license and didn't want to add some extra features M$ft charges on the side such as power automate and some "advanced instances". Which meant the software runs have to be manually triggered on the managers machine to update the dashboards. It was nasty.
The end result is completely unmaintainable. A collection of "M" scripts inside a power bi dashboard, it pulled data from multiple spreadsheets from specific locations, joined and processed the data, and generated reports. The scripts runs on a Thinkpad so it needs to fit inside the machine constraints of memory and processing. Some of the files are manually updated so very easy to mess up the format or permissions to the point the whole thing broke.
This mirrors my experience. I am the accounting manager responsible for updating these dashboards at my saas employer. Troubleshooting powerbi errors during month-end close is the most stress-inducing thing. And whenever management wants a dashboard edit, we have to somehow know that the spreadsheets being fed the powerbi cloud data will also change. Maybe an extra row inserted into the pivot table of ARR by product. Now any formulas directly referencing the cells rather than using XLOOKUP are pointing to the wrong product category. I was chewed out hard for that one a few days ago even though IT made that change, since it updated our report after review. TLDR: Powerbi suck, use a data warehouse and SQL for data transformations.
> I have had my fair share backlash when trying to introduce replacement and complimentary tools. To replace excel, you not only need to advocate for it's usefulness and you need to be also be liable to the complaints from excel users. If anything goes wrong no how minor with the new tool, you are the one who introduced all these mess.
That is a universal issue of IT management: Any change implemented in IT systems (or anything else) will get that kind of resistance - bigger changes cause more resistance. If you change their primary tool, which they use all day and on which their jobs depend, expect a lot of resistance. The solutions:
1) Get management buy-in. They set the ceiling for acceptance - very few underlings will have more interest or make more effort than their management; if the manager dislikes it, doesn't use it, is disinterested, etc., then most others will do the same. Also, management is your support - when someone objects, they are not just objecting to you, they are objecting to their manager.
2) Get user buy-in. This is perfectly reasonable, if you think about it: Their tools, they use the tool all day, their jobs, probably they should have the biggest say. It means obtaining and utilizing their input from the start on what the tool should and should not do, etc. It may not be what you planned or expect; it may shatter your dreams; that's good - your fantasy was not aligned with reality. They provide the user end (e.g., 'don't change the keyboard UI that is in all our muscle memory and in all our documentation, and automated in macros'; 'of course you are migrating our macros, on which we depend, right?!'), you provide the technical end (e.g., 'we need a database with a spreadsheet UI and not a file-based spreadsheet').
3) Use all your development skills: test, mvp, deploy, iterate, etc.
4) Use some social intelligence: Deliver to the most interested, capable users first. Others will see them being uber-productive and want one too. Provide everyone with incredible, highly responsive support. Etc.
My first career was at a fintech company that sold auditing data. All of our clients were accountants, auditors, lawyers, etc.
Every single person worked in Excel. It didn't matter how old our website was, how crappy our code was - all that matter was that we generated a CSV.
I used Excel often - I think many people underestimate how powerful Excel is and how much of finance / auditing relies upon it.
My co-workers used to joke that the world runs on Excel. That some of the most important economic documents are probably some .xlsx file named "economy-v3" that people send back and forth over email.
Yes, they are indeed not as streamlined unfortunately.
Maybe ethercalc if you need something lightweight, but that's also not a real alternative
https://ethercalc.net/
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!!
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.
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.
At the moment they are a full production ready product, we only have an MVP.
If and when we reach version 1.0 we might be comparable. And you might want to use one or the other. It its difficult to say who the two product will compare in a year from now but probably IronCalc will be lighter, easier to integrate, faster in computations but not so feature full.
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.
nice project ! and attempt to modernize the spreadsheet tech stack. be warned though, that the feature-set of the modern spreadsheet is gigantic, with tentacles in hundreds of nooks and corners. Any attempt to play catch-up is a losing proposition. Hence you could position it so as not to directly compete with excel - in areas that are new or emerging.
I've said this in some other comment. We can't and will never be as feature full as Excel. We want to find different use cases. A super light spreadsheet with MIT license that you can use anyway you want.
If I were to go closed source, for instance, I think I loose 90% of my selling points.
One of my dreams if I were to create my own web-based spreadsheet engine would be to make worksheets much more general purpose and not stuck in tab UI like Excel. You would be able to embed them separately in the page so multiple worksheets could be viewed at the same time. Example: you might have multiple small worksheets with financial summaries where the columns are slightly different. You could also do things like include text above/below worksheets, to present the data in a document-like format.
Very cool library. I like the goal of Excel support (it truly is an incredible platform). A couple of questions:
1) Any plans for programmatic manipulation of pivot tables? Looking across the Python ecosystem, outside of xlwings (which essentially requires FFI manipulation of a running instance of Excel), nothing else makes it possible. It does look like some .NET Excel libraries support it.
2) Will there be ability to use the engine as library? Would love to use something like this through Python bindings.
Exactly because Excel is huge it'd be nice to have such a detailed reference, grouped by type: functions, UI, scripting, built in analysis tools etc
And some features could reduce pressure re compatibility in other areas. For example, if you had some kind of wasm plugin system, then people could easily write the lacking functions in their favorite language without having to wait for the core to add such a function.
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]
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.
Hyperfiddle and Quadratic implement some of the items on your wishlist (richer data types, modern programming languages, working with arrays, better connectivity to data tools).
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.
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.
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.
The function for asterisks and slashes is called from the functions for pluses and minuses. The result is that asterisks and slashes are evaluated before pluses and minuses. It's actually very easy to understand once you get the idea.
I don't think a recursion should be involved in the parser. Shift-reduce may be an answer but it does not fix the problem either if you try to implement that. I would like to see real code rather than written homework pieces.
You're conflating parsing of expressions with operator precedence parsers (aka Pratt parsers). IronCalc uses a recursive descent parser, and Pratt parsers are an optimization of recursive descent parsers. Pratt parsers have one function that implements all precedence levels, while recursive descent parsers have one function per precedence level, but they contain basically the same logic.
Source: 20 years ago I converted GCC's C++ parser from recursive descent to an operator precedence parser; obviously GCC respected precedence even before my work, which was purely an optimization. In fact the code I replaced had the note "The expression parser recurses through the various levels of precedence as specified in the grammar, rather than using an operator-precedence technique".
Operator precedence is an addition to parsing of expressions. Both of them is needed if you accept "2 + 1" kind of expression. "2 + 2 * 2" must be evaluated like "2 + (2 * 2)". Only expression parsing will evaluate them like 8.
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.
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.
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.
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.
It’s a great ambition to replace Excel and many went down this path before. Congratulations to even attempting to achieve it and going this far to do it.
Excel compatibility, when fully realized, will remove the major obstacle to adoption. Given the current stronghold Excel has on the market.
Once that is achieved do you plan to offer a transition to more modern forms of calculations as vectors and arrays formula panels together with frozen sheets of raw data and output? Thus separating logic and model.
Also when your solution adoption will have grown much larger you should learn from the experiences Bavaria and CERN went through. Microsoft stronghold more often than not has nothing to do with technical prowess.
>Also when your solution adoption will have grown much larger you should learn from the experiences Bavaria and CERN went through. Microsoft stronghold more often than not has nothing to do with technical prowess.
The government of Bavaria, one of the wealthiest countries of the German federation and thus of the world, tried to replace Microsoft with Linux and generally FOSS solutions. Twice.
CERN tried to replace Office with NextCloud. It is now struggling to cope with a policy reversal under Microsoft fanboys.
Yeah, that is not our battle. At least not right now. Excel, and Google sheets, are and will be far more advanced than IronCalc. What we can do is to cater different needs. The focus is on lightweight and open source. Given the billions of spreadsheets out there I wouldn't be surprised if for a small percentage of them IronCalc is a better option.
The reason for Excel compatibility is twofold:
* You can use your workbooks as the are
* You don't need to learn a new tool
> do you plan to offer a transition to more modern forms of calculations as vectors and arrays formula panels together with frozen sheets of raw data and output?
cool project, but I don't particularly like "The democratization of spreadsheets" as a catchphrase. Like, what does that even mean? If by "democratization" you mean like, more able to be used, well anyone can go download LibreOffice or for the web use CryptPad's Spreadsheets, and if you mean that it's more open, well both of those are open source. Is this project specifically run democratically or something? It just seems like a really bad use of meaningless marketing terminology.
I think it's the general idea that free (as in speech) software is "democratic". Even if the project does not do what you want you can always modify or fork, i.e. make changes privately for your own use or even distribute them. Closed source software is like totalitarianism, the leader or leading party knows what is best for you.
Democracy is not the best analogy, free software projects have BDFLs. The difference is more indirect, in democracies citizens have rights and freedoms. In non-democracies typically less so.
FOSS is more anarchistic than democratic, I think. Sure, there exist democratic organizations like the Debian Organization, but if you don't agree with their decisions not much binds you to them (that's how projects like Devuan can exist). The same applies to projects with BDFLs as well (altho I do disagree with that form of governance for a project).
99,9999999% of the people using open-Source software are absolutely unable to modify or fork said software. From the other 0,00000000% most don't care enought to modify it.
Calling it democratic is is like calling cancer a completely natural phenomenon. It's true, but it's also completely beside the point
So what? Coming back to the poor analogy of democracy, the same fraction of voters could not run a government. The majority has never participated in any public manifestation.That does not mean we should all live under dictatorship.
I recommend you un-discover it and take a look at the Collabora office suite. It's basically the LibreOffice engine with a web ui on top. We've been using both OnlyOffice and CODE for years, and CODE has much better performance (both the client and the server; probably because the backend is in C++ instead of Node), it's more stable over the long term, and has better compatibility with msoffice.
> Empowering SaaS Developers: Hundreds, if not thousands, of companies have implemented half-baked spreadsheets in their systems. IronCalc aims to provide these businesses with a superior, open-source alternative that enhances their SaaS applications.
I am currently creating SAAS and the idea of implementing LibreOffice on top of my offering just not gonna work.
Awesome project! Looking forward to following this.
I've been looking out for projects like this over the years and I'm glad to see that this one takes Excel compatibility seriously! Also love the choice of Rust and WASM!
For me Dynamic Array support is a blocker and I can't play with it until you've got that. Very glad to see that's your top priority though[1]! That and everything in the Logical, Lookup and Reference, and Information sections (in that order). That covers probably over 95% of my work and I spend most of my time in Excel.
What would be quite cool would be a small utility that one can run over ones workooks and that produces a csv or json file of all the Excel functions used and their count.
People could submit those and you'd get real usage stats of what functions people actually use in real world workbooks rather than guessing.
Users could also then use this to run a compatibility check to see if they could move over to your engine or not.
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.
"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
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.
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://matplotlib.org/stable/users/explain/figure/backends....), or the deep learning library Keras has a choice between PyTorch, JAX and TensorFlow backends.
what's the backend of a spreadsheet engine going to be doing? updating the datastructures of the spreadsheet.
is it going to be local or remote? that's not part of the question.
is it foreground or background? that's an implementation choice. apple II, yeah, everything freezes while it recalcs. windows? recalcs when it can, don't let the mouse freeze.
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.
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.
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.
Agree with your comment. I almost didn't click on it because I wouldn't be interested in a C# or .Net project and was very pleasantly surprised. I don't love the name.
What does that actually mean, "works"? I don't know how that behaves in Google sheets or Excel. Is it evaluated exactly once the first time the formula is entered? Every time you focus the input? Is the dice rerolled when a1 or a2 is modified? What?
Hi 8n4vidtmkvmk, the algorithms for evaluating spreadsheets are surprisingly tricky mainly because of the dependencies. The dependencies are only know at runtime and in Excel are lazy evaluated. So things like `IF(condition, value1, value2)` would evaluate first the condition if it is true it will evaluate value1 but not value2. So things that in other programming languages are a circular dependency are not so in Excel.
The problem of computing the dependencies might be solved by topological sort. The complication of the runtime dependencies is made worse by having dependencies that change every time (or that their outputs do not dependency solely of their inputs) like random functions or date functions. An optimization while evaluating a spreadsheet would be to only compute those cells that depend on cells whose value changed. If you do that you might miss on those volatile functions.
I realize I am most likely babbling too much.
Yes, volatile functions like RANDBETWEEN get evaluated each time a cell changes. They don't get evaluated when you focus on them.
This sounds like a cool project! Does anyone here knows how it compares to univerjs ?
I currently use univerjs to power the open source sql spreadsheet component I work on (https://github.com/sqlpage/sqlpage-spreadsheet/). My experience with it has been that it's very powerful, but quite difficult to use due to the boilerplate involved, the lacking documentation, and the fact that it seems to be developed mainly for the Chinese market.
Woah! I didn't realize luckysheets renamed to univerjs!
I think at the time being you should stick to univerjs as it is a finalized product. Once we reach version 1.0, IronCalc should be easier to deal with and you cold consider using one or the other.
Can't tell by the docs (but I've not dug in much yet) but... @nhatcher... here's a use case question.
Admins use the ironcalc UI to create their formulas. Is there a way to get those formulas to a backend and run the calcs on the server itself (separate from the user's browser) to get results based on input from other sources?
The UI half looks great so far. I have a colleague I was going to recommend this to, but they more need the 'run the formulas on the server' part more than anything else. They've got some custom Rust stuff running already, but having admins come up with their advanced formulas, then translating that to server code - that takes the time. It seems they may be able to use this to have this handle both ends of the workload, without the translation layer.
Congratulations, this is awesome. One of those "why hasn't someone done this already?" projects.
I can see this becoming transformative and superseding Excel, which is a bold claim to make. But this is compliant (with Excel), performant, extensible, free, and in-browser. This could easily become almost an emacs-level editor.
Think of the interfaces that could be built to this in this?
Why would there be any reason for this to kill excel? Seriously you should try to replace excel entirely rather than merely get a better version of it. If you want to get a better excel just buy excel and actually learn how to use it.
When I worked at the Excel team our motto was Excel is the second best tool for everything.
I'm excited to see more players in this space though, all the standards are open and there are decent libraries with decent licenses that exist. A lightweight LibreOffice alternative would be neat and something truly open source and embeddable (MIT) is great.
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:
I was recently looking for a Linux alternative to LibreOffice Calc and couldn't find something that meets my needs (mostly CSV import/export, filtering and pivot tables). It's great to see this new contender showing up and even if it lacks major features what's there so far looks very good. This is promising! Congrats for the good work and best wishes for what's to come.
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.
The idea is to have an egine that is clearly separated from the various "skins" like a React, Vue, a TUI or a desktop app. At the moment the React component is a bit difficult to use in isolation. I need to provide a npm package that folks can install
I am quite excited about the new era of WASM webapps - those are cross-platform & fast. Unlike traditional desktop programs those are sand-boxed & unlike mobile apps the distribution channels are open ("side-loading" by default).
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.
At the time of writing, you can use Rust, Javascript and Python bindings.
The React front-end communicates with wasm compiled from Rust.
Java bindings are planed but not in the next ~6 months. A client/serve architecture (like libreoffice does) with IPC or sockets might be a good idea for languages that we don't provide bindings to. also not planned for the next 6 months
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?
This probably sounds daft, but I was trying to figure out on the site what platform it ran on.
It doesn't seem to say "in browser" - so I'm wondering if it's Windows or Mac or ...?
Since it is in-browser there's then no detail on what the scope is - where are the spreadsheets stored? How are they shared? Do I host it on my server? Are they stored on your server ? Can I embed it on an existing page? Can I update cells via JavaScript? Or websockets?
And so on.
Some of the above is inferable from the comments here, but not all.
Congratulations on a cool project - but you may want to "set the scene " as it were for prospective users.
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.
* Gerund Adjective Noun (bold): (colon) text (non-bold).
----
Already the format like this. Then plus points for sounding like an empty phrase that chatgpt likes. Eg from the heading "Addressing Unmet Needs" then bullet "Empowering SaaS Developers:" in bold.
It's hard to describe. If you use chatgpt a lot, you develop an intuition that has many components.
I think using the word "democratization" is the main issue, how does that even make sense in software? Who is doing the voting? You just "vote" by forking...? I don't get it, you also "vote" by using Microsoft Excel.
'Democratization' IME usually refers to the foundation of democracy, equality in rights, freedom, and opportunity. It's something for the masses, for the people.
Yes I know what the word is being used these days for but it doesn't make sense. Democracy does not inherently have anything to do with these additional (also vague) terms.
Democracy doesn't have anything to do with "equality in rights, freedom, and opportunity"? That is the point of and foundation of democracy - no democracy without them. It's incredible that people are so anxious to destroy freedom and humanitarianism (why?) that they adopt an obviously false history.
Those have long been believed to be the foundations of democracy; you might have heard this one, which founded one democracy:
We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness.--That to secure these rights, Governments are instituted among Men, deriving their just powers from the consent of the governed, ...
That also says governments exist - their reason for being - is to protect those things you deny are relevant.
Then from the French Revolution, and now France's national motto: Liberté, Égalité, Fraternité. "Liberté, Égalité, and Fraternité are fundamental values that define French society, and democratic life in general."
Whereas recognition of the inherent dignity and of the equal and inalienable rights of all members of the human family is the foundation of freedom, justice and peace in the world, Whereas disregard and contempt for human rights have resulted in barbarous acts which have outraged the conscience of mankind, and the advent of a world in which human beings shall enjoy freedom of speech and belief and freedom from fear and want has been proclaimed as the highest aspiration of the common people, ...
Whereas the peoples of the United Nations have in the Charter reaffirmed their faith in fundamental human rights, in the dignity and worth of the human person and in the equal rights of men and women and have determined to promote social progress and better standards of life in larger freedom, ...
Article 01: All human beings are born free and equal in dignity and rights. ...
All of those are just additional things ones wishes democracies to have but are not inherent in the word definition. I can certainly see that some people wish to have the definition of "democracy" expanded to mean many additional things but that really isn't the point of having that very precise word.
What basis do you have to say that? Otherwise, these claims are just bytes with no force behind them. You can see the overwhelming evidence and consensus otherwise, stretching over centuries!
Even more, why do you want it to be true? Why do people want to eliminate their own and others human rights, an incredibly positive basis for society and for your freedom and prosperity, which has resulted in what are by far the most successful societies and people, by many measures, in human history? You're giving away all that for what? To look clever and 'with it'? Smarter than democracy? Very clever.
You should be fighting for it, like your predecessors did. Otherwise, you'll lose it. There are people actively and successfully taking it away, while you are engaging in this philosphical exercise.
Words have a fairly precise dictionary meaning and it's important not to constantly wage a word war where you want to win political and social arguments through word redefinitions. It's information pollution, you redefine words like "love", "equality", "freedom", "democracy" until they mean something completely different and suddenly you have a divided population that can't even talk to each other anymore because all this confusion that you just had over the word "democracy" is only possible because you are misusing the word.
It's not a redefinition. I just showed you definitions centuries old. These things are universally associated with democracy, except by dictators and their supporters who try to redefine them.
Yes, "associated with". But it is not part of the definition of the word. I don't know how much clearer anybody could make this. Democracy just means voting, it does not even mean that everyone gets to vote and certainly not equally. Even if you don't like it and even if you want that to be included in the word definition, that doesn't make it so.
I was an excel enthusiast and studied accounting mainly for Excel. Although I have moved to programming unlike most I still do think Excel is awesome.
I sincerely commend the enthusiasm, but working in the industry as the "excel expert", I think most outsider does not understand the "cult" aspect of Excel.
Excel works. That is it.
Trying to replace excel with anything will be percieved as replacing a calculator with some alien substance that does math. Excel is like Pencil and Pen. You can not replace it.
Excel is not software it is a tool.
I have had my fair share backlash when trying to introduce replacement and complimentary tools. To replace excel, you not only need to advocate for it's usefulness and you need to be also be liable to the complaints from excel users. If anything goes wrong no how minor with the new tool, you are the one who introduced all these mess.
So, in practice what usually happens is that, when people hit UX challenges they go to a consulting firm and commission a backoffice software to address the Excel limitations. Some business may pay for nocode but that is very rare. They go to backoffice software firm and they build a CRUD software that is now not replacing Excel but compliments it.
I think I understand the cult part of Excel. And to be honest, Excel is a fantastic tool. I don't think IronCalc can ever replace Excel (a boy can dream though!). But many companies need a spreadsheet of sorts they can embed in their product. Allow me a bit of humour:
> Any sufficiently complicated startup or young company contains an ad hoc, informally-specified, bug-ridden, slow implementation of 10% of Excel.
Maybe we can use IronCalc for those cases?
> > Any sufficiently complicated startup or young company contains an ad hoc, informally-specified, bug-ridden, slow implementation of 10% of Excel.
Let's give Philip Greenspun due credit for this phrase. I'm going to guess there's at least one generation who isn't familiar with it.
I was tired when I wrote that. I think I just assumed everyone would get that reference
as a saas founder, I can confirm you are 100% correct about this and we'll be looking at IronCalc for https://www.definite.app/
I have to mention this, when scrolling through the website, as soon as the Lakehouse illustration to the right renders, it degrades the performance on my MBP, the browser even starts to stutter!
Thanks for the feedback, on it!
cool and slick website. reminds me of linear.app but when i attempt to scroll all the way down it lags. i'm on macbook air with chrome browser
I was viewing in Safari on an M1 Max MBP with no lag. Read this and switched to Chrome and confirmed lag when scrolling. Also lagged returning upward.
It was the only page open in Chrome, freshly launched specifically for this test. Safari has a bajillion open windows and tabs. Something about how Chrome handles the page is definitely odd.
Just for fun, I also tested in Firefox, which was already open with fifteen windows, most of which have a handful of tabs. No lag there.
Got it, any chance you could send me the version of Chrome?
This has been tricky to reproduce.
It didn't lag when I loaded and tested just now to grab the version of Chrome: 122.0.6261.129. Presumably, that's because I'd visited earlier. I don't want to reset Chrome to try to repro again.
I did load up Chromium to check it and got the lag there as well: 124.0.6359.0 (Developer Build)
I don't use Chrome almost ever. Maybe my outdated version is why you can't repro.
Version 130.0.6723.92 (Official Build) (arm64)
chrome on a celeron laptop, barely if any lag
Excel is powerful, but it is also important to consider its limitations.
Things will get real when your orgs problems/needs grow from something that was totally cool to do with spreadsheets to something requiring higher complexity, performance, resilience, testability, coordination, ... — and the point at which you cross over into the latter is not always clearly marked.
It would for example not be advisable to use Excel sheets as a replacement for a distributed database of central importance, unless your org is a lemonade stand with 3 employees.
I would also prefer maintaining a python script with written tests over maintaining an Excel file containing complex business logic, but maybe that is just personal perference.
Don't get me wrong here, Excel is amazing and we should all use it where it shines. But as with all tools we need to be aware of the fact that they heavily color the way we look at problems, as expressed by Maslows famous aphorism: "If the only tool you have is a hammer, you tend to see every problem as a nail."
Good engineers should not be blinded by their tools, but accutly aware of their limitations and know which to use when. Just like with hand tools you could probably also just hammer a nail in using a shovel or "drill" a hole using a screwdriver and Excel is very versatile in those regards: it can get you very far without being the best solution, a bit like a swiss pocket knife.
You are totally correct but, pragmatically excel can be used as a prototyping system for nearly every business and if you need to have higher complexity you port it into a Python script. This is not unheard of and I think it's a common pattern. When you have your business analysts already getting something that works its much better than having a set of meetings trying to discuss what the needs are from the business.
Yeah but that is what I meant with the right tools. Anybody would agree that drafting your application on a big whiteboard or a piece of paper might be totally acceptable.
But running your entire org on a single whiteboard or a piece of paper only works up to a certain size and comes with downsides as the org grows. Same thing goes for one big excel file where people have to take turns with editing.
I get what you're saying, and agree with lots of it, but most of the time things built in Excel are not for programmers, usually have no maintenance budgeted, and often are built by non-developers.
To extend your analogy too far, Excel is the 4mm allen key you get with all your Ikea furniture. It's good enough to build all the bog-standard, functional but not particularly nice furniture you need, but sure you'd rather have bespoke custom work. Sometimes you don't have or want the tools, or know how to use them and that's OK.
Which is precisely my opinion as well. My post was a caveat, nothing against Excel at all.
What would be nice though is if you could export logic from excel to examine it and port it.
One can dream
You easily could. Format is available.
What I found is such tools barely work because what makes Excel so sticky is ability for end user to change that logic. X + Y = Z. Well, Click Clack and Z -Y = F
That's just so difficult to handle in a way that isn't "Just use Excel"
Diffs in source control would be sweet
They already know how to do it too https://support.microsoft.com/en-us/office/compare-two-versi...
> So, in practice what usually happens is that, when people hit UX challenges they go to a consulting firm and commission a backoffice software to address the Excel limitations. Some business may pay for nocode but that is very rare. They go to backoffice software firm and they build a CRUD software that is now not replacing Excel but compliments it.
Heh, where were you 6 month ago when my team was pitching some of our traders on replacing a system they'd built for balancing their strategy. It was built in excel of course, but what surprised me was the resistance to changing it at all. They all hated the thing, it was slow and crashed often, and right in the middle of the difficult part of the work too. Working with it was a terrible experience, even for people used to medium business enterprise crap. Yet they refused to consider any alternative to building some CRUD around it that would extract the worst parts.
The issue we faced was that there was no way we could contribute to this excel monster while still following the risk tolerance of our department. It's not that we're opposed to building something that is probably a bad idea, if it helps build relationships that let us build something better later. It's more that as soon as IT touches it, we get to own every legal aspect of it too. So they ended up with an external consultant that built them what was essentially an external database they could query, which was then supplied with data by some program somewhere.
It ended exactly as you say. They got a back-office firm to develop some one-off hack that alleviated the immediate problem, without replacing excel.
I think this highlights the main issue with replacing Excel, which is that most people have an undocumented, informal workflow with their tools in Excel that would be difficult to replicate fully in other software.
Relevant XKCD: https://xkcd.com/1172/
As someone that has had other software tools replaced with alternatives (think Slack replaced with Teams), the new solution almost always speeds up and fixes a lot of problems. It also invariably screws up at least one thing that I need the tool to do as a part of my job.
I love my IT colleagues, but (and I mean no offense to them or other IT folks) they don't understand that the way we use our internal tools is super flexible and doesn't adhere to an end to end process. It's how we ended up with an entire software platform that takes more manual steps, breaks in a way that we can't fix, and still requires the use of Excel to get the output into the formats that our stakeholders need. It also can't adapt quickly when we need to change things in our process.
It is a technically impressive tool that does the things they designed it to do super well. But we're like a month away from needing an Excel tool (or another piece of software) that can reliably do all the things we didn't realize relied on the "hot spacebar" from the XKCD.
Outside of specific domains such as finance and accounting, most people don’t really need Excel, and will be served perfectly well by Google Sheets or whatever.
Indeed, I have hardly used Excel in years. I do use Google Sheets at work, where they are used for adhoc tracking by engineering, product management, project managers, etc.
Our son who is 11, he uses Google Sheets - and I know he has used Apple Numbers in the past too. I’m not sure if he even knows what Excel is.
I think people conflate Excel the product with workflows that can be solved with Excel. Lots of tools like sheets and even numbers can do the latter, but nothing since Lotus competed with the former.
So if you've never used Excel, you can probably get away with an alternative. But if you already know Excel, why would you add another product for some subset of use cases?
I'm a heavy Excel user, and I have yet to find a usecase that cannot be solved in Sheets. It has App Script after all, for whenever you run into a feature that isn't there. But even then, I've translated many Excel functions to native Sheets array_formula equivalents, and found the latter much more ergonomic.
Much of Excels dominance is due to its legacy pervasiveness in certain industries/ roles (notably finance or financial related but there’s strong bureaucratic use of it as well asan ad-hoc tracking tool for instance) and the fact that two generations of people grew up using it.
I’ve noticed over the years that younger generations are far more used to using Google Sheets since schools and universities have strong adoption of Google Workspace. As a result, I’ve seen less and less use cases that were once believed to be Excel only domains turn out not to be.
I’m not going to proclaim the death of Excel by any means but it’s not as ironclad of a leader position as it once was. There is however some increasingly niche cases where Excel can do things that Sheets can’t, or doesn’t do as well. One non obvious (for todays environment) use case being offline portability, Excel being a standalone program really helps here.
That said, they both suffer from one issue that’s the same, which is there is no ergonomic way to run business logic rules over the calculations easily (and some cases at all)
What do you mean by “run business logic rules over the calculations”? Genuine question.
Don’t most people embed business logic into their spreadsheet formulas?
Or is there something else you’re referring to?
It’s not uncommon for the sums of the spreadsheet to get fed into other systems or even spreadsheets.
There being validation around that can significantly reduce errors, such as checking totals against system values etc.
There are lots of cases in businesses where there are integrations with other software that are difficult to port.
Maybe it has changed, but last time I tried to use numbers it still didn’t support resolving circular references through iterative calculation.
Mostly in jest but the use case where Sheets falls over for me is copying formulas to the right…
> But if you already know Excel, why would you add another product for some subset of use cases?
I know Excel – I've been using Excel since before Sheets existed. First spreadsheet I ever used was Lotus 1-2-3 for DOS (I was just a kid at the time, so I was just mucking around with it, not using it in anger – but I remember watching my father use it in anger.)
At my work everyone gets Sheets, whereas you only get an Excel license if you specifically request one – and most people don't. So why would I use the product which most of my colleagues don't have, instead of the product everybody has?
Likewise on my personal laptop, I have an Excel license... and still I use Sheets for most things. Habit maybe? I've never used the web-based Excel, and I don't like having to deal with open another app.
The only time I ever use Excel nowadays is if I need to open some complex Excel spreadsheet that Sheets can't handle properly, or if I need to work on some Excel spreadsheet import/export function at work – both of which are "once in a blue moon" activities for me.
I've only watched an Excel expert work their magic in person once and it was straight up sorcery. I'm glad not to need to learn it, but it was eye-opening seeing her rapidly make changes (with me not understanding what she was doing, sorta how non-experts likely perceive what we do when we help them with their personal devices) and come out with exactly what she wanted. Must have taken her about a minute and there were changes every several seconds until she was done.
Black magic in the hands of an experienced user.
In the case of Google Sheets, one reason is that collaborative editing in M365 Excel is absolutely awful. It’s slow, clunky, and more importantly loses data. If you have a shared spreadsheet with important data in it, it’s worth switching.
I’ve worked with a “prototype CRM” that was just a big Google Sheet. Basically a lead generation form would add a row to the sheet, and the sales team would edit cells to reflect the state of the sale. It grew to 3 million rows and still worked. Doing that in Excel is a laughable idea.
I’ve also been on a management team where compensation planning was done with ten managers editing a shared Excel sheet with just a few hundred rows. Somehow some rows got deleted and others got slightly scrambled during the process. It was a huge mess.
As an expert in Excel, don’t you think Google Sheets has chipped away at Excel's dominance in a very smart way? I’m not saying that Google Sheets is a complete competitor to Excel, but it has been highly user-oriented. And, if we add Apple Numbers to this discussion, I feel it’s still at a kindergarten level by comparison.
I think this is where IronCalc like software could thrive: finding a non-complete competition to Excel, and Google Sheets that does the other part of the work better.
What Google Sheets did that was super innovative IMO was make a spreadsheet that integrates with the entire Google ecosystem.
I am partially joking (they put it on the cloud in a way that's super useful and made collaboration remotely easier, along with other scripting inprovements), but I think it highlights that the main "benefit" to Sheets is that it's a fully featured product created by a mega-corporation that complements other tools they have to offer.
Put another way: how many companies use Microsoft for everything except Excel? How does that compare to companies that use Google Drive for everything except for spreadsheets?
A tool like this one has the upward battle of needing to be so useful, it is worth employing alongside your currently existing office software. It feels like spreadsheet software is a particularly hard arena to compete in, given the quality of the major ones you mentioned.
> It feels like spreadsheet software is a particularly hard arena to compete in, given the quality of the major ones you mentioned.
It’s not just a feeling. A basic Porter’s analysis, especially with a 6th force, reveals how nearly impossible it is to compete effectively (now) in the spreadsheet software market given the dominance of the major players.
[1] https://en.wikipedia.org/wiki/Porter%27s_five_forces_analysi...
a killer feature of Sheets is querying web-based databases for adhoc reporting. You can do this lots of ways including Excel, but sheets was early and makes it very easy. I've saved so much development effort (in Excel or elsewhere) just dumping data into a sheet and letting them at it.
I think that experienced Excel users and managers don't expect Excel to be perfect, but have figured out how to cost the inevitable bugs and changes into their expectations, to a good enough level of accuracy.
Nobody knows how long a software project will take, if it will deliver something that works or not, and if responsive support will materialize. Many if not most developers agree with this, even if they disagree as to the root causes.
One way to think of it is that it's a difference between a person and a process. A spreadsheet can be created and maintained by a person -- often the end user themselves. But since most people don't program, getting software written and maintained requires a process.
The same is true of driving a car versus flying in an airplane. When you drive, you feel like you're the person who's in control of getting yourself to your destination. When you fly, you're placing yourself at the mercy of processes that you don't control and that are not all aligned with your interests.
As a long time Google sheets user I recently was involved in a project for one of these Excel heavy enterprises.
I proposed the CRUD solution to complement their use case but the solution was not received well. They couldn't allocate computer resources to host the solution within their infra easily. So they pushed back and asked us to develop some Excel add-on, PowerBI based dashboard or some kind of Microsoft no code I can't care enough to remember the name.
I had no experience with PowerBI at all. But had a lot of fun learning about it. Great ideas on that piece of software but ultimately it's too hard for Excel users and too finicky for real data processing other than very simple stuff.
It failed spectacularly in the end. We could never make it work reliably and the customer also skimped on the license and didn't want to add some extra features M$ft charges on the side such as power automate and some "advanced instances". Which meant the software runs have to be manually triggered on the managers machine to update the dashboards. It was nasty.
The end result is completely unmaintainable. A collection of "M" scripts inside a power bi dashboard, it pulled data from multiple spreadsheets from specific locations, joined and processed the data, and generated reports. The scripts runs on a Thinkpad so it needs to fit inside the machine constraints of memory and processing. Some of the files are manually updated so very easy to mess up the format or permissions to the point the whole thing broke.
It was a cool experience I'm never repeating
This mirrors my experience. I am the accounting manager responsible for updating these dashboards at my saas employer. Troubleshooting powerbi errors during month-end close is the most stress-inducing thing. And whenever management wants a dashboard edit, we have to somehow know that the spreadsheets being fed the powerbi cloud data will also change. Maybe an extra row inserted into the pivot table of ARR by product. Now any formulas directly referencing the cells rather than using XLOOKUP are pointing to the wrong product category. I was chewed out hard for that one a few days ago even though IT made that change, since it updated our report after review. TLDR: Powerbi suck, use a data warehouse and SQL for data transformations.
> I have had my fair share backlash when trying to introduce replacement and complimentary tools. To replace excel, you not only need to advocate for it's usefulness and you need to be also be liable to the complaints from excel users. If anything goes wrong no how minor with the new tool, you are the one who introduced all these mess.
That is a universal issue of IT management: Any change implemented in IT systems (or anything else) will get that kind of resistance - bigger changes cause more resistance. If you change their primary tool, which they use all day and on which their jobs depend, expect a lot of resistance. The solutions:
1) Get management buy-in. They set the ceiling for acceptance - very few underlings will have more interest or make more effort than their management; if the manager dislikes it, doesn't use it, is disinterested, etc., then most others will do the same. Also, management is your support - when someone objects, they are not just objecting to you, they are objecting to their manager.
2) Get user buy-in. This is perfectly reasonable, if you think about it: Their tools, they use the tool all day, their jobs, probably they should have the biggest say. It means obtaining and utilizing their input from the start on what the tool should and should not do, etc. It may not be what you planned or expect; it may shatter your dreams; that's good - your fantasy was not aligned with reality. They provide the user end (e.g., 'don't change the keyboard UI that is in all our muscle memory and in all our documentation, and automated in macros'; 'of course you are migrating our macros, on which we depend, right?!'), you provide the technical end (e.g., 'we need a database with a spreadsheet UI and not a file-based spreadsheet').
3) Use all your development skills: test, mvp, deploy, iterate, etc.
4) Use some social intelligence: Deliver to the most interested, capable users first. Others will see them being uber-productive and want one too. Provide everyone with incredible, highly responsive support. Etc.
My first career was at a fintech company that sold auditing data. All of our clients were accountants, auditors, lawyers, etc.
Every single person worked in Excel. It didn't matter how old our website was, how crappy our code was - all that matter was that we generated a CSV.
I used Excel often - I think many people underestimate how powerful Excel is and how much of finance / auditing relies upon it.
My co-workers used to joke that the world runs on Excel. That some of the most important economic documents are probably some .xlsx file named "economy-v3" that people send back and forth over email.
I feel like any solution that replaces excel must solve a larger problem outside the scope of the spreadsheet.
Data intake, preprocessing, solving performance limitations, executing automated decisions.
If it’s just a “better excel” it’s not better enough.
Hardly.
Google Sheets is used for all sorts of things.
Does it REPLACE Excel? No, not fully. But a lot of the time, it does.
I would very much use a product that would work exactly like Google spreadsheets, web and all, but would be self-hosted.
Have you tried collabora office and/or onlyoffice ? These could match your need.
Yes and it is atrocious compared to Google Spreadsheets, unfortunately.
Yes, they are indeed not as streamlined unfortunately. Maybe ethercalc if you need something lightweight, but that's also not a real alternative https://ethercalc.net/
I use NextCloud with Collabora Online (hosted and trimmed down version of LibreOffice). All self-hosted.
Hey! This is my project! Amazed to see this here. I'll try to answer questions people might have
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!!
https://news.ycombinator.com/item?id=37559371
Hah! It wasn't open sourced then, but I did buy the book and followed his advice!
Oh wow! Good find!
Thanks you very much! Lets continue talking on Discord in the coming days!
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.
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 :)
Sweet, it's basically data on HN users then.
Only 13.4% of HN readers use Firefox. For shame. But seriously, it's interesting that safari is top by quite a margin.
* HN users who don’t block analytics
I have to imagine most of that safari is mobile safari / iPhone traffic?
I assume that's mostly iphones?
It will be HN user who dont block the analytics. That is with no DNS or uBlock solution.
I would imagine both solution being much more popular on Desktop / Laptop. Hence 75% of all views counted are actually from Smartphones.
What do your logs say for breakdown on user agent?
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.
How does your project compare to:
https://bossanova.uk/jspreadsheet/v4/ which is the open source version of
https://jspreadsheets.com/
Serious question. I base a lot of work off the open source jspreadsheet. Curious about yours.
At the moment they are a full production ready product, we only have an MVP.
If and when we reach version 1.0 we might be comparable. And you might want to use one or the other. It its difficult to say who the two product will compare in a year from now but probably IronCalc will be lighter, easier to integrate, faster in computations but not so feature full.
What keeps me in Excel 2007 is Goal Seek.
I'm not sure how unusual I am, but would be interested in knowing:)
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.
nice project ! and attempt to modernize the spreadsheet tech stack. be warned though, that the feature-set of the modern spreadsheet is gigantic, with tentacles in hundreds of nooks and corners. Any attempt to play catch-up is a losing proposition. Hence you could position it so as not to directly compete with excel - in areas that are new or emerging.
trivia: js based https://ethercalc.net/ is in turn is derived from https://github.com/DanBricklin/socialcalc written by the spreadsheet inventor dan bricklin
Fun fact: Audrey Tang, creator of Ethercalc, went on to become Minister for Digital Affairs for the Taiwanese government.
I've said this in some other comment. We can't and will never be as feature full as Excel. We want to find different use cases. A super light spreadsheet with MIT license that you can use anyway you want.
If I were to go closed source, for instance, I think I loose 90% of my selling points.
One of my dreams if I were to create my own web-based spreadsheet engine would be to make worksheets much more general purpose and not stuck in tab UI like Excel. You would be able to embed them separately in the page so multiple worksheets could be viewed at the same time. Example: you might have multiple small worksheets with financial summaries where the columns are slightly different. You could also do things like include text above/below worksheets, to present the data in a document-like format.
This is how Apple's Numbers.app works.
Very cool library. I like the goal of Excel support (it truly is an incredible platform). A couple of questions:
1) Any plans for programmatic manipulation of pivot tables? Looking across the Python ecosystem, outside of xlwings (which essentially requires FFI manipulation of a running instance of Excel), nothing else makes it possible. It does look like some .NET Excel libraries support it.
2) Will there be ability to use the engine as library? Would love to use something like this through Python bindings.
> 1) Any plans for programmatic manipulation of pivot tables?
As soon as we possibly can
2) Will there be ability to use the engine as library? Would love to use something like this through Python bindings.
That is in place already! It is an MVP, so I haven't published all packages for all architectures but you can compile it from source:
https://github.com/ironcalc/IronCalc/tree/main/bindings/pyth...
https://pypi.org/project/ironcalc/
Cool project!
Do you have a detailed list tracking compatibility with Excel?
Do you have any great ideas where you can surpass it (in one way you can use yours without UI)?
Thanks!
There is not a detailed tracking of all Excel features. But we track:
1. Function implementations: https://github.com/ironcalc/IronCalc/labels/Functions 2. Dynamic arrays, defined names, pivot tables, ...
Excel is huge we only aim at implementing a subset.
Exactly because Excel is huge it'd be nice to have such a detailed reference, grouped by type: functions, UI, scripting, built in analysis tools etc
And some features could reduce pressure re compatibility in other areas. For example, if you had some kind of wasm plugin system, then people could easily write the lacking functions in their favorite language without having to wait for the core to add such a function.
Thanks for the feedback. I will try to build a more detailed compatibility reference as you describe.
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
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!
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.
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.
Hyperfiddle and Quadratic implement some of the items on your wishlist (richer data types, modern programming languages, working with arrays, better connectivity to data tools).
They are both amazing tools!
Do you see this as an alternative to OnlyOffice? I’m wondering if you’ve tried it and how you think this compares
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.
Amazing project. The question I have is why rust? Is the compiled WASM significantly faster than JS?
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.
There might be some tricks from Row Zero that you can borrow
https://news.ycombinator.com/item?id=39551064
https://news.ycombinator.com/item?id=41512270
Looks cool! What sort of different solutions do you imagine devs building on top of the engine?
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 :)
Where and how do you handle the operator precedence? I couldn't find in the codebase.
I wrote about it at length here:
https://www.nhatcher.com/post/a-rustic-invitation-to-parsing...
The implementation in IronCalc follows that.
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...
[flagged]
The function for asterisks and slashes is called from the functions for pluses and minuses. The result is that asterisks and slashes are evaluated before pluses and minuses. It's actually very easy to understand once you get the idea.
https://en.wikipedia.org/wiki/Recursive_descent_parser
I don't think a recursion should be involved in the parser. Shift-reduce may be an answer but it does not fix the problem either if you try to implement that. I would like to see real code rather than written homework pieces.
You're conflating parsing of expressions with operator precedence parsers (aka Pratt parsers). IronCalc uses a recursive descent parser, and Pratt parsers are an optimization of recursive descent parsers. Pratt parsers have one function that implements all precedence levels, while recursive descent parsers have one function per precedence level, but they contain basically the same logic.
Source: 20 years ago I converted GCC's C++ parser from recursive descent to an operator precedence parser; obviously GCC respected precedence even before my work, which was purely an optimization. In fact the code I replaced had the note "The expression parser recurses through the various levels of precedence as specified in the grammar, rather than using an operator-precedence technique".
https://github.com/gcc-mirror/gcc/commit/b8b94c5ba81744d325f...
Operator precedence is an addition to parsing of expressions. Both of them is needed if you accept "2 + 1" kind of expression. "2 + 2 * 2" must be evaluated like "2 + (2 * 2)". Only expression parsing will evaluate them like 8.
You can choose: learn recursive descent parsing, or keep on being confidently incorrect.
Better not use popular toolchains then:
https://gcc.gnu.org/wiki/New_C_Parser
https://clang.llvm.org/features.html
I think this is a quite popular approach for multiple reasons. That being said, tree sitter uses GLR.
There is no recursion involved in parsing. You keep a stack for the tree.
Recursive descent uses the processor stack as the parsing stack.
Recursion is mostly involved in interpreter, and most of the time it is a bad practice. No recursion needed in parser.
Dunning-Krueger effect at its best, I am done arguing.
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.
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.
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.
Ooops, just fixed it. Here is the link:
https://discord.gg/zZYWfh3RHJ
I don't necessarily respond every day immediately, but I am active.
I got in via https://discord.gg/zZYWfh3RHJ from the github repo
Hey, sorry for the noob question. What is the use case for this. Is it to integrate into webpages for rendering data in spreadsheets/tables ?
Beautiful project. Congrats and thanks !
Nice :)
You've added xlsx format to export. Is it legally allowed?
Yes, it is an open format:
https://ecma-international.org/publications-and-standards/st...
Where does the name come from?
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
It’s a great ambition to replace Excel and many went down this path before. Congratulations to even attempting to achieve it and going this far to do it.
Excel compatibility, when fully realized, will remove the major obstacle to adoption. Given the current stronghold Excel has on the market.
Once that is achieved do you plan to offer a transition to more modern forms of calculations as vectors and arrays formula panels together with frozen sheets of raw data and output? Thus separating logic and model.
Also when your solution adoption will have grown much larger you should learn from the experiences Bavaria and CERN went through. Microsoft stronghold more often than not has nothing to do with technical prowess.
>Also when your solution adoption will have grown much larger you should learn from the experiences Bavaria and CERN went through. Microsoft stronghold more often than not has nothing to do with technical prowess.
Can you elaborate on those experiences?
The government of Bavaria, one of the wealthiest countries of the German federation and thus of the world, tried to replace Microsoft with Linux and generally FOSS solutions. Twice.
CERN tried to replace Office with NextCloud. It is now struggling to cope with a policy reversal under Microsoft fanboys.
Both cases were also discussed here.
Yeah, that is not our battle. At least not right now. Excel, and Google sheets, are and will be far more advanced than IronCalc. What we can do is to cater different needs. The focus is on lightweight and open source. Given the billions of spreadsheets out there I wouldn't be surprised if for a small percentage of them IronCalc is a better option.
The reason for Excel compatibility is twofold:
* You can use your workbooks as the are * You don't need to learn a new tool
> do you plan to offer a transition to more modern forms of calculations as vectors and arrays formula panels together with frozen sheets of raw data and output?
So far, nothing beyond Excel's compatibility
cool project, but I don't particularly like "The democratization of spreadsheets" as a catchphrase. Like, what does that even mean? If by "democratization" you mean like, more able to be used, well anyone can go download LibreOffice or for the web use CryptPad's Spreadsheets, and if you mean that it's more open, well both of those are open source. Is this project specifically run democratically or something? It just seems like a really bad use of meaningless marketing terminology.
Can only agree with you. I just created a ticket for this:
https://github.com/ironcalc/ironcalc.github.io/issues/14
As I said somewhere else I had really bad marketing skills. Maybe I should talk to someone who really knows what they are doing :)
The catchphrase was decided in 5 seconds when I was sending a proposal to the nlNet and stuck.
Thanks for the feedback!
I think it's the general idea that free (as in speech) software is "democratic". Even if the project does not do what you want you can always modify or fork, i.e. make changes privately for your own use or even distribute them. Closed source software is like totalitarianism, the leader or leading party knows what is best for you.
Democracy is not the best analogy, free software projects have BDFLs. The difference is more indirect, in democracies citizens have rights and freedoms. In non-democracies typically less so.
FOSS is more anarchistic than democratic, I think. Sure, there exist democratic organizations like the Debian Organization, but if you don't agree with their decisions not much binds you to them (that's how projects like Devuan can exist). The same applies to projects with BDFLs as well (altho I do disagree with that form of governance for a project).
99,9999999% of the people using open-Source software are absolutely unable to modify or fork said software. From the other 0,00000000% most don't care enought to modify it.
Calling it democratic is is like calling cancer a completely natural phenomenon. It's true, but it's also completely beside the point
So what? Coming back to the poor analogy of democracy, the same fraction of voters could not run a government. The majority has never participated in any public manifestation.That does not mean we should all live under dictatorship.
Because of your comment, I discovered OnlyOffice.
I recommend you un-discover it and take a look at the Collabora office suite. It's basically the LibreOffice engine with a web ui on top. We've been using both OnlyOffice and CODE for years, and CODE has much better performance (both the client and the server; probably because the backend is in C++ instead of Node), it's more stable over the long term, and has better compatibility with msoffice.
https://www.collaboraonline.com/code
https://hub.docker.com/r/collabora/code
(it's FOSS, the language about "home use" is there to scare large companies into buying commercial versions with support contracts.)
Onlyoffice have a lot better compatibility .
This reason met my definition of democratization:
> Empowering SaaS Developers: Hundreds, if not thousands, of companies have implemented half-baked spreadsheets in their systems. IronCalc aims to provide these businesses with a superior, open-source alternative that enhances their SaaS applications.
I am currently creating SAAS and the idea of implementing LibreOffice on top of my offering just not gonna work.
Awesome project! Looking forward to following this.
I've been looking out for projects like this over the years and I'm glad to see that this one takes Excel compatibility seriously! Also love the choice of Rust and WASM!
For me Dynamic Array support is a blocker and I can't play with it until you've got that. Very glad to see that's your top priority though[1]! That and everything in the Logical, Lookup and Reference, and Information sections (in that order). That covers probably over 95% of my work and I spend most of my time in Excel.
1: https://docs.ironcalc.com/
What would be quite cool would be a small utility that one can run over ones workooks and that produces a csv or json file of all the Excel functions used and their count.
People could submit those and you'd get real usage stats of what functions people actually use in real world workbooks rather than guessing.
Users could also then use this to run a compatibility check to see if they could move over to your engine or not.
Hi snthpy, that is planed! We used to have that, but I removed it to simplify the UI.
If you don't mind compiling yourself there is a somewhat rough tool tat does that:
https://github.com/ironcalc/IronCalc/blob/main/xlsx/src/bin/...
It will tell you exactly what cells evaluate differently.
I will also add mentions to unsupported formulas and features
Thanks! Yes, that is exactly the top priority of the project right now.
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/
"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
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.
backend does not imply server to me, it implies software that does the calculating engine work and does not concern itself with display refresh.
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://matplotlib.org/stable/users/explain/figure/backends....), or the deep learning library Keras has a choice between PyTorch, JAX and TensorFlow backends.
we're talking about a spreadsheet engine, the backend is not going to be the Xserver displaying it
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.
Surely that's background not backend.
I wouldn't call it background unless maybe it's async or continues to process stuff while you're doing other things.
what's the backend of a spreadsheet engine going to be doing? updating the datastructures of the spreadsheet.
is it going to be local or remote? that's not part of the question.
is it foreground or background? that's an implementation choice. apple II, yeah, everything freezes while it recalcs. windows? recalcs when it can, don't let the mouse freeze.
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!
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.
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.
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.
What Google Sheets functionality you're missing there?
Of course there's a lot missing, but what's interesting is what you've reached for and could not find.
How tightly coupled are the React app and the Rust backend?
I hope the backend engine can be used standalone embedded in other apps.
It's interesting that the Iron prefix means rust now. It used to mean .NET
Agree with your comment. I almost didn't click on it because I wouldn't be interested in a C# or .Net project and was very pleasantly surprised. I don't love the name.
Oxcel ?
...but only in the +3 oxidation state.
Yeah, like IronPython.
Have you looked at these other somewhat similar Rust projects?
https://github.com/logisky/LogiSheets
https://github.com/natefduncan/excel-emulator
https://github.com/jiradaherbst/XLFormula-Engine
https://github.com/omid/formula
https://crates.io/crates/df-web/0.1.28
I _think_ I saw the XLFormula-Engine. At least the name rings a bell.
I guess I have some reading to do!
What is the last one?
I'm not exactly sure...it seems to handle Excel files in some fashion. It came up when I looked through this https://crates.io/keywords/excel
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/...
> 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
What does that actually mean, "works"? I don't know how that behaves in Google sheets or Excel. Is it evaluated exactly once the first time the formula is entered? Every time you focus the input? Is the dice rerolled when a1 or a2 is modified? What?
Hi 8n4vidtmkvmk, the algorithms for evaluating spreadsheets are surprisingly tricky mainly because of the dependencies. The dependencies are only know at runtime and in Excel are lazy evaluated. So things like `IF(condition, value1, value2)` would evaluate first the condition if it is true it will evaluate value1 but not value2. So things that in other programming languages are a circular dependency are not so in Excel. The problem of computing the dependencies might be solved by topological sort. The complication of the runtime dependencies is made worse by having dependencies that change every time (or that their outputs do not dependency solely of their inputs) like random functions or date functions. An optimization while evaluating a spreadsheet would be to only compute those cells that depend on cells whose value changed. If you do that you might miss on those volatile functions.
I realize I am most likely babbling too much.
Yes, volatile functions like RANDBETWEEN get evaluated each time a cell changes. They don't get evaluated when you focus on them.
Thanks. I wonder if it would make sense for RANDBTWEEN to take a seed so that it becomes non-volatile unless you use time as the seed.
This sounds like a cool project! Does anyone here knows how it compares to univerjs ?
I currently use univerjs to power the open source sql spreadsheet component I work on (https://github.com/sqlpage/sqlpage-spreadsheet/). My experience with it has been that it's very powerful, but quite difficult to use due to the boilerplate involved, the lacking documentation, and the fact that it seems to be developed mainly for the Chinese market.
Woah! I didn't realize luckysheets renamed to univerjs!
I think at the time being you should stick to univerjs as it is a finalized product. Once we reach version 1.0, IronCalc should be easier to deal with and you cold consider using one or the other.
Can't tell by the docs (but I've not dug in much yet) but... @nhatcher... here's a use case question.
Admins use the ironcalc UI to create their formulas. Is there a way to get those formulas to a backend and run the calcs on the server itself (separate from the user's browser) to get results based on input from other sources?
The UI half looks great so far. I have a colleague I was going to recommend this to, but they more need the 'run the formulas on the server' part more than anything else. They've got some custom Rust stuff running already, but having admins come up with their advanced formulas, then translating that to server code - that takes the time. It seems they may be able to use this to have this handle both ends of the workload, without the translation layer.
Is that something supported, or even feasible?
Thanks!
Yes, IronCalc is first a spreadsheet engine. Meaning it is a library you can consume from Rust or Python without any UI.
Congratulations, this is awesome. One of those "why hasn't someone done this already?" projects.
I can see this becoming transformative and superseding Excel, which is a bold claim to make. But this is compliant (with Excel), performant, extensible, free, and in-browser. This could easily become almost an emacs-level editor.
Think of the interfaces that could be built to this in this?
I'll be sharing this with every student I know.
And the name is a winner.
> One of those "why hasn't someone done this already?" projects.
I think this one is fairly clear. It’s because it’s a massive amount of work with a not necessarily large payoff for yourself?
I think some of these basically get made when someone gets too annoyed something similar doesn’t exist.
It is a massive amount of work. Another thing I might add, not the most appealing thing to work on.
I suppose at least you get to check off a lot of boxes when another formula passes all test cases :)
Why would there be any reason for this to kill excel? Seriously you should try to replace excel entirely rather than merely get a better version of it. If you want to get a better excel just buy excel and actually learn how to use it.
Woah, thanks for the kind words!
This is out of date, and not a priority ATM, but we will have a TUI for it:
https://github.com/ironcalc/TironCalc
When I worked at the Excel team our motto was Excel is the second best tool for everything.
I'm excited to see more players in this space though, all the standards are open and there are decent libraries with decent licenses that exist. A lightweight LibreOffice alternative would be neat and something truly open source and embeddable (MIT) is great.
Props on Rust not being mentioned here or on the index page.
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
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.
Is this similar to pysheets? From a quickscan it seems that its running client-side via rust/wasm but where are the data stored?
Interesting to see all those different takes on the spreadsheet metaphor.
The data is stored in your browser's localStorage.
I think the take is a tad different form pysheets. Cool tool though!
I was recently looking for a Linux alternative to LibreOffice Calc and couldn't find something that meets my needs (mostly CSV import/export, filtering and pivot tables). It's great to see this new contender showing up and even if it lacks major features what's there so far looks very good. This is promising! Congrats for the good work and best wishes for what's to come.
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?
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
Thank god for that, VBA gives me nightmares.
It would also be pretty interesting to see a modular system where we can run Python scripts as well
Impressive project. I’ve dealt with Excel a lot so anything new and ope source catches my attention.
The docs currently focus on the engine part but I’m more interested in the integrations (for example, with Java, Angular, Vue etc).
I’m currently on mobile but I’ll have to take a look at your React example to see if I can write a working Angular or Vue example.
The idea is to have an egine that is clearly separated from the various "skins" like a React, Vue, a TUI or a desktop app. At the moment the React component is a bit difficult to use in isolation. I need to provide a npm package that folks can install
I am quite excited about the new era of WASM webapps - those are cross-platform & fast. Unlike traditional desktop programs those are sand-boxed & unlike mobile apps the distribution channels are open ("side-loading" by default).
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.
IIUC, this project is focused on the calculations, not the UI.
Thanks, those things are on the roadmap :)
In it's current form, how would I integrate the engine and UI in an existing software with, say Java backend and React front-end?
I couldn't find docs on how to use it in languages other than rust. Perhaps via IPC?
At the time of writing, you can use Rust, Javascript and Python bindings.
The React front-end communicates with wasm compiled from Rust.
Java bindings are planed but not in the next ~6 months. A client/serve architecture (like libreoffice does) with IPC or sockets might be a good idea for languages that we don't provide bindings to. also not planned for the next 6 months
> The React front-end communicates with wasm compiled from Rust.
Just to clarify, this means that the entire engine is compiled into wasm and runs inside the browser? There is no server component?
The server:
* Serves the files * Stores if you click share * Converts to xlsx if you download * Imports model
The engine is fully compiled to wasm and run in the browser.
This is awesome. Will try using it as the foundation of some web tools.
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.
Any plans to add C bindings? Most other languages have a decent FFI story, and being usable from C will make it more universally usable.
Yeah, that should be pretty easy. I'm actually curious. I might try this soon
Sudently I have the urge of adding this to my app report system
Great, very needed.
Consider making formula engine standalone as it might be used in other contexts, like Markdown or html tables.
Calc and Dbeaver with DuckDb for me. If it compiles with Mingw, why not.
f
[dead]
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?
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 :)
This probably sounds daft, but I was trying to figure out on the site what platform it ran on.
It doesn't seem to say "in browser" - so I'm wondering if it's Windows or Mac or ...?
Since it is in-browser there's then no detail on what the scope is - where are the spreadsheets stored? How are they shared? Do I host it on my server? Are they stored on your server ? Can I embed it on an existing page? Can I update cells via JavaScript? Or websockets?
And so on.
Some of the above is inferable from the comments here, but not all.
Congratulations on a cool project - but you may want to "set the scene " as it were for prospective users.
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.
I'm not sure what you mean by 'that AI style'. What are some examples?
Gerund Adjective Noun (heading)
* Gerund Adjective Noun (bold): (colon) text (non-bold).
----
Already the format like this. Then plus points for sounding like an empty phrase that chatgpt likes. Eg from the heading "Addressing Unmet Needs" then bullet "Empowering SaaS Developers:" in bold.
It's hard to describe. If you use chatgpt a lot, you develop an intuition that has many components.
I can sort of see what you're saying, but I think a lot of marketing is like that. Chatgpt is just regurgitating it.
It shows the main focus is not the technology, but the fact spreadsheets are important and deserve a robust open source alternative.
I think using the word "democratization" is the main issue, how does that even make sense in software? Who is doing the voting? You just "vote" by forking...? I don't get it, you also "vote" by using Microsoft Excel.
'Democratization' IME usually refers to the foundation of democracy, equality in rights, freedom, and opportunity. It's something for the masses, for the people.
Yes I know what the word is being used these days for but it doesn't make sense. Democracy does not inherently have anything to do with these additional (also vague) terms.
Democracy doesn't have anything to do with "equality in rights, freedom, and opportunity"? That is the point of and foundation of democracy - no democracy without them. It's incredible that people are so anxious to destroy freedom and humanitarianism (why?) that they adopt an obviously false history.
Those have long been believed to be the foundations of democracy; you might have heard this one, which founded one democracy:
We hold these truths to be self-evident, that all men are created equal, that they are endowed by their Creator with certain unalienable Rights, that among these are Life, Liberty and the pursuit of Happiness.--That to secure these rights, Governments are instituted among Men, deriving their just powers from the consent of the governed, ...
That also says governments exist - their reason for being - is to protect those things you deny are relevant.
Then from the French Revolution, and now France's national motto: Liberté, Égalité, Fraternité. "Liberté, Égalité, and Fraternité are fundamental values that define French society, and democratic life in general."
https://www.liberties.eu/en/stories/liberte-egalite-fraterni...
From the Universal Declaration of Human Rights:
Whereas recognition of the inherent dignity and of the equal and inalienable rights of all members of the human family is the foundation of freedom, justice and peace in the world, Whereas disregard and contempt for human rights have resulted in barbarous acts which have outraged the conscience of mankind, and the advent of a world in which human beings shall enjoy freedom of speech and belief and freedom from fear and want has been proclaimed as the highest aspiration of the common people, ...
Whereas the peoples of the United Nations have in the Charter reaffirmed their faith in fundamental human rights, in the dignity and worth of the human person and in the equal rights of men and women and have determined to promote social progress and better standards of life in larger freedom, ...
Article 01: All human beings are born free and equal in dignity and rights. ...
https://www.un.org/en/udhrbook/pdf/udhr_booklet_en_web.pdf
All of those are just additional things ones wishes democracies to have but are not inherent in the word definition. I can certainly see that some people wish to have the definition of "democracy" expanded to mean many additional things but that really isn't the point of having that very precise word.
What basis do you have to say that? Otherwise, these claims are just bytes with no force behind them. You can see the overwhelming evidence and consensus otherwise, stretching over centuries!
Even more, why do you want it to be true? Why do people want to eliminate their own and others human rights, an incredibly positive basis for society and for your freedom and prosperity, which has resulted in what are by far the most successful societies and people, by many measures, in human history? You're giving away all that for what? To look clever and 'with it'? Smarter than democracy? Very clever.
You should be fighting for it, like your predecessors did. Otherwise, you'll lose it. There are people actively and successfully taking it away, while you are engaging in this philosphical exercise.
Words have a fairly precise dictionary meaning and it's important not to constantly wage a word war where you want to win political and social arguments through word redefinitions. It's information pollution, you redefine words like "love", "equality", "freedom", "democracy" until they mean something completely different and suddenly you have a divided population that can't even talk to each other anymore because all this confusion that you just had over the word "democracy" is only possible because you are misusing the word.
It's not a redefinition. I just showed you definitions centuries old. These things are universally associated with democracy, except by dictators and their supporters who try to redefine them.
Yes, "associated with". But it is not part of the definition of the word. I don't know how much clearer anybody could make this. Democracy just means voting, it does not even mean that everyone gets to vote and certainly not equally. Even if you don't like it and even if you want that to be included in the word definition, that doesn't make it so.
You are right. I created a ticket to remedy this:
https://github.com/ironcalc/ironcalc.github.io/issues/14