In-browser bash-like shell implemented in a combination of TypeScript and WebAssembly.
Used in the JupyterLite terminal extension.
Try it out outside of JupyterLite on github pages at https://jupyterlite.github.io/cockle.
The commands used here are either built-in commands implemented in TypeScript, or WebAssembly
commands compiled into .js and .wasm files. The latter are built by
Emscripten-forge and are added to a deployment during the build process.
Emscripten-forge packages containing WebAssembly commands that are currently supported and tested are as follows. Each package contains a single commmand with the same name as the package unless otherwise specified:
coreutils: multiple core commands includingcat,cp,echo,ls,mkdir,mv,rm,touch,uname, andwcgreplessluananosedtreevim
## Version compatibility
The filesystem used in cockle is built using a specific version of Emscripten, and for maximum
compatibility the WebAssembly commands used in cockle should be built using the same version of
Emscripten. WebAssembly commands built on Emscripten-forge are hosted on different
prefix.dev channels depending on the Emscripten version.
cockle version |
emscripten version |
prefix.dev channel |
|---|---|---|
| >= 1.4.0 | 4.0.9 | emscripten-forge-4x |
| >= 0.1.14, <= 1.3.0 | 3.1.73 | emscripten-forge-dev |
micromamba env create -f environment-dev.yml
micromamba activate cockle
npm install
npm run build
npm run lint:checkYou can use conda, mamba or pixi instead of micromamba here. A copy of
micromamba is installed into the cockle environment; this is needed to support the
emscripten-wasm32 platform in the demo and tests.
The cockle repository includes a demo so that you can easily try it out interactively in a web
browser. Once you have built cockle, build the demo using:
cd demo
npm install
npm run buildand then serve he demo using:
npm run serveand open a browser at the specified URL:
The demo is served with cross-origin headers so that is supports synchronous stdin via both
SharedArrayBuffer and ServiceWorker. Use cockle-config stdin to check the current settings, and
cockle-config stdin sw to switch to using the ServiceWorker.
The demo can also be served with a local CORS proxy which is useful for trying out git clone of
remote repositories. For this use:
npm run serve-with-corsThe test directory contains unit tests and playwright integration tests which can be built and run
as follows:
cd test
npm install
npx playwright install --with-deps chromium
npm run build
npm run testYou can interactively run individual playwright tests using npm run test:integration:ui.
The testing framework serves its own CORS proxy using
cors-anywhere so that git clone of github repositories
can be tested without using an external CORS proxy that may be rate limited or otherwise restricted.
In addition, the demo directory contains separate visual tests that can be run in the same way.
Only Linux screenshots are stored within the repository.
