diff --git a/content/blog/2025-04-playground.md b/content/blog/2025-04-playground.md index bd56e0285..96d880a89 100644 --- a/content/blog/2025-04-playground.md +++ b/content/blog/2025-04-playground.md @@ -1,17 +1,17 @@ +++ -title = "Try uutils Coreutils directly in your browser" +title = "Try Uutils Coreutils directly in your browser" date = 2025-04-04 page_template = "post.html" authors = ["Sylvestre Ledru"] +++ -We are happy to announce the [uutils playground](/playground) - an interactive terminal that lets you run real Rust coreutils directly in your browser, with no installation, no server, and no network round-trips after the initial page load. +We are happy to announce the [Uutils playground](/playground) - an interactive terminal that lets you run real Rust Uutils Coreutils directly in your browser, with no installation, no server, and no network round-trips after the initial page load. Just open the page and start typing commands like `ls`, `sort`, `cat`, `head`, `factor`, or any of the 60+ utilities available. You can pipe commands together (`sort fruits.txt | uniq -c | sort -rn`), use redirections (`echo hello > file.txt`, `cat < file.txt`), explore the virtual filesystem, and even switch between 30+ languages using the locale dropdown. ### How it works -The uutils coreutils are compiled to WebAssembly (targeting `wasm32-wasip1`) as a single multicall binary - similar to BusyBox. When you type a command, a minimal JavaScript shell parses your input, sets up pipes between stages, and executes each one by instantiating the WASM binary with the right arguments. A virtual in-memory filesystem backed by [browser_wasi_shim](https://github.com/bjorn3/browser_wasi_shim) provides file I/O. Everything runs client-side - once loaded, the playground works entirely offline. +The Uutils Coreutils are compiled to WebAssembly (targeting `wasm32-wasip1`) as a single multicall binary - similar to BusyBox. When you type a command, a minimal JavaScript shell parses your input, sets up pipes between stages, and executes each one by instantiating the WASM binary with the right arguments. A virtual in-memory filesystem backed by [browser_wasi_shim](https://github.com/bjorn3/browser_wasi_shim) provides file I/O. Everything runs client-side - once loaded, the playground works entirely offline. An important distinction worth noting: **coreutils only provides individual commands** (`sort`, `cat`, `ls`, etc.). Features like `if`/`then`/`else`, `while` loops, variable expansion (`$VAR`), and globbing (`*.txt`) are shell features provided by Bash, Zsh, or similar - not by coreutils. The playground's JavaScript shell is intentionally minimal, keeping the focus on the coreutils themselves. diff --git a/content/playground.md b/content/playground.md index 41177cfff..d0bad05bd 100644 --- a/content/playground.md +++ b/content/playground.md @@ -107,9 +107,11 @@ The following are **shell builtins** implemented in JavaScript: - `help` - list available commands and examples - `clear` - clear the terminal screen +- `cd` - change the current working directory +- `locale` - show or change the current locale -Some commands (ex: `chcon`, `runcon`, etc) are not yet available in the WASM build because they -depend on platform-specific syscalls not fully supported by WebAssembly/WASI yet.
+Some commands (e.g. `chcon`, `runcon`, etc.) are not yet available in the WASM build because they +depend on platform-specific syscalls not fully supported by WebAssembly/WASI. We are actively working on adding more commands as we improve WASI compatibility in uutils coreutils.