If you haven't used them in awhile, Visual Studio Code notebooks (which leverage Jupyter) are now at a level that they're better than Jupyter/JupyterLab for Python Data Science. It now integrates more closely with themes/settings, and has many additional features such as native debugging, native diffing for Git, Intellisense/autocomplete, and in general the UI/UX is faster.
That said, a desktop JupyterLab is still very valuable as it increases accessibility dramatically, but it's no longer the only player in the space.
I use all three of JupyterLab, Jupyter Notebooks and VS Code Notebooks.
What I love about VS Code Notebooks - it's almost zero context switching to jump from the the code you are working on to a REPL and back.
What I don't love about VS Code Notebooks (and why I still spend a lot of time in JupyterLab) - the context gets confused as to what cell you are in frequently - so your Ctrl-Enter keys don't work, and you have to manually run each cell one at a time.
~Removed comment about graphs not being inline~ - I stand corrected. Just checked an the latest version does let you show your graphs inline. And they look awesome.
I use VS Code notebooks a lot, I like the workflow so much that I made an extension for Go called gobook using the API. I bind everything notebook related to shift+alt, so shift+alt+enter to run cell, shift+alt+r to run all etc. I'm learning Rust and working on a VS Code notebook for it now.
A notebook for Rust? How does that work? I thought notebooks can only be used for interpreted language and not for compiled ones...