Show HN: Tenno – Markdown and JavaScript = a hybrid of Word and Excel (tenno.app)

401 points by deepmacro ↗ HN
Tenno is a web app that lets you create Markdown documents that can include computational cells. You can think of it as a mix of Word and Excel, some sort of "literate programming" environment.

This is still an early version but I wanted to get some feedback from HN on what could be nice features to add.

Check out the Docs and examples page, it has a ton of (in my humble opinion) cool stuff!

Why did I build this? I was building some estimation for cloud costs in Google Sheets and I quickly ended up with a mess. I realized that if I wanted to analyze how a certain thing changes wrt to multiple variables by plotting it, I had to create a bunch of copies of data and copy my formulas everywhere... a SWE nightmare!

Tenno simplifies this because you can essentially define a function you are interested in, and only the analyzing it using plots that explore various dimensions.

BTW, you can also use Tenno to build dashboards by pulling data from APIs, checkout the weather data example.

140 comments

[ 5.7 ms ] story [ 203 ms ] thread
Nice! What about integrations with Google sheets?
That seems quite doable but it would require a backend to store the OAuth
Public sheets don't require oauth, i am using public sheet as test url to display csv in my tool.
Vet cool! I've always wanted something like this in my note taking (currently use obsidian), but it being a "webapp" is kinda a deal breaker. I want something that runs and stores my data locally.
Well it's a web app but it's not using anything in the cloud at the moment, I experimented with packaging it in an app for Mac and works nice. If more people wanted it this could definitely be converted in something running locally where you can store .md files in your computer.
You can do a lot of this in obsidian with the dataview and execute-code plugins!
Didn't know about this! Will look into it, one nice thing here is that you do not need "ordering" like in imperative programming when you define your cells.

Is that possible too in Obsidian? Or perhaps it's not useful...

If you hate spreadsheets this could be your way out of it...
Nice idea, could be a lightweight enough way to create some visualizations
Yeah, at the moment I only have line charts but I can add other charts using ChartJS. I also think it could be useful to share some initial prototypes with less technical folks.
Interesting effort.. I'd just spin up a Jupyter Notebook instance, but hey.
Right, something that's potentially difficult with Jupyter is sharing something that looks nice with non technical folks where they can easily change values and see the result change immediately without having to execute cells.
Tenno is the name of the faction in the video game Warframe the player characters are comprised of. Just want to point that out.
This was my first thought, probably will make searching stuff difficult.
Should not be too bad. The two are different enough that you can add some sort of context to your search terms, like searching for "tenno markdown".
Cool, didn't know that, but I can assure you it's also the name of a lake close to where I live
Make sure to always google a name you want to use before using it, to make sure you're not going to get clobbered by someone else's dominant SEO on the word.
Actually I did some very simple search and most results were about my local lake, so I figured that the context was different enough, we'll see.
That's personalized search results for you :) That lake would not be ranking high for anyone except the people in the vicinity.
Might search also using eu.startpage.com, Qwant, …and Kagi if you have it.

(( Tenno is also a Japanese word usually translated as "emperor". ))

It’s also the Japanese Emperor.
Sounds similar to emacs org mode where you have markup and tables can have Elisp formulas in them.
Yeah, that's what I was thinking.

deepmacro, before you created Tenno, did you try Org? It supports plain text spreadsheets[1] in Org documents whose content is marked up using Org syntax[2], which is a lightweight markup language like Markdown but with many more features. If you did try Org, how was it lacking?

[1] https://orgmode.org/manual/The-Spreadsheet.html

[2] https://orgmode.org/worg/org-syntax.html

i do my taxes with org spreadsheet i doubt it lacks and you also have the option to get output in html/pdf etc. with babel.
Honestly, no. I heard of it but I never used it. I am sure it has a lot of features that can inspire Tenno, I'll look more into it. One of the main points here was making it more approachable, but it depends on who the audience is.
Really nice job, the emphasis on local+live execution is much appreciated.

I’ve spent some time working on something like this and ended up in a Turing tarpit, I hope you are able to avoid that fate.

The questions I let myself avoid for too long was, who is my user, and what are they trying to accomplish? How technical are they?

Once I answered those (on year 2, after running out of money) I built the same capabilities into a very different offering. Still with the goals of local, live, executable docs, but you wouldn’t recognize it.

Thanks! That's why I posted this here to see if people would resonate with this or not... I've only worked a couple of weeks on this and I had the same questions!

Can I ask what you ended up building? Is there a website for it?

I can imagine having a secrets store whose contents can be embedded into API calls, either in the URL or in a header, would be pretty useful.

And looking further ahead, having a way to authenticate users via Okta etc with the usual gubbins of groups and permissions and personal areas and sharing URLs would no doubt give you uptake in corporate areas.

