HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
gzuidhof
starboard-notebook
TypeScript2020–2025
gzuidhof / starboard-notebook

starboard-notebook

In-browser literate notebooks

7Distinct people
16Mentions
0Explicit recommenders
1.4KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

In-browser literate notebooks

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year16 dated mentions

Observed mentions: 2020-08-02 14:48:32 UTC to 2025-07-20 07:11:53 UTC.

02462020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC505
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC707
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC303
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC000
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC000
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101

What Hacker News says

16 sources
The format is only partially invented, it follows Jupytext [0], but adds support for cell metadata. There is no obvious way to get that in fenced codeblocks, especially with the ability to spread it over multiple lines so it plays well with version control. One more consideration is that it's not "Markdown with code blocks interspersed", one might as well use plaintext or AsciiDoc. Of course there are tradeoffs.. I wish I had more time to work on it. [0]: https://github.com/gzuidhof/starboard-notebook/blob/master/d... [1]: https://github.com/mwouts/jupytext
In JupyterLite: a JupyterLab distribution that runs in the browser
You could consider an in browser notebook to get your cost down to near nothing - it depends a bit on what kind of tasks your students do whether they fit in the browser (one wouldn't train a large neural network in one for instance) There's Starboard (which I'm building, it's built specifically for the browser and can integrate into a larger app deeply) and JupyterLite (the closest you will get to JupyterLab in the browser), either can be a good choice depending on your requirements. Both use Pyodide for the Python runtime. [1]: https://github.com/gzuidhof/starboard-notebook, demo: https://starboard.gg [2]: https://jupyterlite.readthedocs.io/en/latest/
In Voila – From notebooks to standalone web applications and dashboards
As someone building an in-browser notebook I have a lot of opinions on notebook environments. Notebooks serve different purposes, sometimes the notebook itself is the end-goal because the author is creating an interactive tutorial or explaining a complex concept with a bunch of visualizations. Observable is a fantastic tool for that, and the kind-of-Javascript reactive programming system it is built on is a great fit for that. Outside of that use-case, I think notebooks are great for the first 20% of the effort that gets 80% of the work done. If it turns out one also needs to do the other 80% of the effort to get the last 20%, it is time to "graduate" away from a notebook. For instance if I am participating in a Kaggle machine learning competition I may train my first models in a Jupyter notebook for quick iteration on ideas, but when I s
Read the rest
ettle onto a more rigid pipeline and infra, I will move to plain Python files that I can test and collaborate on. This "graduation" from notebook to the "production/serious" environment should be straightforward, which means there shouldn't be too much magic in the notebook without me opting into it. Documentation in my eyes is not so different, I should be able to copy the examples easily into my JS project without knowing specifics of Observable and adapt it to my problem. Saying "don't be lazy and just learn Observable", or "you must learn D3 itself properly to be able to use it anyway" is not helpful. Observable being a closed, walled garden doesn't help: not being able to author notebooks without using their closed source editor is a liability that I can totally understand makes it a non-starter for some companies and individuals. I think it's ok to plug my own project: It's called Starboard [1] and is truly open source [2]. It's built on different principles: it's hackable, extendable, embeddable, shareable, and easy to check into git (i.e. I try to take what makes the web so great and put that in a notebook environment). You write vanilla JS/ES/Python/HTML/CSS, but you can also import your own more advanced cell types. Here's an example which actually introduces an Observable cell type [3] which is built upon the Observable runtime (which is open source) and an unofficial compiler package [4]. I would be happy for the D3 examples to be expressed in these really-close-to-vanilla JS notebooks, but I doubt I can convince the maintainers to do so. [1]: https://starboard.gg [2]: https://github.com/gzuidhof/starboard-notebook [3]: https://starboard.gg/gz/open-source-observablehq-nfwK2VA [4]: https://github.com/asg017/unofficial-observablehq-compiler
In I want to learn D3. I don’t want to learn Observable. Is that ok?
Very cool, I'm building something similar (with a larger scope) [0] (it also has one-file exports, but it does load stuff from a CDN so it's not as contained to a single file as this project is.) If you're looking for next steps: You can actually run user code using `import`, which will allow your users to import code from external websites using familiar `import {x} from "https://some-url.com/bla.js"` syntax at the top of cells. Here's how: const exportsInCell = await import(URL.createObjectURL(new Blob([USER_CODE], { type: "text/javascript" }))); And with some transpilation you can support top-level await in eval [1]. Just some pointers! [0]: https://starboard.gg & https://github.com/gzuidhof/starboard-notebook [1]: https://github.com/gzuidhof/starboard-notebook/blob/master/s...
In Show HN: A simple JavaScript notebook in one file
If you want to play with Pyodide in a web notebook you can try Starboard [1][2]. A sibling comment introduces JupyterLite and Brython, which are Jupyter-but-in-the-browser, whereas with Starboard I'm trying to create what Jupyter would have been if it were designed for the browser first. As it's all static and in-browser, you can embed a notebook (or multiple) in a blog post, for instance to power interactive examples. The bundle size is a lot smaller than JupyerLite for the initial load - it's more geared towards fitting into existing websites than being a complete IDE like JupyterLab. [1] https://github.com/gzuidhof/starboard-notebook [2] https://starboard.gg
In Pyodide: Python for the Browser
You can give Starboard Notebook [0] a shot (a tool I'm building). It doesn't have reactivity which is as powerful as Observable - it's closer to normal web programming. Here's an example notebook that shows p5.js use (with Python interop as a bonus): https://starboard.gg/nb/n3DYopT It supports local or self-hosted editing and viewing [1] and is all open source. [0]: https://starboard.gg [1]: https://github.com/gzuidhof/starboard-notebook and https://github.com/gzuidhof/starboard-cli
In Observable and Creative Coding
I agree that Observable is fantastic, but also wish it was more open. I'm building something similar called Starboard Notebook[0] that has a different set of trade-offs. It ends up being something in between Jupyter and Observable: * One of the goals is to build Jupyter how it would have been if it was designed for the web (only). * It's open source [1], plays nice with git (the format is plaintext), and supports local viewing & editing [2] * Because of that you can host it yourself, put it on your blog / github pages, anywhere. * There is little magic, it actually is just Javascript at it's base. This means you can use standard browser APIs and HTML, and when you are ready to "graduate" the notebook implementation that should be straightforward. In my eyes notebooks are only for the first 20% of the work that does 80% of the job for smal
Read the rest
l applications/experimentation (which is often where it ends anyway). * You can "build the ship as you sail": you can load new cell types dynamically at runtime. This is also how Python is supported (through WebAssembly). * You can have interop with Python and Javascript which is really powerful. Example: Create a drag an drop form using HTML+JS, then process the dropped CSV file using Pandas and visualize using matplotlib. [0]: https://starboard.gg [1]: https://github.com/gzuidhof/starboard-notebook [2]: https://github.com/gzuidhof/starboard-cli
In Why We're Building Observable
I've had a look and wasn't able to get it to work yet, imports can be bit iffy: usually anything that exposes ES modules or puts variables on the window object work fine. It looks like the reason it doesn't work here is because it relies on "this" being the window object. To make top-level await possible your code gets wrapped into a function, and in there "this" no longer points to the window. I am sure a workaround is possible, I'll make a ticket on github. https://github.com/gzuidhof/starboard-notebook/issues/1
In Show HN: Starboard – Fully in-browser literate notebooks like Jupyter Notebook
but, but... how? I feel like I must be missing something here; you want to aggregate your syslog data; you have a bunch of files and a web browser. Now what? You beat your keyboard against the monitor while your browser sandbox steadfastly refuses to load your local file system files? [1] You write your own server that serves data and the open source core? [2] Yay, you now have the dubious honour of having re-invented jupyter notebooks, only, you had to roll it yourself, and it's insecure and really not very good compared to an existing mature product. What can you actually do with this, that you can't do by right clicking on your browser window and picking 'inspect', and then clicking on 'console'? You can certainly make interactive blog posts; absolutely, I 100% acknowledge that as a blog plugin, when you have already got a server to ho
Read the rest
st your content, this would be pretty awesome. If you do want to run your own databricks / notebook SAS, then I also see it as being a really great kickstart for you, absolutely. However, out of the box? I'm... like, I think this is interesting, but I don't see how I could actually use it. [1] - https://stackoverflow.com/questions/50007055/fetch-request-t... [2] - https://github.com/gzuidhof/starboard-notebook
In Show HN: Starboard – Fully in-browser literate notebooks like Jupyter Notebook

Showing the 15 most recent of 16 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.