What is Mesh?

Mesh is a JavaScript code editor that feels like a spreadsheet.

It runs in a browser (but doesn't require internet) and can be carried with you on a USB. It:

uses JavaScript as its formula language, and stores sheet files as JavaScript source code

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

Mesh is really a 'user experience' layer on top of the JavaScript that's built into browsers.

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

Libre Office?

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.

Roadmap

Alpha

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. Remove _OUTPUT and just add props via code to cells? Figure out whether managing locations and other props in a separate object

Docs: 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

Cleanup: 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 =new Object )

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

Beta

Undo/redo

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

Miscellaneous