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.98.1, 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.98.1 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-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 secondscargo-watch: kept for older lessons,baconreplaces itrust-analyzerfor IDE intelligence in VS Code, with clippy 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 Catppuccin starship prompt that shows the full path, git branch, Rust version and crate version, plus autosuggestions, syntax highlighting and atuin history search
lazygit,bat,eza,fd,ripgrep,zoxide,delta
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
Dependencies
cargo add serde --features derive
cargo update # update the lockfile
cargo tree # show the dependency graph
cargo audit # check for known vulnerabilities
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
cb / cr / ct # cargo build / run / test
cn / cl / cf # cargo nextest run / clippy / fmt
ll # detailed file listing
z hello # jump to a recent directory
lg # lazygit
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 |
Both 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 →