10 ms·
Show HN: Mercury – Convert Jupyter notebooks to web apps
Author here. Mercury is the simplest way to serve your notebooks as web apps.
The simplicity of the framework is very important to us. Mercury has some useful features to make sharing easier:
- you can show or hide your code,
- your users can easily export executed notebook to PDF/HTML,
- there is built-in authentication,
- you can produce files in the notebook and make them downloadable,
- you can share multiple notebooks.
We also care about deployment simplicity. That's why we created a shared hosting service called Mercury Cloud. You can deploy notebook by uploading a file. Below clickable links:
The GitHub repository https://github.com/mljar/mercury https://github.com/mljar/mercury
Documentation https://RunMercury.com/docs/ https://RunMercury.com/docs/
Mercury Cloud https://cloud.runmercury.com https://cloud.runmercury.com
- queens_ridge 3y agoInteresting. I wonder how it compares to Voila. What I like about Voila is that you can use ipywidgets natively and then render Jupyter Notebooks directly to a web-app. Maybe this will be a decent competitor.
- sireat 3y agoMercury certainly seems worthy of keeping an eye out. Voila is the obvious competitor to this. There are also different oranges and apples such as Dash, Streamlit, Panel: https://anaconda.cloud/dashboardlandscape https://anaconda.cloud/dashboardlandscape - obviously Anaconda is a bit biased here. I suppose the biggest limitation to Mercury is the limited number of widgets. Good for quick demos. Also deployment is a bit unclear at the moment - I wonder how easy it is to keep Mercury deployed in a separate Docker container - that is I do not want to keep random ports open on my notebook server. Then again probably deployment/hosting is how Mercury expects to make some money.
- pplonski86 3y agoMercury is for quick demos. It is not a full web framework. The simplicity of the framework is very important for us. We hope to extend widgets offering in the near future. You are right. We are working on Mercury Cloud service where you can just upload notebook to deploy it. We have free and paid plans. But you can also self-host Mercury with docker-compose.
- pplonski86 3y agoMain differences to Voila: - Mercury has no callbacks - we automatically re-execute cells below updated widget, - Mercury has no layout widgets, all input widgets are always in the left sidebar and output content appear in the same order as in notebook. Thanks to above decisions you don't need to rewrite your notebook to fit UI framework paradigms.
- queens_ridge 3y agoThat's great to hear. Voila is easy to use but I've always found difficulty make the UI look clean. Thanks!
- yboris 3y agoQuick link: https://github.com/voila-dashboards/voila https://github.com/voila-dashboards/voila Humbly recommend when you share a product, you include a link to it ;) https://voila.readthedocs.io/en/stable/ https://voila.readthedocs.io/en/stable/
- maartenbreddels 3y agoCo-creator of Voila here. Voila is rather un-opinionated about what you can run in it. While it offers excellent support for ipywidgets, it's certainly not confined to that. One downside of Voila is that it can be resource-intensive, as it creates a new kernel/process for each page view or browser tab. Mercury, in my view, seems really interesting for quick demos and reports. It's somewhat akin to Streamlit, making it ideal for notebook authors. On the other end of the spectrum (and pardon my shameless plug here), there's Solara (https://github.com/widgetti/solara/ https://github.com/widgetti/solara/). Solara is a fully-fledged web framework for Python, specifically designed to handle app sizes that surpass what Streamlit and Dash can manage. It's worth noting that Solara can render ipywidgets, using a pure Python React-like framework. This can be particularly useful after the exploration phase, when you're looking to transition a project from the notebook into production.
- snthpy 3y agoInteresting. I hadn't heard of Solara before. We recently started exploring Pynecone. How does Solara compare to that?
- maartenbreddels 3y agoIn Solara you can dynamically put together the UI like in react, in pynecone you need to use their primitives to make lists and conditional rendering. Also, state management is not tied to solara, but could use dataclasses or pydantic, wrapped in a reactive variable. I think what sets Solara apart from the rest is that we use a 10 year proven paradigm, React, but on the Python side, although with a more Pythonic API. For instance making reusable components in Python is a real benefit. Pynecone uses ReactJS in the front end, but on the Python side it’s their own API. I do like pynecone, their API is pretty. I do wonder with many of these frameworks. Does the paradigm works for more complex apps, or does it end in complexity hell once you go past the hello world examples. At least React has proven itself.
- snthpy 3y agoThanks for your reply. Solara looks great. > For instance making reusable components in Python is a real benefit. I think that could be a big benefit for us because we ran into problems when we wanted to create a custom component for a different Data Grid in Pynecone. In particular we tried to wrap AG Grid but ran into problems when we tried to change the styling because we couldn't overwrite the DIV element's class. Is that something that would be possible in Solara? What Data Grids do you currently provide in Solara? I tried to look at your Components API docs at https://solara.dev/docs/api https://solara.dev/docs/api but that's currently returning an error: > "No object with name Page found for /opt/render/project/src/.venv/lib/python3.9/site-packages/solara/website/pages/docs/__init__.py We did find: 'Path' or 'generate_routes_directory' or 'title' or 'HERE' or 'routes'"
- wtatum 3y agoNot (necessarily) relevant to this solution, but I've recently come across a use case where it would be valuable to allow third-party (semi-trusted) individuals to sandbox/build/test some data processing/transformation pipelines in Jupyter and then "operationalize" that into ongoing ETL in my main webapp/API once they're finished. Not the same use case as Mercury but still in the bucket of hoisting a notebook into a more repeatable/operationalizable runtime. Does anyone have experience with something like that?
- sambucini 3y agoI'm using Papermill to operationalize Notebooks (https://github.com/nteract/papermill https://github.com/nteract/papermill), it e.g. also has airflow support. I'm really happy with papermill for automatic notebook execution, in my field it's nice that we can go very quickly from analysis to operations -- while having super transparent "logging" in the executed notebooks.
- ris58h 3y agoOff-topic: there are some CSS issue on the site in Firefox for Android. I wish developers care more about non chrome users.
- pplonski86 3y agoThat was my first website in Next.js framework ... sorry! I've used nextra.site for creating docs.
- deleted 3y ago[deleted]
- souvic 3y agoWow! It's so cool! How is it better than streamlit though? Just because of the better integration with Jupyter notebook?
- pplonski86 3y agoMercury was created for Jupyter Notebook. You don't need to rewrite your notebook to Python script to use web framework (Stremlit).
- andylynch 3y agoDefinitely going to try this out. Looks like an interesting complement to Shiny for Python.
- yboris 3y agoQuick link: https://github.com/rstudio/py-shiny/ https://github.com/rstudio/py-shiny/ Humbly recommend you share a link to a product when you share it ;) https://shiny.posit.co/py/ https://shiny.posit.co/py/
- sambucini 3y agoI find this super interesting!! while having a quick look, I got the impression, that Mercury runs 1 web service for 1 notebook right? For me it would be very helpful to something like a dashboard with 1 webservice supporting n notebooks.
- pplonski86 3y agoYou can publish multiple notebooks on 1 web service. There is no limit. We provide default view where all notebooks are displayed as cards with clickable title. Please check example in the documentation https://runmercury.com/docs/multiple-notebooks/ https://runmercury.com/docs/multiple-notebooks/.
- sambucini 3y agoexcellent -- thanks a lot!
- layer8 3y agoI don’t think your cookie popup is ePrivacy-compliant (no opt-out for non-essential cookies).
- joewhale 3y agoReally cool stuff. I run demos for clients with the data my company sells and this will be great for quick customized demos/use cases.
- rorads 3y agoLooks good! I’ll certainly give it a try. Just FYI, the layout in the “deployment” box near the bottom of the splash page is very shrunken on iPhone - so narrow that there’s basically one character width.
- pplonski86 3y agoThank you! I've fixed deployment box.
- kolibril13 3y agoThanks for sharing, I’ll give it a try! The last few weeks I've used a similar framework called solara to convert my Jupyter notebooks into web apps https://github.com/widgetti/solara https://github.com/widgetti/solara
- nerpderp82 3y agoCan someone give a survey of all the Jupyter -> WebApp frameworks? The other thing, I'd really like is being able to have multiple simultaneous editors of a single notebook so we can all jam on it on at the same time ala Google Docs.
- dr_kiszonka 3y agoRE: "the other thing", you can do multiplayer for free in VSCode using Live Share or pay for a DeepNote account. (I am sure there are more ways to do it.)
- pplonski86 3y agoIt is possible. Please take a look at Jupyter Real Time Collaboration https://jupyterlab.readthedocs.io/en/stable/user/rtc.html https://jupyterlab.readthedocs.io/en/stable/user/rtc.html
- hackernewds 3y agoAhhhh poor form promoting competitions instead of a ShowHN no?