Example: loan calculator
What is Mesh?
It runs in a browser (but doesn't require internet) and can be carried with you on a USB. It:
- is lightweight: ~2000 lines of source code (excluding libraries)
- has no install or privacy headaches
- strives for maximum compatibility: runs in Internet Explorer 11+ and is based on ECMAScript 5
- is free (as in beer), open-source and permissively licensed (Apache 2.0).
How do I use Mesh?
Download it here or try it out here (takes a couple of seconds to load). Here's the user guide.
Mesh emphasises structured data (arrays, tables, etc) more than Excel and Google Sheets, which can take getting used to.
Why may I want to use Mesh instead of...
Excel or Google Docs?
Aside from being free, with Mesh you can:
- work with data of arbitrary length (including changing the row count of tables at calculation time)
- compare spreadsheets using standard tools such as Word's 'compare docs', or 'diff' them at the command prompt
- integrate sheets within websites, as calculation engines
- manage sheets with the rest of your code base using your existing version control tools (they're just text files)
- use and write custom themes (using CSS).
Mesh fits into <1MB, so it has a much smaller download size. Also, it has a different feature mix.
I'd like to think that Mesh's code base is small enough that anyone can read it and be ready to contribute within an hour or two.
A 'real' programming language?
You can write real programs in a spreadsheet! For example, here's what Mesh's own code looks like.
Writing code in a spreadsheet format provides you with immediate feedback and lets you lay out your program on a 2D canvas. I highly recommend trying it.
- Allow loading and saving
- Anonymous-first. Make it so you don't need to name data to enter it. Right now empty cells generate names, will that change?
- Any code layout changes.
_OUTPUT and just add props via code to cells?
- Figure out whether managing locations and other props in a separate object
- Create short tutorial of how to use and when better than Excel, Google Sheets, etc. [shortcut list]
- Update README, including better-sized GIFs that show off the features, and interop (messaging)
- Libraries (and how to "import" and use without a build process)
- Flush out any remaining cache logic issues, eg:
- Don't recalculate if the cell's a primitive value and it didn't change
- Let's say we override b, then we send in new data in a subsequent recalc. Should b now return to normal?
- What if a cell happens to recalc to the same value as before? Should we not invalidate its calc chain from that point?
- Deleting names has a bug
- Add Mesh to Product Hunt and this free office suite list and other 'self-hosted' app lists
- Figure out whether need to add Apache license to each source file? (+ remove NOTICE?)
- Update boilerplate with latest from app.js
- Scan code for TODOs and comments
- Fix themes being gross in some browsers
- Finish light theme
- Get 'new' working again (as in
- When creating name, check for valid symbols and existing names
- Make sure edit without replacement works on strings, dates etc
- Add back array and object literal support? If so, stop extra brackets being added when add new key to object literal?
- RO table support
- IO and sharing (use Monotreme?):
- Share sheets via url hash
- Override cells via url querystring
- WebDAV and remote servers
- Add highlighting behind occupied cells to show they're taken (eg if empty string or renders to eqivalent)
- Style regex differently
- Make a Mesh electron package
- Click on cells to reference in formula (or move cursor with arrow keys)
- Aggregations - SUM, AVERAGE, etc. Predefine these functions? Have the UI insert them automatically?
- Make it easier to manage dates
- Why lookup tables are awesome (incl use of 'find')
- Copy and paste data in/out
- Guide on setting up a WebDAV server
- Move around cell locations via dragging mouse
- Split reducer table so that each 'state component' has its own column (separate fns?), eg formula bar, cells, etc
- Edit table header to rename
- Empty string entry
- Change add row/col labels so take up less height/width?
- Figure out how to manage row/col widths
- Add row/column indices (useful for counting / IDing). Similarly, way to see the coords of the selected cell?
- Excel -> JS function equivalent table
- APL/K support
- Version that supports TypeScript or all the latest JS features (bigints, realms, etc)
- Figure out how to manage Recast being pasted into the spreadsheet app (how to speed up parsing on change?)
- What to display for cells that have an invisible string? What about objects that have no string rep (eg Array.prototype)?
- Center function symbol in cell?
- Overflow - make expand to literal size?
- Boolean cells - hardcode vs softcode (take into account colour vs background)
- Should there be a function that lets you specify which cells you want the values of? IE don't get it all, all the time (feels wasteful)
- APLers don't use libraries