Obviously not a lot left to do, right?

More “relational data” support

One-to-many relations, drag-and-drop and other user interactions, data validation, cascading deletes etc.

CSV input and output

And better JSON support. And better support for browsing through deeply nested data.

Cut/copy/paste

“Cut” has obvious semantics in most cases (I think) but copy is more difficult. I would like to avoid a fiasco like “paste special”, so I’m holding off until I know what people will want to use it for, and exactly which problems it’s the best solution to.

Some kind of while loop

The general design will be, “Keep adding rows to this table until some condition is met.” I don’t know how the contents of those rows will be specified, but I suspect it will be related to the specification of “default values” in table columns (also TODO.)

This feature will let the user write an iterative Fibonacci number calculation, and run Euler’s method and Newton’s method. This will likely be the feature that gives us practical Turing completeness.

Mutation

Programmatic modification of stored values would let users write “application” spreadsheets – allow them to do more than just calculations on manually entered or imported data.

This will likely be done with pure functions that transform old state into new state – either partially (cells, tables, sheets) or for a “whole document” data structure. Or both. More or less redux-inspired.

“Async formulas” and XHR

These will let spreadsheets interact fully with external services (including external databases), as well as things like maps APIs.

Usability enhancements…

Also: need to look at a lot of spreadsheets to find out what’s hard to do in this one at the moment. Will probably need “matrices” (tables but with numbered indexing on both axes), for example.

Tab-completion in the formula box would also be lovely.

Formatting cells

I suspect embedded widgets for maps, calendars, kanban boards, charts (etc) will be “fancy views” for native object/tabular spreadsheet data.

JS interop, incl. “client npm”

The big one: the user should be able to use any Javascript library they find on github or in npm etc, including display components.

They should also be able to export things for use by other programmers – maybe just other spreadsheet users, not sure. Then real “platform” and “ecosystem” stuff can happen.

Formula engine tweaks

Some changes need to be made to function calls and array indexing to make some common tasks simpler. These changes will probably be:

  • Calls to user-defined functions will eagerly loop over an argument if the new value is an array but the old value is not.

  • Finer-grained control over function-call-argument-looping, possibly using a new keyword each,

  • Syntax for indexing into and slicing nested arrays/matrices. Maybe building on a syntax like mat[dim1, dim2].

The last point is to solve the problem of the expression mat[dim1][dim2] “doing the wrong thing” when dim1 is an array.

Investigate performance on large datasets

A better name