<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Jupyter Blog - Ian Thomas</title><link href="https://jasongrout.github.io/medium-archive/pelican/" rel="alternate"/><link href="https://jasongrout.github.io/medium-archive/pelican/feeds/author-ian-thomas.atom.xml" rel="self"/><id>https://jasongrout.github.io/medium-archive/pelican/</id><updated>2024-11-13T19:37:00+00:00</updated><subtitle>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</subtitle><entry><title>JupyterLite Terminal</title><link href="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/" rel="alternate"/><published>2024-11-13T19:37:00+00:00</published><updated>2024-11-13T19:37:00+00:00</updated><author><name>Ian Thomas</name></author><id>tag:jasongrout.github.io,2024-11-13:/medium-archive/pelican/posts/2024/jupyterlite-terminal/</id><summary type="html">&lt;p&gt;JupyterLite is an unofficial Jupyter distribution that runs entirely in the web browser without any server components. Deployment and…&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/001-1_OSnVBpfV12C1YpgVnuXOyw.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jupyterlite.readthedocs.io/en/stable/"&gt;JupyterLite&lt;/a&gt; is an unofficial Jupyter distribution that runs entirely in the web browser without any server components. Deployment and hosting are easy as JupyterLite sites are just static websites.&lt;/p&gt;
&lt;p&gt;JupyterLite isn’t yet as fully-featured as the more established JupyterLab and developers are always looking for ways to add new features to bridge that gap. &lt;a href="https://quantstack.net/"&gt;QuantStack&lt;/a&gt; are therefore delighted to announce that we have been working on a new Terminal for JupyterLite.&lt;/p&gt;
&lt;h2 id="how-do-you-try-out-the-jupyterlite-terminal"&gt;How do you try out the JupyterLite Terminal?&lt;/h2&gt;
&lt;p&gt;Go to &lt;a href="https://jupyterlite-terminal.vercel.app/"&gt;https://jupyterlite-terminal.vercel.app/&lt;/a&gt; and click on the Terminal launcher.&lt;/p&gt;
&lt;h2 id="what-can-you-do-with-the-jupyterlite-terminal"&gt;What can you do with the JupyterLite Terminal?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Run shell commands such as &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;cat&lt;/code&gt; on the same file system as the rest of JupyterLite:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/002-1_dkyeiiagy9zZnfCxjkCgPg.mp4" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use tab completion of command and file names, and pipes between commands:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/003-1_wTGFO6IDHQ0YSYjso-XUtA.mp4" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Store and use the command history:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/004-1_qFCSqPLAJptGXf4fCC7F0g.mp4" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Change the theme settings:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/005-1_UxMOxMnDiheATrA044BK5A.mp4" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can even run &lt;code&gt;lua&lt;/code&gt; scripts from the command line:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/006-1_LbyGHamQs-_pNmk2vmDdfQ.mp4" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To list the available commands press &lt;code&gt;tab&lt;/code&gt; in an empty prompt:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/007-1__qX0_9_LgO1r9Is5Oj7u5Q.webp" alt="List of supported commands" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="how-does-it-work"&gt;How does it work?&lt;/h2&gt;
&lt;p&gt;In JupyterLab the Terminal connects to a real shell such as &lt;code&gt;bash&lt;/code&gt; running on the server. In JupyterLite the Terminal runs entirely within the browser with commands that are compiled to WebAssembly and glued together with TypeScript to provide &lt;code&gt;bash&lt;/code&gt;-like functionality.&lt;/p&gt;
&lt;p&gt;The WebAssembly commands are compiled on &lt;a href="https://emscripten-forge.org/"&gt;Emscripten-forge&lt;/a&gt; and automatically packaged up when you build a JupyterLite deployment using the Terminal.&lt;/p&gt;
&lt;p&gt;You can see which Emscripten-forge packages are included in your Terminal using the &lt;code&gt;cockle-config&lt;/code&gt; command:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jasongrout.github.io/medium-archive/pelican/posts/2024/jupyterlite-terminal/images/008-1_5xqYgXmsS6dJsonJCBU23g.webp" alt="" loading="lazy" data-body-image=""&gt;&lt;/p&gt;
&lt;h2 id="what-is-the-status-of-the-project"&gt;What is the status of the project?&lt;/h2&gt;
&lt;p&gt;The JupyterLite Terminal is still experimental and there are lots of things it doesn’t yet do. But it is under active development and major improvements are planned for the coming months. These will include more commands, improved&lt;code&gt;bash&lt;/code&gt;-like shell functionality, and instructions on how to build and use your own WebAssembly commands.&lt;/p&gt;
&lt;h2 id="resources"&gt;Resources&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://jupyterlite-terminal.vercel.app/"&gt;JupyterLite deployment&lt;/a&gt; to try out the Terminal.&lt;/p&gt;
&lt;p&gt;Github repositories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/jupyterlite/terminal"&gt;terminal&lt;/a&gt;: JupyterLite extension for the Terminal.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jupyterlite/cockle"&gt;cockle&lt;/a&gt;: underlying &lt;code&gt;bash&lt;/code&gt;-like shell functionality.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/emscripten-forge/recipes"&gt;recipes&lt;/a&gt;: Emscripten-forge recipes for WebAssembly commands.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="acknowledgements"&gt;Acknowledgements&lt;/h2&gt;
&lt;p&gt;This work was performed by &lt;strong&gt;Ian Thomas&lt;/strong&gt;, &lt;strong&gt;Jeremy Tuloup&lt;/strong&gt; and &lt;strong&gt;Thorsten Beier&lt;/strong&gt; at &lt;a href="https://quantstack.net/"&gt;QuantStack&lt;/a&gt;. Thanks to &lt;a href="https://x.com/TechAtBloomberg"&gt;Bloomberg&lt;/a&gt; for funding this work and for their ongoing support for JupyterLite in general.&lt;/p&gt;
&lt;h2 id="about-the-author"&gt;About the author&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ian Thomas&lt;/strong&gt; is a Scientific Software Developer at &lt;a href="https://quantstack.net/"&gt;QuantStack&lt;/a&gt;, is a core maintainer of the Open Source projects &lt;a href="https://github.com/matplotlib/matplotlib"&gt;Matplotlib&lt;/a&gt;, &lt;a href="https://github.com/bokeh/bokeh"&gt;Bokeh&lt;/a&gt; and &lt;a href="https://github.com/contourpy/contourpy"&gt;ContourPy&lt;/a&gt;, and has an interest in many parts of the Jupyter ecosystem.&lt;/p&gt;
</content><category term="JupyterLite"/></entry></feed>