12 ms·
Zasper: A Modern and Efficient Alternative to JupyterLab, Built in Go
- pjmlp 2y agoWhile it looks like a great effort was put into this, an alternative has to support the same platforms, languages and related tooling, not run only on macOS, partial support on Linux, and IPython. Then all the performance improvements by using Go, are taken away by using Electron.
- benatkin 2y agoFor a fully fledged web app that all the major code notebooks tend to be, Electron makes a lot of sense. The bundled webviews built into OSes tend to be weak and outdated compared to the Chromium build that comes with Electron. It's why Jupyter fits pretty well into VSCode/VSCodium. > 5. Rendering your app > Electron uses Chromium under the hood so your user sees the same on Windows, Linux and macOS. Tauri on the other hand uses the system webview: Edge Webview2 (Chromium) on Windows, WebKitGTK on Linux and WebKit on macOS. Now here comes the bad part, if you are a web developer you know that Safari (Based on WebKit) is always behind a step from every web browser. Just check out Can I Use. There is always a bug that you are not seeing from Chrome, only your dear Safari users. The same issues exists in Tauri, and you can't do anything against it, you have include polyfills. The winner has to be Electron here. https://www.levminer.com/blog/tauri-vs-electron https://www.levminer.com/blog/tauri-vs-electron
- est 2y agoThen why can't Chrome/Edge provide a up-to-date library for everyone like mshtml.dll?
- pjmlp 2y agoThat is what Edge Webview2 is, https://developer.microsoft.com/en-gb/microsoft-edge/webview2/?cs=578062562&form=MA13LH https://developer.microsoft.com/en-gb/microsoft-edge/webview... https://learn.microsoft.com/en-us/microsoft-edge/webview2/ https://learn.microsoft.com/en-us/microsoft-edge/webview2/
- benatkin 2y agoMaybe the situation only sucks on OS X. On Linux you could hopefully swap it out with a new one on build, and it isn't based on WebKit which is slow to support lots of stuff. Either way, I think perhaps Tauri should provide a way to optionally use its own build of the rendering engine and a preset/example configuration that uses the included one for the platforms that are up to date and its own build of a rendering engine for OS X and possibly Linux.
- pjmlp 2y agoWell, there we have the whole issue that Web has literally become ChromeOS for all practical purposes of who is driving it, and browser market share. It is called Webview2, because the first MSHTML.dll replacement was based on the original updated Edge engine, which Microsoft dropped for their own Chrome fork. So either one cares to use portable Web development practices, or whatever Chrome does, with the side effect to increase its market share even further.
- Flux159 2y agoThis looks pretty nice - this is specifically replacing the JupyterLab frontend and keeping the connections to Jupyter kernels - there shouldn't be any theoretical reason that it couldn't support Javascript or other language kernels, although I guess the project has only been tested with IPython kernels. Would be interested to see where this goes.
- oivey 2y agoWhat’s the advantage of this? It isn’t obvious to me that reducing memory usage and CPU of an empty/idle kernel is all that meaningful if the actual Python code in your notebook uses far more resources. It’s also not obvious to me how Go’s better threading helps, either, if all the computational bits are in Python anyway.
- energy123 2y agoI have one nit with JupyterLab. When I press Ctrl+F, it takes ~0.4 seconds for the search box to open, and sometimes the first keystroke doesn't register when I type something into that search box. "Zasper ... provides ... exceptional speed". If they can just make input latency indistinguishable from vim, that's a very worthwhile value add.
- lf-non 2y agoIt is quite beneficial for people who aren't writing python. And for them managing jupyterlab installations is a bit of pain. I would like to use this with xeus kernel for sql (which is also native) and if this reduces the resource consumption of that setup significantly, its a big plus for me.
- oivey 2y agoThe README says the savings is ~75 MB. In most notebook workflows you’re at most running a couple at once. Saving <1% of my system memory doesn’t let me do anything I couldn’t do before. This also isn’t going to add concurrency/parallelism to your SQL unless xeus has some special magic that this is somehow able to exploit.
- lf-non 2y agoI was primarily talking in the context of shared server deployments for teams
- BiteCode_dev 2y agouvx --from jupyter helps with that significantly.
- DandyDev 2y agoHonest question: what is not modern about JupyterLab? I know JupyterLab has existed for a long time, but continuous development has kept it modern.
- Galanwe 2y agoMy take: - The UI is over bloated and bugged, sometimes things scroll, sometimes they don't, sometimes you have to refresh the page. You cannot easily change the UI as lots of CSS parts have hard coded fixed sizes. - The settings are all over the place, from py files in ~/.jupyter to ini files to auto generated command line parameters. - The overall architecture is monolithic and hard to break down, jupyter proxy is a good example of the hacks you have to go to to reuse parts of jupyter - The front end technology (Lumino) is ad hoc and cannot be reused, I had to write my own react components basically reimplementing the whole protocol, come on its 2025. - The whole automation around nbconvert is error prone and fragile
- agoose77 2y agoThis is mixing quite a few different things (backend, frontend, auxiliary CLI utilities). No time to write a lengthy reply here, but I think it's worth separating legitimate like-for-like comparison with a wider feeling on the ecosystem.
- dist-epoch 2y agoThe need to start the server is really annoying. Especially when you have notebooks in multiple places, or multiple virtual envs. This is why I moved to working with Jupyter notebooks in VS Code, there is no server to manually start.
- pletnes 2y agoVscode will start the server for you, in practice. This is great if you just want to get going. It gives you a bit less flexibility though, if you want to do something fancy. Vscode can also connect to existing servers. This can be very useful. For instance, you can put a ton of data and CPU in a server and work with vscode on a small laptop. If network latency is low enough, this works great.
- low_tech_punk 2y agoI wish the author considered https://wails.io/ https://wails.io/ for UI. Why all the effort with Go and ended up with Electron?
- RossBencina 2y agoHonest question: what's the advantage of this over the Jupyter notebook support in VSCode? (which I use daily)
- bandrami 2y agoOr for that matter Emacs
- v3ss0n 2y agoWhat's the point of this? Only benefit seems to be decoupling frontend in react. Nobody complaints about Jupyter performance. You can just build frontend and keep Jupyter as it is, it is already concurrent enough for multiple users use cases.
- dizhn 2y agoInstall instructions seem incomplete.
- prasunanand 2y agoI am the author of Zasper. The unique feature of Zasper is that the Jupyter kernel handling is built with Go coroutines and is far superior to how it's done by JupyterLab in Python. Zasper uses one fourth of RAM and one fourth of CPU used by Jupterlab. While Jupyterlab uses around 104.8 MB of RAM and 0.8 CPUs, Zasper uses 26.7 MB of RAM and 0.2 CPUs. Other features like Search are slow because they are not refined. I am building it alone fulltime and this is just the first draft. Improvements will come for sure in the near future. I hope you liked the first draft.
- carreau 2y agoIPython maintainer and Jupyter dev (even if I barely touch frontend stuff these days). Happy to see diversity, keep up the good work and happy new year. Feel free to open issues upstream if you find lack of documentation or issue with protocol. You can also try to reach to jupyter media strategy team, maybe they'll be open to have a blog post about this on blog.jupyter.org
- prasunanand 2y agoThanks @carreau. I think the documentation is amazing! Zasper is built on the great work and documentation from Jupyter team. I will reach out to Jupyter media strategy team.
- BiteCode_dev 2y agoThat's stellar sportmanship right there. Not that jupyter's team needed even more respect from the community but damn.
- carreau 2y agoI think that's fairly normal, having alternative frontends can only be beneficial to the community. I know it also look like there is a single Jupyter team, but the project is quite large, there are a lot of constraints and disagreements internally and there is not way to accomodate all users in the default jupyter install. Alternative are always welcome ; at least if they don't fragment the ecosystem by being not backward compatible with the default. Also to be fair I'm also one of the Jupyter dev that agree with many points of OP, and would have pulled it into a different direction; but regardldess I will still support people wanting to go in a different direction than mine.
- waseemmalik 2y ago[flagged]
- v3ss0n 2y agoWhat are you suppose to mean?
- lutusp 2y ago> ... A Modern and Efficient Alternative to JupyterLab ... This is not meant as criticism, just perspective. It's a classic development sequence: * A team creates a powerful, small-footprint, REPL environment. * Over time people ask for more features and languages. * The developers agree to all such requests. * The environment inevitably becomes more difficult to install and maintain. * A new development team offers a smaller, more efficient REPL environment. * Over time ... wash, rinse, repeat. This BTW is what happened to Sage, which grew over time and was eventually replaced by IPython, then Jupyter, then JupyterLab. Sage is now an installable JupyterLab kernel, as is Go, among many other languages, in an environment that's increasingly difficult to install and maintain. Hey -- just saying. Zasper might be clearly better and replace everything, in a process that mimics biological evolution. Can't leave without an XKCD reference: https://xkcd.com/927/ https://xkcd.com/927/ Again, not meant as criticism -- not at all.
- RossBencina 2y ago> JupyterLab kernel There is no such thing. There are Jupyter kernels. JupyterLab is just one of many UIs that speak the Jupyter protocol. Other examples include the original Jupyter notebook editor, VSCode Jupyter extension, and now Zasper. I'm pretty sure Sage was always intended as a project that integrates the world, never "small footprint".
- lutusp 2y ago>> JupyterLab kernel > There is no such thing. A Web search reveals that the alternate term "Jupyter kernel," appears equally often. The terms are interchangeable. > I'm pretty sure Sage was always intended as a project that integrates the world, never "small footprint". A large install became true eventually, but it began as a small Python-based install, about 120 KB. Then people asked for extensions, and William Stein said "Yes".
- williamstein 2y agoNo.
- tylerhillery 2y agoHow does this compare to Marimo?
- jampekka 2y agoDoesn't seem to fix the invisible state problem that Marimo fixes.
- set92 2y agoFrom my POV is not fixing, is another way of work. I don't like what Marimo does, because for that I have scripts. If I'm loading files from S3, I'm being charge for it. If Marimo re-executes this cell to maintain the state, it will charge me double. I don't need that. I'm able to organize my code, and know how it is being run.
- jampekka 2y agoI use mostly the script workflow, but for exploration Marimo is more convenient. It got also to-disk memoization recently. Kinda best of both worlds for exploration (although I'm not a huge fan of editing code in browser). In comparison to the JupyterLab hidden state spaghetti it's a fix. With proper structuring of the blocks, Marimo will not re-execute the cell. Also memoization in script based workflows is still somewhat clunky on Python even with something like Snakemake. I do find Marimo's approach, "global" variables tracked between blocks, less than ideal, but it's the best out there.
- amoss 2y agohttps://docs.marimo.io/guides/expensive_notebooks/ https://docs.marimo.io/guides/expensive_notebooks/
- _l7dh 2y agoIt's probably an unrelated post (apologies in advance) but I wanted to shoutout to the Marimo (https://marimo.io https://marimo.io), it's the only Jupyter alternative that really got me excited, it's like Streamlit and Jupyter had a kid (and the kid took the best genes from both).
- CraigJPerry 2y ago>> marimo notebooks are pure Python and stored as .py files That sounds like a solid improvement. I’m going to give this a test drive. I feel like modularity is one of the hardest aspects of Jupyter notebooks in a team environment. I’d be interested to hear if anyone has cracked a workflow with notebooks for larger teams. Notebooks are easy for solo or very small teams, and the literate programming style benefits still apply in larger teams but there’s a lot of friction: “hey just %run this shared notebook with a bunch of useful utilities in it - oops yeah it tries to write some files because of some stuff unrelated to your use case in there (that’s essential to my use case)” My current best that I know of is to keep “calculation” (pure) code in a .py and just the “action“ (side-effectful) code in the notebook. Then as far as physically possible, keep the data outside of notebook (usually a database or csv’s). That helps avoid the main time sink pitfalls (resolving git conflicts, versioning, testing etc) but it doesn’t solve for example tooling you might want to run - maybe mypy against that action code - sure you can use nbqa but… interested to learn better approaches.
- szvsw 2y agoI actually think the problem you are describing is actually sometimes helpful from a design perspective, if you can be conscientious enough to periodically review your notebooks and figure out what is the actual useful code which should be properly integrated into the codebase vs what is the “one-off” / non-modular code. Like you mentioned, calculation vs side-effects is one way to help you decide but not the only. There’s definitely no single answer. The key is to just periodically figure out what ought to be refactored into library code, which notebooks should just be straight up deleted (hopefully as many as possible - you can always get them back in your git history if needed!), and so on.
- 2y ago
- cess11 2y agoHow's the maturity compared to Livebook? https://livebook.dev/ https://livebook.dev/
- starlite-5008 2y ago[dead]
- 1121redblackgo 2y agoGood looking project I will check this out for sure
- gdevenyi 2y agoCan I disconnect and reconnect from a running frontend (close and reopen a tab) and not lose any output?
- barrettondricka 2y agoThat demo gif is horrible. You are not showcasing anything, but looping low resolution screenshots with special effects.
- JZL003 2y agoI'll look later if this is allowed but I would love love an rstudio like interface in Jupyter. Being able to control enter to run a block of code (not line) in the accompanying repl is huge for iterating and building new things As an example I love jupyterlab's "open console for notebook" but can't find a way of sending copied text to it, or switching focus with a keyboard shortcut It's a big reason I can't do vscode Jupiters implementation