I've been writing something similar that keeps evolving, although computable code blocks and markdown have been in there since v1. Runs locally, saves to LocalStorage and is always in a partially broken state because I add more things than those I fix: https://github.com/rberenguel/weave
And a couple recent-ish updates (sadly twitter, because I use it as throw-devlog-there):
- https://x.com/berenguel/status/1837917590804451378?s=46&t=jc...
- https://x.com/berenguel/status/1799770200310726731?s=46&t=jc...
- https://x.com/berenguel/status/1796917242791113118?s=46&t=jc...
I did another take on this, that extends Markdown links to include types (like triples, like Semantic Mediawiki) called "mdld". It's quite powerful but I left it at a good-enough stage for my uses. https://github.com/vid/mdld
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.
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'm not knocking it. At first glance this reminds me of a notebook like Jupyter. Was that an inspiration here? Also, how would you say this stacks up in terms of sharing these files and/or running them locally? Thanks.
Edit: after seeing this, I kind of wish Jupyter worked with markdown exactly like this. Jupyter's GUI-oriented blocks jammed into my VSCode workspace always felt unnecessarily clunky to me.
Reminds me of Ink and Switch's Potluck: https://github.com/inkandswitch/potluck but this has way better DX / is way easier to use
Reminds me of https://evidence.dev/
Tenno is the name of the faction in the video game Warframe the player characters are comprised of. Just want to point that out.
Reminds me of the "Pipedream" package on the old Cambridge Z88 laptop
https://en.wikipedia.org/wiki/Cambridge_Z88
It had a combined spreadsheet/word processor. No, not as separate modules like Microsoft Works and so on, but like this, as a single program where documents had both functionalities.
Sounds similar to emacs org mode where you have markup and tables can have Elisp formulas in them.
I want to commend the developer of Tenno, because this is a great idea and I've thought of it myself in the past.
As the developer of a wiki app of my own, I've been doing block-based (cell-based editors, like Jupyter) editors for literally decades. I've also considered adding calculation capabilities into my CMS so that it becomes a hybrid between a wiki tool and a spreadsheet as well.
Jupyter Notebooks is a nice thing that's got similar capabilities but what the world really needs most is just a simple extension to the Markdown format itself.
So while Tenno may be cool, what's even more important is that the world settle in on a syntax that can embed calculations into markdown. Because the Jupyter file format (although it may be great for what it does) is just too complex for general purpose use in the way Markdown is used.
Really nice project, is there some way we can follow the project to get news / updates? Btw, I live near Tenno lake in Trentino and It's always nice to see local folks sharing their projects, keep it up!
Nice! mad nitpick, I feel like the Euro display filter is weird, as it renders "12.25€" whereas I'd expect a Euro value to be displayed "€12.25". I've never seen it with the euro sign at the end in my life! Maybe this is country-dependent?
Another one, the Editable filter is very cool, but every keypress seems to take focus away from the input, making it rather hard to edit a number in practice.
Regardless, I really like this! Of most similar attempts I've seen so far, this seems particularly ergonomic and up my alley. Great job!
How did it compare with https://observablehq.com/ ?
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?
Daily Obsidian user here. I often need to do a bit of math or adding numbers in a column, and could be the target market for this, but I'm not sure yet.
I am confused about using Excel as a metaphor, and calling things "cells" -- Excel is all about cells and tables, but actually this is just "assigning variables and doing a bit of math inside of :: these blocks :: like a templating language.
Suggestion: just explain it like that to people?
As a feature request, I often have a list of values (in a column) and want to sum them. It'd be nice if I could write it and have it print the sum in the view/wysiwym mode. Eg:
:: 10,000 20,000 5,000 = total_expenses ::
(maybe it could ignore commas too :) )
Cool work, love seeing things in the markdown space!
Great demo, reminds me a lot of Jupyter Notebook but the "inline" cells are so much better
I had one more thought about this stuff today. As the developers of Tenno did you consider using some format like back-ticks based (r ``` or r `) where an "r" in front would mean "run" this code, instead of simply display it? That way it would display a normal markdown code (aside from the 'r') in editors that don't support Tenno syntax? Or maybe something in front of the backticks that always renders as invisible, like maybe some kind of XML like <r>?
Very cool! I'm working on something similar but a little more wysiwyg and collaborative (think gdocs meets gsheets rather than word meets excel). Let me know if you want to chat - email in profile
It's interesting that the literal programming mentioned in the description and in the comments is old, but it basically suggests making a text primarily intended for computers more human. What is new here imho is that the idea of extending markdown with programming features is doing the reverse. So, if you have some texts made for humans why not make it more algorithmic in nature. I think this idea might be more influential if we find more cases when it could shine.
As a developer and a writer,my suggestions are:
1.Support export rendered page to other format,e.g. html,pdf,png,svg 2.The above suggestion is about how to sharing with others.So it's good to procide a way to spread,e.g. every documents made can be viewed from a special url,if you want to make this be a platform. 3.Code blocks hightlighting.Suppose someone want to use teno like juptybook to share their research or other things,code highlight is the key for reading experience.
You might be interested in the Handlebars integration[0] Microsoft recently added to their SemanticKernel AI SDK.
It's not identical to what you're doing, but there's considerable overlap and possibly some food for thought.
[0]https://medium.com/@shijotck/automating-tasks-with-semantic-...
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)
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
::
Can't work out if I like this or not.
There's something cool here, but I find the custom DSL very counter-intuitive. I'd much rather just type actual TypeScript or even Python than a half-way house.
So I guess while it's cool I think I'd rather just use full Jupyter (especially now it supports Deno)
Still an interesting project & thanks for sharing
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.
I think this would be great as an evolution of MDX (https://mdxjs.com/). MDX is already pretty popular for documentation and it plays well with React but unfortunately there is no framework that adds interactivity to MDX which will enable use cases like data applications.
Neat, you might also look at https://speedrun.cc for ideas. It's a slightly different space, it's markdown to wrap tools with UI's instead of to plot things, but the way I enable you to prompt the user and run little bits of javascript might be of interest to you.
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.
Very cool. I've always thought there's a lot of untapped potential in literate programming [0].
There are lots of reports and documents that should be this instead of static Word files.
First of all, I love this concept!
The editable fields within a markdown explainer is really intuitive.
What I'd personally like to see is a better data exploration tab or similar - basically some place that makes it easier to view the cells in use in the doc, and edit them. basically a spreadsheet tab ;)
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.
WHOA! this is awesome! love this so much, you definitely have me as a user for life.
I'd love to give it a try but in mobile it's unusable in portrait (default) phone orientation.
It would be great if it switched to top-bottom instead of left-right layout under certain width and/or aspect ratio.
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.
This reminds me of Clerk, but I believe it's a tad more powerful: https://clerk.vision
I wonder whether something similar could be achieved with NuxtJs. It has something similar, where it allows you to refer to vuejs components from markdown and parametrize them.
It's pretty convinent
This seems really cool although I’m not sure that I would call that a cell
Reminds me of my own `majsdown`: https://github.com/vittorioromeo/majsdown
Cool stuff!
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.
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.
You might want to add a horizontal split mode and use that by default depending on the resolution of the device (phones/tablets)
Nice! What about integrations with Google sheets?
I've done this with org-mode. Most recently to tally miniature golf scores for me and my wife.
Absolutely brilliant. Bookmarked.
Interesting effort.. I'd just spin up a Jupyter Notebook instance, but hey.
The company security team at my workplace is blocking tenno.app as grayware :D
Nice idea, could be a lightweight enough way to create some visualizations
cool! When did you came up with this and how long you’ve worked at it?
The lotus will be pleased.
Sorry, but Excel is so great and the most loved software in the world because every user intuitively understands that the cells can be edited "right where they are". The markdown abstraction is nice, and probably has many usecases, but it's just not a hybrid of Word and Excel because it introduces an abstract language to describe cells and words.
(Anyway, great project engineering-wise!)
If you hate spreadsheets this could be your way out of it...
Can this run locally?
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.
This is fantastic.
Ah, like a reduced version of Org-Mode.
interesting idea. try to understand the dsl for the chart but the doc is not very detailed
Org mode in JS?
I love the idea of finding new and better interfaces for spreadsheets, and I applaud this effort!
That being said, if you want this to be useful for people in general, not just programmers:
- People like WYSIWIG. Markdown and the split-pane view seems to be something only programmers like. So I'd suggest being able to do everything, or mostly everything, directly in the rendered/HTML panel. (Maybe the Markdown panel is for power users only)
- This is great for working with individual calculations, but a lot (most?) of spreadsheet use is about applying formulas to whole rows, columns, and tables of values. I see you support basic tables, but they're a huge pain to encode/format/edit in Markdown, and I don't see any ability to support things like 200 rows x 5 columns and do things like calculate sums and averages
So I think there's a ton of potential here! But I think WYSIWIG and easy tabular data support are going to be key here for broader usage. While the kinds of programmers this seems aimed at now, are already using Jupyter notebooks and Matplotlib for this kind of thing. (Like, when you describe "why did I build this", I don't understand why you didn't just fire up a Google Colab notebook.)