I opened the docs page, tried editing one of the examples, the page immediately crashed. You may be interested in setting up some error boundaries between your components.

  Unexpected Application Error!
  Cannot read properties of null (reading 'alternate')
  TypeError: Cannot read properties of null (reading 'alternate')
    at Uh (https://tenno.app/assets/index-y2OkIpP6.js:38:18238)
Right, I did not put a lot of checks in place for such failures. Does it keep happen if you refresh? I've never seen it TBH https://tenno.app/docs
Yup, still happens. The easiest way to reproduce it to change a title of one of the charts to `title=""` (make sure to type it, not copy-paste). I'm using Safari for macOS if this makes a difference.

  Unexpected Application Error!
  Unexpected EOF
    eval@[native code]
    parseChartCommand@https://tenno.app/assets/index-y2OkIpP6.js:114:333
Ah, yes, I just fixed that. While you edit, if the code is not valid now it will prevent from crashing the whole thing (band-aid fix).
How did it compare with https://observablehq.com/ ?
I'd have to look more into it, one thing for sure is that Tenno does not try to be something like Jupyter. The cells execution order is sorted out for you.
Observable also handles the execution order for you.
Specifically, this brings to mind Observable Framework, which takes the "jupyter-like" UI of observablehq.com and makes a static site generator out of it, where you write Markdown, and add "reactive Javascript" bits to it: https://observablehq.com/framework/. (see https://observablehq.com/framework/javascript specifically)
Note that there's nothing stopping you from embedding the Obervable runtime straight into scripts littered throughout a HTML document, see https://maxbo.me/celine/ (my own work).
I’m the lead dev on quarto.org. I’m aware - I designed and implemented our observablehq integration.
haha what a coincidence - I love Quarto and have used the Observable integration! Thank-you for your work and efforts.
I wanted to check this out on my phone, but it is unfortunately impossible to even read the text on the page or look at the examples.
Yes, a responsive layout it's something I'll tackle in the future, but I think that in 90% of use cases people should use this on a laptop. Check it out again on a laptop if you can!
Great demo, reminds me a lot of Jupyter Notebook but the "inline" cells are so much better
Excel, but linear, without the reference mess. It looks cool for mocking up dashboards. Some form of grid with nested documents could make it more useful.
+1 this! I think writing helps you create a narrative that disambiguates the mess you can create in Excel. It also forces you to think more about what you do. Good suggestions! Thanks
Easy on the features, though. If you make it too complex, it can lose its (fairly) unique proposition of simplicity.
It would be helpful to have a built-in bignum type. Excel’s usage of float is performant, but it is also a mistake. A complex number type would also be nice to have.
Neat little tool. I was looking for Excel in the examples but only saw charts.

For Excel + Word I use coda.io. You can also quickly create equations with sliders for variables to satisfy similar needs as Tenno but I haven't tried charting with it yet.

Very cool! A couple first-blush bits of feedback:

- The editable text fields currently lose focus after each keypress

- Error handling will be a hard nut to crack, but currently if you, say, add "a" to an editable textbox that expects a number, the live component reverts to text

- Minimal support for buttons would add a lot for simple interactive charts - something like:

    ::button
    label="Set x to 5"
    x = 5
    ::
interesting idea. try to understand the dsl for the chart but the doc is not very detailed
Thank you for sharing Tenno with the HN community! It's always exciting to see new tools that enhance productivity and bridge the gap between document creation and computational analysis.
The lotus will be pleased.
This is a great concept. I'd love for this to be a part of a notetaking solution that I can run locally.

Curious what your long term plans are.

I am also curious if it supports taking (entire) tables as inputs and creating derived tables from them which can then be presented as chart etc. That would be really powerful.

I was trying to get a sense of what people like and find useful. Your suggestions and comments are helping to figure that out.

I am planning to add support for entire tables, like one coming from a gSheet, and then present data from it. But not there yet, if you have suggestions, please add them to the feedback form https://forms.gle/A8Q8WAG8zj4sLvwQ7

It would be cool if you could run SQL queries against lcoal SQLite or DuckDB instances and generate tables
(comment deleted)
Very nice.

There is no support for table cell expressions though, without which marking it as Excel is wrong.

There is VS Code extension I use now: https://github.com/cescript/MarkdownFormula

Do you consider adding something like that? Any way to use this locally? Is this going to be FOSS or no?

Thanks! Yeah, I kind of want to integrate with gSheets so you can have a place where you can dump the data and then operate on it.

Also need to find a nice and easy way to deal with local tables, I'll look into the extension you suggested.

The extension allows you to add calculation even between tables by naming them in the comment:

    <!-- table1 -->
    |    Date    | Amount |
    | ---------- | ------ |
    | 2024-10-01 | 1      |
    | 2023-09-01 | 2      |


    |       |            Amount            |
    | ----- | ---------------------------- |
    | Last  | [1](#table1!B1)              |
    | Total | [3](#SUM(table1!B:table1!B)) |

> gSheets

I am personally not interested in anything beyond my computer.