Rust Programming Playground
A disposable Rust development environment with stable, beta, and nightly toolchains, bacon, cargo-nextest, rustfmt, clippy, rust-analyzer, and the musl target pre-installed.

A disposable Rust development environment. Stable 1.99.0, beta, and nightly toolchains, rustfmt, clippy, rust-analyzer, codelldb, and the musl cross-compilation target are all pre-installed. Full IDE support via VS Code with a native debugger. Runs on 4 vCPU / 10 GiB RAM / 100 GiB disk.
Nothing is persisted once the playground stops.
What's included
rustc/cargo(stable 1.99.0 as default, beta, nightly)rustfmtcode formatter andclippylinter (all three toolchains)rust-srcso rust-analyzer can resolve the standard librarybacon: background check, lint and test runnercargo-watch: reruns any cargo command on every savecargo-nextest: faster test runner with clearer outputcargo-expand: shows code after macro expansioncargo-audit: scans dependencies for known vulnerabilitiescargo-binstall: installs prebuilt cargo tools in secondsrust-analyzerfor IDE intelligence in VS Code, with clippy on save and format on savecodelldbnative debugger in VS Codex86_64-unknown-linux-musltarget for static binaries- A C toolchain,
pkg-config, andlibssl-devfor the common-syscrates - zsh with a starship prompt that shows the full path, git branch, Rust version and crate version, plus autosuggestions, syntax highlighting and atuin history search
tmux,lazygit,bat,eza,fd,ripgrep,zoxide,fzf,btop,fastfetchdeltaas the git pager, sogit diffandgit log -pshow syntax-highlighted diffs with line numbers- Catppuccin Mocha across the prompt, VS Code, bat, delta, fzf and tmux
Key commands
New project
cargo new hello && cd hello
cargo run
Build
cargo check # type check, no linking, fastest
cargo build # debug build
cargo build --release # optimized build
# Static binary, runs anywhere, no libc needed
cargo build --release --target x86_64-unknown-linux-musl
Test
cargo test # run all tests
cargo test test_name # run one test
cargo test -- --nocapture # show println! output
cargo nextest run # faster runner, one line per test
Format and lint
cargo fmt # format all files
cargo fmt -- --check # check without modifying
cargo clippy # lint with suggestions
cargo clippy -- -D warnings # treat warnings as errors
Watch mode
bacon # recheck on every save
bacon clippy # relint on every save
bacon test # retest on every save
bacon run # rerun on every save
cargo watch -x run # rerun with cargo-watch
Dependencies
cargo add serde --features derive
cargo update # update the lockfile
cargo tree # show the dependency graph
cargo audit # check for known vulnerabilities
cargo binstall <crate> # install a prebuilt cargo tool
cargo doc --open # build and read your crate docs
Inspect macros
cargo expand # full crate after macro expansion
cargo expand main # one module or item
Switch toolchain
cargo +nightly run # run with nightly
cargo +beta build # build with beta
rustup show # what is installed and active
rustup toolchain list # all toolchains
Understand an error
rustc --explain E0382 # full write-up for any error code
Terminal shortcuts
c # cargo
cb / cr / ct # cargo build / run / test
cn / cl / cf # cargo nextest run / clippy / fmt
ll # detailed file listing
tree # folder tree, respects .gitignore
cat main.rs # view a file with syntax highlighting
rg "fn main" # search code
fd lib.rs # find files by name
z hello # jump to a recent directory
lg # lazygit
top # btop system monitor
icons on # Nerd Font icons, if your own terminal has the font
Ctrl+R searches history, Ctrl+T picks a file, Alt+C jumps into a subdirectory.
Where things live
The toolchain is installed system wide, so root and laborant share it.
| Path | Contents |
|---|---|
/usr/local/rustup | Toolchains and components |
/usr/local/cargo | Cargo binaries and the crates.io cache |
/etc/zsh/playground.zsh | Shared zsh config, aliases and prompt setup |
~/.zshrc.local | Your own shell additions, loaded after the defaults |
Both toolchain directories are writable by any user, so cargo install and cargo add work without sudo.
A real VM, not a container
Get root on a VM with its own kernel, so Docker, Kubernetes, and systemd just work.
Read the docs →
SSH from browser or CLI
Use the built-in web terminal, or connect with labctl ssh, plain ssh, scp, or rsync.
Read the docs →
Drive it with AI
Let Claude, Codex, or any MCP client start this playground and run commands in it.
Read the docs →
Expose HTTP(S) ports
Give any web app running inside the VM a public URL - for yourself or to share with others.
Read the docs →
Share terminals
Invite others into your terminal session, or open it yourself from another device.
Read the docs →
Customize with init scripts
Add shell scripts that run at boot to install packages, clone repos, or seed test data.
Read the docs →
Private networking
VMs reach the internet via NAT with no public IP; several VMs share bridge networks.
Read the docs →
Ephemeral or persistent
By default, VMs are destroyed when the session ends; enable persistence to keep the disks for next time.
Read the docs →
Built-in container registry
A private registry.iximiuz.com for every playground to share images across services and VMs.
Read the docs →