GitHub.com
tcp/443
Open service 2606:50c0:8000::153:443 · docs.commontools.dev
2026-02-06 08:28
HTTP/1.1 200 OK
Connection: close
Content-Length: 42561
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Fri, 30 Jan 2026 23:47:07 GMT
Access-Control-Allow-Origin: *
ETag: "697d42fb-a641"
expires: Fri, 06 Feb 2026 08:38:13 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: EF28:28B8E8:9DE558:A03BCB:6985A61D
Accept-Ranges: bytes
Date: Fri, 06 Feb 2026 08:28:13 GMT
Via: 1.1 varnish
Age: 0
X-Served-By: cache-fra-eddf8230165-FRA
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1770366494.513432,VS0,VE71
Vary: Accept-Encoding
X-Fastly-Request-ID: 21c957a517e059397b29337b784fc7ca7e62eb08
Page title: Common Tools DocumentationDownload
<!DOCTYPE html><html lang="en" class="" style="scroll-padding:60px"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Common Tools Documentation</title><meta property="og:title" content="Common Tools Documentation"/><meta name="generator" content="mystmd"/><meta name="description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta property="og:description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta name="keywords" content="commontools, runtime, tutorials, documentation"/><link rel="stylesheet" href="/build/_assets/app-MOQGDXHO.css"/><link rel="stylesheet" href="/build/_assets/thebe-core-VKVHG5VY.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jupyter-matplotlib@0.11.3/css/mpl_widget.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous"/><link rel="icon" href="/favicon.ico"/><link rel="stylesheet" href="/myst-theme.css"/><script>
const savedTheme = localStorage.getItem("myst:theme");
const theme = window.matchMedia("(prefers-color-scheme: light)").matches ? 'light' : 'dark';
const classes = document.documentElement.classList;
const hasAnyTheme = classes.contains('light') || classes.contains('dark');
if (!hasAnyTheme) classes.add(savedTheme ?? theme);
</script></head><body class="m-0 transition-colors duration-500 bg-white dark:bg-stone-900"><div class="myst-skip-to-article fixed top-1 left-1 h-[0px] w-[0px] focus-within:z-40 focus-within:h-auto focus-within:w-auto bg-white overflow-hidden focus-within:p-2 focus-within:ring-1" aria-label="skip to content options"><a href="#skip-to-frontmatter" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article frontmatter</a><a href="#skip-to-article" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article content</a></div><dialog id="myst-no-css" style="position:fixed;left:0px;top:0px;width:100vw;height:100vh;font-size:4rem;padding:1rem;color:black;background:white"><strong>Site not loading correctly?</strong><p>This may be due to an incorrect <code>BASE_URL</code> configuration. See<!-- --> <a href="https://mystmd.org/guide/deployment#deploy-base-url">the MyST Documentation</a> <!-- -->for reference.</p><script>
(() => {
// Test for has-styling variable set by the MyST stylesheet
const node = document.currentScript.parentNode;
const hasCSS = window.getComputedStyle(node).getPropertyValue("--has-styling");
if (hasCSS === ""){
node.showModal();
}
})()
</script></dialog><div class="myst-top-nav bg-white/80 backdrop-blur dark:bg-stone-900/80 shadow dark:shadow-stone-700 p-3 md:px-8 sticky w-screen top-0 z-30 h-[60px]"><nav class="myst-top-nav-bar flex items-center justify-between flex-nowrap max-w-[1440px] mx-auto"><div class="flex flex-row xl:min-w-[19.5rem] mr-2 sm:mr-7 justify-start items-center shrink-0"><div class="block xl:hidden"><button class="myst-top-nav-menu-button flex items-center justify-center border-stone-400 text-stone-800 hover:text-stone-900 dark:text-stone-200 hover:dark:text-stone-100 w-10 h-10"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon" width="1.5rem" height="1.5rem"><path fill-rule="evenodd" d="M3 6.75A.75.75 0 0 1 3.75 6h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 6.75ZM3 12a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 12Zm0 5.25a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd"></path></svg><span class="sr-only">Open Menu</span></button></div><a class="myst-home-link flex items-center ml-3 dark:text-white w-fit md:ml-5 xl:ml-7" href="/"><span class="text-md sm:text-xl tracking-tigh
Open service 185.199.111.153:443 · docs.commontools.dev
2026-02-06 08:28
HTTP/1.1 200 OK
Connection: close
Content-Length: 42561
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Fri, 30 Jan 2026 23:47:07 GMT
Access-Control-Allow-Origin: *
ETag: "697d42fb-a641"
expires: Fri, 06 Feb 2026 08:38:13 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: 7792:171528:236944:24B48A:6985A61D
Accept-Ranges: bytes
Age: 0
Date: Fri, 06 Feb 2026 08:28:13 GMT
Via: 1.1 varnish
X-Served-By: cache-lcy-egml8630086-LCY
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1770366493.453353,VS0,VE114
Vary: Accept-Encoding
X-Fastly-Request-ID: 4e9f186168b5afbee93e88c5f8a251028d3c6234
Page title: Common Tools DocumentationDownload
<!DOCTYPE html><html lang="en" class="" style="scroll-padding:60px"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Common Tools Documentation</title><meta property="og:title" content="Common Tools Documentation"/><meta name="generator" content="mystmd"/><meta name="description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta property="og:description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta name="keywords" content="commontools, runtime, tutorials, documentation"/><link rel="stylesheet" href="/build/_assets/app-MOQGDXHO.css"/><link rel="stylesheet" href="/build/_assets/thebe-core-VKVHG5VY.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jupyter-matplotlib@0.11.3/css/mpl_widget.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous"/><link rel="icon" href="/favicon.ico"/><link rel="stylesheet" href="/myst-theme.css"/><script>
const savedTheme = localStorage.getItem("myst:theme");
const theme = window.matchMedia("(prefers-color-scheme: light)").matches ? 'light' : 'dark';
const classes = document.documentElement.classList;
const hasAnyTheme = classes.contains('light') || classes.contains('dark');
if (!hasAnyTheme) classes.add(savedTheme ?? theme);
</script></head><body class="m-0 transition-colors duration-500 bg-white dark:bg-stone-900"><div class="myst-skip-to-article fixed top-1 left-1 h-[0px] w-[0px] focus-within:z-40 focus-within:h-auto focus-within:w-auto bg-white overflow-hidden focus-within:p-2 focus-within:ring-1" aria-label="skip to content options"><a href="#skip-to-frontmatter" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article frontmatter</a><a href="#skip-to-article" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article content</a></div><dialog id="myst-no-css" style="position:fixed;left:0px;top:0px;width:100vw;height:100vh;font-size:4rem;padding:1rem;color:black;background:white"><strong>Site not loading correctly?</strong><p>This may be due to an incorrect <code>BASE_URL</code> configuration. See<!-- --> <a href="https://mystmd.org/guide/deployment#deploy-base-url">the MyST Documentation</a> <!-- -->for reference.</p><script>
(() => {
// Test for has-styling variable set by the MyST stylesheet
const node = document.currentScript.parentNode;
const hasCSS = window.getComputedStyle(node).getPropertyValue("--has-styling");
if (hasCSS === ""){
node.showModal();
}
})()
</script></dialog><div class="myst-top-nav bg-white/80 backdrop-blur dark:bg-stone-900/80 shadow dark:shadow-stone-700 p-3 md:px-8 sticky w-screen top-0 z-30 h-[60px]"><nav class="myst-top-nav-bar flex items-center justify-between flex-nowrap max-w-[1440px] mx-auto"><div class="flex flex-row xl:min-w-[19.5rem] mr-2 sm:mr-7 justify-start items-center shrink-0"><div class="block xl:hidden"><button class="myst-top-nav-menu-button flex items-center justify-center border-stone-400 text-stone-800 hover:text-stone-900 dark:text-stone-200 hover:dark:text-stone-100 w-10 h-10"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon" width="1.5rem" height="1.5rem"><path fill-rule="evenodd" d="M3 6.75A.75.75 0 0 1 3.75 6h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 6.75ZM3 12a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 12Zm0 5.25a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd"></path></svg><span class="sr-only">Open Menu</span></button></div><a class="myst-home-link flex items-center ml-3 dark:text-white w-fit md:ml-5 xl:ml-7" href="/"><span class="text-md sm:text-xl tracking-tigh
Open service 2606:50c0:8003::153:443 · docs.commontools.dev
2026-02-06 08:28
HTTP/1.1 200 OK
Connection: close
Content-Length: 42561
Server: GitHub.com
Content-Type: text/html; charset=utf-8
x-origin-cache: HIT
Last-Modified: Fri, 30 Jan 2026 23:47:07 GMT
Access-Control-Allow-Origin: *
ETag: "697d42fb-a641"
expires: Fri, 06 Feb 2026 08:38:13 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: EF28:28B8E8:9DE558:A03BCB:6985A61D
Accept-Ranges: bytes
Age: 0
Date: Fri, 06 Feb 2026 08:28:13 GMT
Via: 1.1 varnish
X-Served-By: cache-fra-eddf8230145-FRA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1770366493.477580,VS0,VE106
Vary: Accept-Encoding
X-Fastly-Request-ID: 26550d9c56da5832d0b1b742ad1901c00ea4726f
Page title: Common Tools DocumentationDownload
<!DOCTYPE html><html lang="en" class="" style="scroll-padding:60px"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Common Tools Documentation</title><meta property="og:title" content="Common Tools Documentation"/><meta name="generator" content="mystmd"/><meta name="description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta property="og:description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta name="keywords" content="commontools, runtime, tutorials, documentation"/><link rel="stylesheet" href="/build/_assets/app-MOQGDXHO.css"/><link rel="stylesheet" href="/build/_assets/thebe-core-VKVHG5VY.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jupyter-matplotlib@0.11.3/css/mpl_widget.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous"/><link rel="icon" href="/favicon.ico"/><link rel="stylesheet" href="/myst-theme.css"/><script>
const savedTheme = localStorage.getItem("myst:theme");
const theme = window.matchMedia("(prefers-color-scheme: light)").matches ? 'light' : 'dark';
const classes = document.documentElement.classList;
const hasAnyTheme = classes.contains('light') || classes.contains('dark');
if (!hasAnyTheme) classes.add(savedTheme ?? theme);
</script></head><body class="m-0 transition-colors duration-500 bg-white dark:bg-stone-900"><div class="myst-skip-to-article fixed top-1 left-1 h-[0px] w-[0px] focus-within:z-40 focus-within:h-auto focus-within:w-auto bg-white overflow-hidden focus-within:p-2 focus-within:ring-1" aria-label="skip to content options"><a href="#skip-to-frontmatter" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article frontmatter</a><a href="#skip-to-article" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article content</a></div><dialog id="myst-no-css" style="position:fixed;left:0px;top:0px;width:100vw;height:100vh;font-size:4rem;padding:1rem;color:black;background:white"><strong>Site not loading correctly?</strong><p>This may be due to an incorrect <code>BASE_URL</code> configuration. See<!-- --> <a href="https://mystmd.org/guide/deployment#deploy-base-url">the MyST Documentation</a> <!-- -->for reference.</p><script>
(() => {
// Test for has-styling variable set by the MyST stylesheet
const node = document.currentScript.parentNode;
const hasCSS = window.getComputedStyle(node).getPropertyValue("--has-styling");
if (hasCSS === ""){
node.showModal();
}
})()
</script></dialog><div class="myst-top-nav bg-white/80 backdrop-blur dark:bg-stone-900/80 shadow dark:shadow-stone-700 p-3 md:px-8 sticky w-screen top-0 z-30 h-[60px]"><nav class="myst-top-nav-bar flex items-center justify-between flex-nowrap max-w-[1440px] mx-auto"><div class="flex flex-row xl:min-w-[19.5rem] mr-2 sm:mr-7 justify-start items-center shrink-0"><div class="block xl:hidden"><button class="myst-top-nav-menu-button flex items-center justify-center border-stone-400 text-stone-800 hover:text-stone-900 dark:text-stone-200 hover:dark:text-stone-100 w-10 h-10"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon" width="1.5rem" height="1.5rem"><path fill-rule="evenodd" d="M3 6.75A.75.75 0 0 1 3.75 6h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 6.75ZM3 12a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 12Zm0 5.25a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd"></path></svg><span class="sr-only">Open Menu</span></button></div><a class="myst-home-link flex items-center ml-3 dark:text-white w-fit md:ml-5 xl:ml-7" href="/"><span class="text-md sm:text-xl tracking-tigh
Open service 185.199.111.153:443 · docs.commontools.dev
2026-01-08 23:44
HTTP/1.1 200 OK
Connection: close
Content-Length: 42385
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Tue, 23 Dec 2025 19:36:14 GMT
Access-Control-Allow-Origin: *
ETag: "694aef2e-a591"
expires: Thu, 08 Jan 2026 23:54:42 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: A5C9:1A961C:386FF:39A88:69604169
Accept-Ranges: bytes
Age: 0
Date: Thu, 08 Jan 2026 23:44:42 GMT
Via: 1.1 varnish
X-Served-By: cache-fra-eddf8230072-FRA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1767915882.422571,VS0,VE118
Vary: Accept-Encoding
X-Fastly-Request-ID: 677ca2c8e1bc2633e8942a18a7a13e291a54a692
Page title: Common Tools DocumentationDownload
<!DOCTYPE html><html lang="en" class="" style="scroll-padding:60px"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Common Tools Documentation</title><meta property="og:title" content="Common Tools Documentation"/><meta name="generator" content="mystmd"/><meta name="description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta property="og:description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta name="keywords" content="commontools, runtime, tutorials, documentation"/><link rel="stylesheet" href="/build/_assets/app-AIT5GAEP.css"/><link rel="stylesheet" href="/build/_assets/thebe-core-VKVHG5VY.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jupyter-matplotlib@0.11.3/css/mpl_widget.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous"/><link rel="icon" href="/favicon.ico"/><link rel="stylesheet" href="/myst-theme.css"/><script>
const savedTheme = localStorage.getItem("myst:theme");
const theme = window.matchMedia("(prefers-color-scheme: light)").matches ? 'light' : 'dark';
const classes = document.documentElement.classList;
const hasAnyTheme = classes.contains('light') || classes.contains('dark');
if (!hasAnyTheme) classes.add(savedTheme ?? theme);
</script></head><body class="m-0 transition-colors duration-500 bg-white dark:bg-stone-900"><div class="myst-skip-to-article fixed top-1 left-1 h-[0px] w-[0px] focus-within:z-40 focus-within:h-auto focus-within:w-auto bg-white overflow-hidden focus-within:p-2 focus-within:ring-1" aria-label="skip to content options"><a href="#skip-to-frontmatter" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article frontmatter</a><a href="#skip-to-article" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article content</a></div><dialog id="myst-no-css" style="position:fixed;left:0px;top:0px;width:100vw;height:100vh;font-size:4rem;padding:1rem;color:black;background:white"><strong>Site not loading correctly?</strong><p>This may be due to an incorrect <code>BASE_URL</code> configuration. See<!-- --> <a href="https://mystmd.org/guide/deployment#deploy-base-url">the MyST Documentation</a> <!-- -->for reference.</p><script>
(() => {
// Test for has-styling variable set by the MyST stylesheet
const node = document.currentScript.parentNode;
const hasCSS = window.getComputedStyle(node).getPropertyValue("--has-styling");
if (hasCSS === ""){
node.showModal();
}
})()
</script></dialog><div class="myst-top-nav bg-white/80 backdrop-blur dark:bg-stone-900/80 shadow dark:shadow-stone-700 p-3 md:px-8 sticky w-screen top-0 z-30 h-[60px]"><nav class="myst-top-nav-bar flex items-center justify-between flex-nowrap max-w-[1440px] mx-auto"><div class="flex flex-row xl:min-w-[19.5rem] mr-2 sm:mr-7 justify-start items-center shrink-0"><div class="block xl:hidden"><button class="myst-top-nav-menu-button flex items-center justify-center border-stone-400 text-stone-800 hover:text-stone-900 dark:text-stone-200 hover:dark:text-stone-100 w-10 h-10"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon" width="1.5rem" height="1.5rem"><path fill-rule="evenodd" d="M3 6.75A.75.75 0 0 1 3.75 6h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 6.75ZM3 12a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 12Zm0 5.25a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd"></path></svg><span class="sr-only">Open Menu</span></button></div><a class="myst-home-link flex items-center ml-3 dark:text-white w-fit md:ml-5 xl:ml-7" href="/"><span class="text-md sm:text-xl tracking-tigh
Open service 185.199.111.153:443 · docs.commontools.dev
2026-01-01 21:57
HTTP/1.1 200 OK
Connection: close
Content-Length: 42385
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Tue, 23 Dec 2025 19:36:14 GMT
Access-Control-Allow-Origin: *
ETag: "694aef2e-a591"
expires: Thu, 01 Jan 2026 22:07:14 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: B20A:355767:BBE79F5:BE7D91E:6956EDBA
Accept-Ranges: bytes
Age: 0
Date: Thu, 01 Jan 2026 21:57:14 GMT
Via: 1.1 varnish
X-Served-By: cache-fra-eddf8230043-FRA
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1767304635.850273,VS0,VE131
Vary: Accept-Encoding
X-Fastly-Request-ID: 4d4d59e4fe84c4278f02f3fd75e9138e6f509b42
Page title: Common Tools DocumentationDownload
<!DOCTYPE html><html lang="en" class="" style="scroll-padding:60px"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Common Tools Documentation</title><meta property="og:title" content="Common Tools Documentation"/><meta name="generator" content="mystmd"/><meta name="description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta property="og:description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta name="keywords" content="commontools, runtime, tutorials, documentation"/><link rel="stylesheet" href="/build/_assets/app-AIT5GAEP.css"/><link rel="stylesheet" href="/build/_assets/thebe-core-VKVHG5VY.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jupyter-matplotlib@0.11.3/css/mpl_widget.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous"/><link rel="icon" href="/favicon.ico"/><link rel="stylesheet" href="/myst-theme.css"/><script>
const savedTheme = localStorage.getItem("myst:theme");
const theme = window.matchMedia("(prefers-color-scheme: light)").matches ? 'light' : 'dark';
const classes = document.documentElement.classList;
const hasAnyTheme = classes.contains('light') || classes.contains('dark');
if (!hasAnyTheme) classes.add(savedTheme ?? theme);
</script></head><body class="m-0 transition-colors duration-500 bg-white dark:bg-stone-900"><div class="myst-skip-to-article fixed top-1 left-1 h-[0px] w-[0px] focus-within:z-40 focus-within:h-auto focus-within:w-auto bg-white overflow-hidden focus-within:p-2 focus-within:ring-1" aria-label="skip to content options"><a href="#skip-to-frontmatter" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article frontmatter</a><a href="#skip-to-article" class="myst-skip-to-link block px-2 py-1 text-black underline">Skip to article content</a></div><dialog id="myst-no-css" style="position:fixed;left:0px;top:0px;width:100vw;height:100vh;font-size:4rem;padding:1rem;color:black;background:white"><strong>Site not loading correctly?</strong><p>This may be due to an incorrect <code>BASE_URL</code> configuration. See<!-- --> <a href="https://mystmd.org/guide/deployment#deploy-base-url">the MyST Documentation</a> <!-- -->for reference.</p><script>
(() => {
// Test for has-styling variable set by the MyST stylesheet
const node = document.currentScript.parentNode;
const hasCSS = window.getComputedStyle(node).getPropertyValue("--has-styling");
if (hasCSS === ""){
node.showModal();
}
})()
</script></dialog><div class="myst-top-nav bg-white/80 backdrop-blur dark:bg-stone-900/80 shadow dark:shadow-stone-700 p-3 md:px-8 sticky w-screen top-0 z-30 h-[60px]"><nav class="myst-top-nav-bar flex items-center justify-between flex-nowrap max-w-[1440px] mx-auto"><div class="flex flex-row xl:min-w-[19.5rem] mr-2 sm:mr-7 justify-start items-center shrink-0"><div class="block xl:hidden"><button class="myst-top-nav-menu-button flex items-center justify-center border-stone-400 text-stone-800 hover:text-stone-900 dark:text-stone-200 hover:dark:text-stone-100 w-10 h-10"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon" width="1.5rem" height="1.5rem"><path fill-rule="evenodd" d="M3 6.75A.75.75 0 0 1 3.75 6h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 6.75ZM3 12a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 12Zm0 5.25a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd"></path></svg><span class="sr-only">Open Menu</span></button></div><a class="myst-home-link flex items-center ml-3 dark:text-white w-fit md:ml-5 xl:ml-7" href="/"><span class="text-md sm:text-xl tracking-tigh
Open service 185.199.111.153:443 · docs.commontools.dev
2025-12-22 14:16
HTTP/1.1 200 OK
Connection: close
Content-Length: 40354
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Tue, 18 Nov 2025 00:36:08 GMT
Access-Control-Allow-Origin: *
ETag: "691bbf78-9da2"
expires: Mon, 22 Dec 2025 14:26:46 GMT
Cache-Control: max-age=600
x-proxy-cache: MISS
X-GitHub-Request-Id: 82A2:150E57:346E885:352DF4D:694952CE
Accept-Ranges: bytes
Date: Mon, 22 Dec 2025 14:16:46 GMT
Via: 1.1 varnish
Age: 0
X-Served-By: cache-rtm-ehrd2290045-RTM
X-Cache: HIT
X-Cache-Hits: 1
X-Timer: S1766413007.981053,VS0,VE2
Vary: Accept-Encoding
X-Fastly-Request-ID: 0cbb1a7b310fbbad7f60c5f8789a622c4b47705e
Page title: Common Tools DocumentationDownload
<!DOCTYPE html><html lang="en" class="" style="scroll-padding:60px"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>Common Tools Documentation</title><meta property="og:title" content="Common Tools Documentation"/><meta name="generator" content="mystmd"/><meta name="description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta property="og:description" content="Documentation and tutorials for the Common Tools runtime and framework"/><meta name="keywords" content="commontools, runtime, tutorials, documentation"/><link rel="stylesheet" href="/build/_assets/app-IZWEOBHI.css"/><link rel="stylesheet" href="/build/_assets/thebe-core-VKVHG5VY.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jupyter-matplotlib@0.11.3/css/mpl_widget.css"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous"/><link rel="icon" href="/favicon.ico"/><link rel="stylesheet" href="/myst-theme.css"/><script>
const savedTheme = localStorage.getItem("myst:theme");
const theme = window.matchMedia("(prefers-color-scheme: light)").matches ? 'light' : 'dark';
const classes = document.documentElement.classList;
const hasAnyTheme = classes.contains('light') || classes.contains('dark');
if (!hasAnyTheme) classes.add(savedTheme ?? theme);
</script></head><body class="m-0 transition-colors duration-500 bg-white dark:bg-stone-900"><div class="fixed top-1 left-1 h-[0px] w-[0px] focus-within:z-40 focus-within:h-auto focus-within:w-auto bg-white overflow-hidden focus-within:p-2 focus-within:ring-1" aria-label="skip to content options"><a href="#skip-to-frontmatter" class="block px-2 py-1 text-black underline">Skip to article frontmatter</a><a href="#skip-to-article" class="block px-2 py-1 text-black underline">Skip to article content</a></div><div class="bg-white/80 backdrop-blur dark:bg-stone-900/80 shadow dark:shadow-stone-700 p-3 md:px-8 sticky w-screen top-0 z-30 h-[60px]"><nav class="flex items-center justify-between flex-nowrap max-w-[1440px] mx-auto"><div class="flex flex-row xl:min-w-[19.5rem] mr-2 sm:mr-7 justify-start items-center shrink-0"><div class="block xl:hidden"><button class="flex items-center border-stone-400 text-stone-800 hover:text-stone-900 dark:text-stone-200 hover:dark:text-stone-100"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon" width="2rem" height="2rem" class="m-1"><path fill-rule="evenodd" d="M3 6.75A.75.75 0 0 1 3.75 6h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 6.75ZM3 12a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75A.75.75 0 0 1 3 12Zm0 5.25a.75.75 0 0 1 .75-.75h16.5a.75.75 0 0 1 0 1.5H3.75a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd"></path></svg><span class="sr-only">Open Menu</span></button></div><a class="flex items-center ml-3 dark:text-white w-fit md:ml-5 xl:ml-7" href="/"><span class="text-md sm:text-xl tracking-tight sm:mr-5">Made with MyST</span></a></div><div class="flex items-center flex-grow w-auto"><div class="flex-grow hidden text-md lg:block"></div><div class="flex-grow block"></div><button type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-:R74op:" data-state="closed" class="flex items-center h-10 aspect-square sm:w-64 text-left text-gray-400 border border-gray-300 dark:border-gray-600 rounded-lg bg-gray-50 dark:bg-gray-700 hover:ring-blue-500 dark:hover:ring-blue-500 hover:border-blue-500 dark:hover:border-blue-500"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" data-slot="icon" class="p-2.5 h-10 w-10 aspect-square"><path fill-rule="evenodd" d="M10.5 3.75a6.75 6.75 0 1 0 0 13.5 6.75 6.75 0 0 0 0-13.5ZM2.25 10.5a8.25 8.25 0 1 1 14.59 5.28l4.69 4.69a.75.75 0 1 1-1.06 1.06l-4.69-4.69A8.25 8.25 0 0 1 2.25