Show HN: A modern Jupyter client for macOS (satyrn.app)
It starts up really fast (faster time-to-execution than VS Code or JupyterLab), you can launch notebooks right from the Finder, and the design is super minimalist. It's got an OpenAI integration (use your own API key) for multi-cell generation with your notebook as context (I'll add other LLMs soon). And many more useful features like a virtual environment management UI, Black code formatting, and easy image/table copy buttons.
Full disclosure: it's built with Electron. I originally wrote it in Swift but couldn't get the editor experience to where I wanted it. Now it supports autocomplete, multi-cursor editing, and moving the cursor between cells just like you'd expect from JupyterLab or VS Code.
Satyrn sits on top of the jupyter-server, so it works with all your existing python kernels, Jupyter configuration, and ipynb files. It only works with local files at the moment, but I'm planning to extend it to support remote servers as well.
I'm an indie developer, and I will try to monetize at some point, but it's free while in alpha. If you're interested, please try it out!
I'd love your feedback in the comments, or you can contact me at jack-at-satyrn-dot-app.
191 comments
[ 6.1 ms ] story [ 239 ms ] threadI'm not sure if the post text above is visible (I can't see it on my phone's HN reader) so I'm going to repost it here as a comment too:
I love Jupyter – it's how I learned to code back when I was working as a scientist. But I was always frustrated that there wasn't a simple and elegant app that I could use with my Mac. I made do by wrapping JupyterLab in a chrome app, and then more recently switching to VS Code to make use of Copilot. I've always craved a more focused and lighter-weight experience when working in a notebook. That's why I created Satyrn. It starts up really fast (faster time-to-execution than VS Code or JupyterLab), you can launch notebooks right from the Finder, and the design is super minimalist. It's got an OpenAI integration (use your own API key) for multi-cell generation with your notebook as context (I'll add other LLMs soon). And many more useful features like a virtual environment management UI, Black code formatting, and easy image/table copy buttons.
Full disclosure: it's built with Electron. I originally wrote it in Swift but couldn't get the editor experience to where I wanted it. Now it supports autocomplete, multi-cursor editing, and moving the cursor between cells just like you'd expect from JupyterLab or VS Code.
Satyrn sits on top of the jupyter-server, so it works with all your existing python kernels, Jupyter configuration, and ipynb files. It only works with local files at the moment, but I'm planning to extend it to support remote servers as well.
I'm an indie developer, and I will try to monetize at some point, but it's free while in alpha. If you're interested, please try it out!
I'd love your feedback in the comments, or you can contact me at jack-at-satyrn-dot-app.
Surprised to hear you started with a native UI and pivoted to electron. What was the major blocker there?
I recently got frustrated with OpenSCAD and decided to try CadQuery and Build123d. The modeling backend is a big step forward, but the GUI is not nearly as good as OpenSCAD. I managed to get it working via VSCode with a plugin, but I’m dreaming of embedding everything in a dedicated MacOS app so I can jump into CAD work without hacking through dev setup.
I decided to play around with Typescript and Electron over a weekend and ended up getting a really solid prototype so I made the heart wrenching decision to move over.
I'm messing around with writing my own text editor component in Swift now, but it's quite a big endeavour to get the standard expected for a production ready product.
I'm assuming a pure-swift CAD UI would be equally difficult. Would be really cool to see that tho.
At this point I'd start with Tauri first and only switch to Electron only if I really need something only Chrome supports or if I need to support Linux. I guess the webview story there is not so good.
> The user interface in Tauri apps currently leverages tao as a window handling library on macOS, Windows, Linux, Android and iOS. To render your application, Tauri uses WRY, a library which provides a unified interface to the system webview, leveraging WKWebView on macOS & iOS, WebView2 on Windows, WebKitGTK on Linux and Android System WebView on Android. ... Tauri GitHub action: https://tauri.app/v1/guides/building/cross-platform/#tauri-g...
WebView: https://en.wikipedia.org/wiki/WebView
CEF: Chromium Embedded Framework > External Projects: https://github.com/chromiumembedded/cef#external-projects : cefglue, cefpython,: https://github.com/cztomczak/cefpython
(edit)
tauri-apps/wry > Bundle Chromium Renderer; Chromium WebView like WebView2 (Edge (Chromium)) https://github.com/tauri-apps/wry/issues/1064#issuecomment-2...
I was scared about doing it this way, but it worked out for me: https://videohubapp.com/ for pay-what-you-want-$5-minimum for my app, and https://github.com/whyboris/Video-Hub-App git-clone-and-build for the code. I currently sell about 60 copies per month (same average across the last 4 years too).
> I currently sell about 60 copies per month (same average across the last 4 years too).
I'm guessing the median is $5, can you share what the average is?
From my dashboard right now: Sales - All time $27,732.69
Would you be willing to share the OS breakdown? I'm primarily interested in macOS and am wondering roughly what % of your sales are for that platform?
https://github.com/nteract/hydrogen
Excited to play around with this!
But...a really good code editor is a good example of something that's extremely hard to implement using native text controls, but there are great ones based on web tech.
I wonder if embedding system WebKit on macOS or using something like NeutralinoJS would be a good alternative?
The pro is your app is much smaller and lighter.
The con is that any bugs in your system web control are out of your control, and certain tight integration with web APIs might not be possible.
> Full disclosure: it's built with Electron. I originally wrote it in Swift but couldn't get the editor experience to where I wanted it. Now it supports autocomplete, multi-cursor editing, and moving the cursor between cells just like you'd expect from JupyterLab or VS Code.
Consider taking this as evidence that Electron isn't bad, instead of evidence that you shouldn't use this program.
Good luck to you though, I do think the demographics of scientists who find VSCode confusing is actually sizeable.
I feel I did not understand the main advantages of this notebook aside from the AI integration. I don't understand how "start-up" time is a cost; I have a Jupyter server running at all times and use it as a scratch-pad throughout the day, so it is always available.
I don't understand the "modern command palette". As far as I can tell all the commands are available to regular Jupyter Labs, and either way I always use hotkeys for them.
The code formatting using black isn't bad, but notebooks are for scratchy ideas, not real code. If I'm at the point of formatting code, it's going in an actual IDE. I'd even argue providing formatting inside of a notebook encourages bad habits for scientists, who prefer to stay entirely within a notebook, but are then sometimes unable to reproduce their results.
I don't see the advantage of the copy-paste; I can copy paste directly from Labs to Slack/online editing pages, and certain Latex typesetters.
Pros: it looks pretty, the site has nice demo videos (in terms of quality; I didn't understand the content).
I want to like this but I don't see any benefits for a power user except for the AI integration; if AI is the only selling point then I prefer to get it differently.
If you'd be happy to share: I'm curious to know what scientific field you work in? Do you do 100% computational work, or is it a mixture of experimental and computational?
- I don't have a continuously running notebook server. I start it when I need to and shut it down if I won't be working with it for a while. I do like the idea of clicking an icon and starting an app.
- Modern command palette, I believe, is similar to what you would see in apps like VS code. It doesn't offer more commands but instead make it easier to find and execute commands. I don't use Jupyter Lab so I don't know if it has a command palette but Jupyter Notebook doesn't so that seems like an advantage to me.
- I disagree on the formatting point, too. Even if I am just doing something very quick I cannot stand seeing lines extending some length, no space after a colon, single vs double quote inconsistency etc. So I do spend time formatting them even if I am on IDLE and know for sure I am not going to save it. Thankfully, IPython added support for Black so it is less of an issue for me.
Apps in this area generally focused on extending Jupyter to maybe combine SQL/JS with Python, making data exploration easier but I do appreciate a light app that just gives me a notebook experience with some small advantages, especially considering Classic Notebook is going to go away soon. I'll definitely give it a try.
- Re: continuously running a notebook server, how about an alias in your ~/.*rc file that just launches a new JLab? Personally I don't find the startup time so high, so it doesn't seem to me 'startup time' is the strongest lead to sell the product. (Of course, if most people find that the startup of a notebook is indeed a large cost then it's a fine point to make. )
- Re: command palette, gotcha. As you say, classic notebooks are going away (and I haven't touched one in a while).
- Re: formatting, I take it back. You're right, there's been plenty of times I've wanted to have nicer formatting in a notebook/lab, that's nice.
But TBH Quarto is much better in this regard; you can use a VScode together with another IDE if you wish to format/edit/run chunks of code in the same file.
You're right about this. I don't love my setup (and have not put enough effort into optimizing it -- hence my reticence at learning Yet Another Tool), but the main reason I use notebooks is for objects that persist in memory. I can load up some huge dataset, keep it open, and jump back to it whenever I want over the next day/week/month without having to "reload" it (fetch data from some server and do processing).
I'd love a robust Jupyter-in-Sublime experience, where I have all the editing/hotkeys of Sublime along with this persistence of objects.
Quarto looks cool, might check that out. If there's any specific part of it you think is awesome, please do point it out. Thanks.
I found it quite painful to point it to a couple of environments I have, and confusing how i get it pointing to my gpt4 api keys. Once I did these two I was not sure how to prompt rather than typing a command.
Good luck with this, don't mean this in a critical way, just trying to give some feedback of what I think when I first try it.
At the moment you press `g` (for generate) while in command-mode to create a "prompt cell". I'll think of ways to make this more obvious.
Appreciate you spending the time to try it out and share your feedback.
Thought it was totally clear.
It looks like and acts like it was built for Sonoma, not for Sierra.
As an IPython/Jupyter user for over a decade and Mac user for two decades, it’s not something I personally care about or an issue I’ve felt.
And the Jupyter notebook interface certainly isn't aesthetically pleasing. Colab is not as bad, but it's still not nice.
But some people do care about aesthetics, and this interface is actually aesthetically pleasing.
I'd suggest 2 things to help: 1. Try `pyenv` for python version management 2. See this tutorial for how to create a virtual environment and add it as a Jupyter kernel: https://selvamsubbiah.com/run-jupyter-notebook-in-a-virtual-...
Satyrn makes it easier to add virtual environments as a kernel, but you still will need to create the virtual environment and install torch there yourself.
That's a really great point you made about how confusing it is to pip install stuff with `!pip` when working in the notebook. Right now Satyrn does not support the `!` commands, but I will add this soon and try to make it so `!pip` works with the expected virtual environment you are working with.
Nowadays, before I try anything new, I mentally reserve one or two days for the inevitable problems with configuring, compiling and installing. Also, it happens regularly that the cost of trying something turns out to be too high, and I just move on to the next thing.
Of course, sometimes stuff works out of the box, but that is only in a small fraction of cases.
It is sad that it has come to this, and it makes me wonder how we'll cope in a future when software has even more layers of complexity.
This looks like a programming language built on top of Python.
Satyrn only supports the Python programming language right now.
If you are using this on the regular, I'm curious if you have tried Julia or Mathematica, if so why do you use Sagemath over those alternatives?
It unifies multiple existing open source math libraries and packages. It integrates with Octave, Scilab, Maxima, etc. It also integrates well with LaTeX... you can take results, format them as TeX and also render them.
Its objective is to be a replacement for Maple, Mathematica and MATLAB, which are prohibitively expensive for many people. As such, once it's installed it comes with batteries included and you can easily share workbooks that others can run without falling into a DevOps-like situation.
The DSL that is offers can be more convenient than Python.
There are some interesting quickstart tutorials here https://doc.sagemath.org/html/en/prep/quickstart.html
And it was also discussed earlier on HN here, with many comments that are more informed than anything I could say at this moment: https://news.ycombinator.com/item?id=23511183
I tried JetBrains DataSpell as a desktop frontend for Sage and the results were not good.
Sagemath has pure math stuff. Julia does not. Sagemath can do lots of cool symbolic calculations like rings, quotient rings, algebraic curves, etc. Mathematica has some of this functionality but it's not free.
Would love to see this adopt the document-based app API and the toolbar API.
Meh. Most apps like this are built for the Mac because a lot of programmers use Macs. If anything, Apple makes it difficult to develop for macOS because they keep breaking APIs with each update.
People with Macs have money, and are willing to use it to pay for software.
Not that deep.
Like what
Here are some recent things that required code changes from developers:
- disabling user interaction when trying to request items from the keychain
- views no longer clipping to bounds by default
- installing login items and background services
The latter two were understandable, because they were caused by new features, but some are just caused by a lack of testing.
It's not a big deal, and I'm sure Electron apps have similar issues, but app developers do have to put in some work to make sure their apps keep working properly on macOS.
"Full disclosure: it's built with Electron. I originally wrote it in Swift but couldn't get the editor experience to where I wanted it. Now it supports autocomplete, multi-cursor editing, and moving the cursor between cells just like you'd expect from JupyterLab or VS Code"
It's not a native Mac app, it's a standard electron app.
This elitist and incorrect viewpoint has plagued macs for a very long time. I wish it would die.
https://qtconsole.readthedocs.io/en/stable/
JupyterLab still has its uses, but it's just too heavyweight for the "calculator replacement" role IMO. QtConsole is perfect. Or at least, it is with a bit of additional startup code.
I guess I'm old school and am used to cutting and pasting and running things in my own terminal, so I'm wondering if there are added benefits that I'm not aware of of Jupyter notebooks. It seems to have a very loyal following so I would love to learn their perspective!
Being able to change functions around and generate new graphs (IE; if I want the mean not the median for a contrived example) is really handy.
There is market of professional use of them.
Since then I've moved into software development where I rely on my IDE for any coding that involves working with more than a few modules. And as I got better working with an IDE I did gravitate toward making a script for certain kinds of tasks where I use to reach for a notebook, but there are still many data analysis tasks that I would much prefer a notebook for.
It's also quite nice to share a notebook with someone to show them how you arrived at your conclusions, and it's nice for them to be able to take your analysis and modify it or test their own ideas on top of yours. Obviously the notebooks are not great for collaboration without some fiddling around with git, but they are still very good for this kind of collaboration.
As a consequence of it, it makes easier to write bad code. I care about code quality, but I must admit that sometimes I needed to stop and refactor my jupyter notebooks.
It's a nice tool, but it doesn't replace writing a .py
I've switched virtually all of my work to Jupyter, including some lab automation, but also data analysis, modeling, visualization, and so forth. I use it as an interactive lab notebook that can "do" things.
Of all the tools I've used in 40+ years, my Jupyter notebooks are the best thing I've experienced for being able to go back and understand things I've done, weeks or years later.
When I use other editing software such as word processing, I quickly reach a point where I say to myself: "I wish I could just pop a code cell in here."
As a fairly mature technology, Jupyter has a lot of known quirks and shortcomings (I'm talking about you, out-of-order execution and hidden state), but I'm putting up with them because the benefits are huge.
Some use it because the interface was copied form Mathematica, where it makes much more sense than for Python.
These are the serious users.
There are a lot of non-serious users who have discovered that presenting a mixture of code snippets and text that looks good is enough, certainly for PyCon style talks. These users depend on the tool for their fake careers, so they promote it wherever possible, and the popularity increases even more.
I did some explaining in this comment here: https://news.ycombinator.com/item?id=40899748
Good luck with your project. Let me know if you'd like any tips on the code editor stuff or anything else I can help with.
[0] https://deno.com/blog/v1.37
https://github.com/srcbookdev/srcbook
The interface is sleek, the language server and debugger are built in (so completions, variable renaming, step-by-step debugging etc. all work seamlessly) and it makes Jupyter a pleasure to use.
Is this loading the same webpage whatever JupyterLab is serving or did you write the JavaScript machinery for cell management etc yourself?
If the latter, are interactive plotly graphs or IPython widgets on your radar?