<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ian Thomas · Jupyter Blog</title>
    <link>https://jupyter.org/medium-archive/hugo/authors/ian-thomas/</link>
    <description>The Project Jupyter blog: news, releases, and community stories, archived from blog.jupyter.org.</description>
    <generator>Hugo</generator>
    <lastBuildDate>Wed, 13 Nov 2024 19:37:04 &#43;0000</lastBuildDate>
    <atom:link href="https://jupyter.org/medium-archive/hugo/authors/ian-thomas/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>JupyterLite Terminal</title>
      <link>https://jupyter.org/medium-archive/hugo/posts/2024/jupyterlite-terminal/</link>
      <pubDate>Wed, 13 Nov 2024 19:37:04 &#43;0000</pubDate>
      <dc:creator>Ian Thomas</dc:creator>
      <guid>https://jupyter.org/medium-archive/hugo/posts/2024/jupyterlite-terminal/</guid>
      <description>JupyterLite is an unofficial Jupyter distribution that runs entirely in the web browser without any server components. Deployment and…</description>
      <content:encoded>&lt;p&gt;&lt;img src=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/001-1_OSnVBpfV12C1YpgVnuXOyw.webp&#34; width=&#34;600&#34; height=&#34;196&#34; fetchpriority=&#34;high&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jupyterlite.readthedocs.io/en/stable/&#34;&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=&#34;https://quantstack.net/&#34;&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=&#34;how-do-you-try-out-the-jupyterlite-terminal&#34;&gt;How do you try out the JupyterLite Terminal?&lt;/h2&gt;
&lt;p&gt;Go to &lt;a href=&#34;https://jupyterlite-terminal.vercel.app/&#34;&gt;https://jupyterlite-terminal.vercel.app/&lt;/a&gt; and click on the Terminal launcher.&lt;/p&gt;
&lt;h2 id=&#34;what-can-you-do-with-the-jupyterlite-terminal&#34;&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;video src=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/002-1_dkyeiiagy9zZnfCxjkCgPg.mp4&#34; poster=&#34;/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/002-1_dkyeiiagy9zZnfCxjkCgPg-poster.webp&#34; width=&#34;2000&#34; height=&#34;1200&#34; preload=&#34;none&#34; loop muted playsinline controls&gt;&lt;/video&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;video src=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/003-1_wTGFO6IDHQ0YSYjso-XUtA.mp4&#34; poster=&#34;/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/003-1_wTGFO6IDHQ0YSYjso-XUtA-poster.webp&#34; width=&#34;2000&#34; height=&#34;1200&#34; preload=&#34;none&#34; loop muted playsinline controls&gt;&lt;/video&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;video src=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/004-1_qFCSqPLAJptGXf4fCC7F0g.mp4&#34; poster=&#34;/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/004-1_qFCSqPLAJptGXf4fCC7F0g-poster.webp&#34; width=&#34;2000&#34; height=&#34;1200&#34; preload=&#34;none&#34; loop muted playsinline controls&gt;&lt;/video&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Change the theme settings:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;video src=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/005-1_UxMOxMnDiheATrA044BK5A.mp4&#34; poster=&#34;/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/005-1_UxMOxMnDiheATrA044BK5A-poster.webp&#34; width=&#34;2000&#34; height=&#34;1200&#34; preload=&#34;none&#34; loop muted playsinline controls&gt;&lt;/video&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;video src=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/006-1_LbyGHamQs-_pNmk2vmDdfQ.mp4&#34; poster=&#34;/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/006-1_LbyGHamQs-_pNmk2vmDdfQ-poster.webp&#34; width=&#34;2000&#34; height=&#34;1200&#34; preload=&#34;none&#34; loop muted playsinline controls&gt;&lt;/video&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=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/007-1__qX0_9_LgO1r9Is5Oj7u5Q.webp&#34; width=&#34;2000&#34; height=&#34;800&#34; loading=&#34;lazy&#34; alt=&#34;List of supported commands&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;how-does-it-work&#34;&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=&#34;https://emscripten-forge.org/&#34;&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=&#34;https://jupyter.org/medium-archive/hugo/medium-archive/hugo/posts/2024/jupyterlite-terminal/images/008-1_5xqYgXmsS6dJsonJCBU23g.webp&#34; width=&#34;2000&#34; height=&#34;800&#34; loading=&#34;lazy&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;what-is-the-status-of-the-project&#34;&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=&#34;resources&#34;&gt;Resources&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://jupyterlite-terminal.vercel.app/&#34;&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=&#34;https://github.com/jupyterlite/terminal&#34;&gt;terminal&lt;/a&gt;: JupyterLite extension for the Terminal.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jupyterlite/cockle&#34;&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=&#34;https://github.com/emscripten-forge/recipes&#34;&gt;recipes&lt;/a&gt;: Emscripten-forge recipes for WebAssembly commands.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;acknowledgements&#34;&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=&#34;https://quantstack.net/&#34;&gt;QuantStack&lt;/a&gt;. Thanks to &lt;a href=&#34;https://x.com/TechAtBloomberg&#34;&gt;Bloomberg&lt;/a&gt; for funding this work and for their ongoing support for JupyterLite in general.&lt;/p&gt;
&lt;h2 id=&#34;about-the-author&#34;&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=&#34;https://quantstack.net/&#34;&gt;QuantStack&lt;/a&gt;, is a core maintainer of the Open Source projects &lt;a href=&#34;https://github.com/matplotlib/matplotlib&#34;&gt;Matplotlib&lt;/a&gt;, &lt;a href=&#34;https://github.com/bokeh/bokeh&#34;&gt;Bokeh&lt;/a&gt; and &lt;a href=&#34;https://github.com/contourpy/contourpy&#34;&gt;ContourPy&lt;/a&gt;, and has an interest in many parts of the Jupyter ecosystem.&lt;/p&gt;
</content:encoded>
    </item>
    
  </channel>
</rss>
