Base Images
Sprites run on pre-configured base images that include common development tools, language runtimes, and AI coding agents. The base image is upgraded automatically without affecting your overlay filesystem.
Ubuntu DevTools (Default)
Section titled “Ubuntu DevTools (Default)”The default Sprite image is based on Ubuntu 25.04 and comes with a comprehensive development environment.
Operating System
Section titled “Operating System”- Base: Ubuntu 25.04
- User:
spritewith passwordless sudo - Shell: bash (default), with zsh, fish, tcsh, and ksh available
Pre-installed Languages
Section titled “Pre-installed Languages”| Language | Default Version | Version Manager | Manager Shimmed? |
|---|---|---|---|
| Node.js | 22.20.0 | nvm | No (requires sourcing) |
| Python | 3.13.7 | pyenv | Yes |
| Go | 1.25.1 | Direct install | N/A |
| Rust | 1.90.0 | rustup | Yes |
| Ruby | 3.4.6 | rbenv | Yes |
| Elixir | 1.18.4 | Direct install | N/A |
| Erlang | 28.1 | kerl | Yes |
| Java | 25 (Temurin) | SDKMAN | No (requires sourcing) |
| Bun | latest | Direct install | N/A |
| Deno | latest | Direct install | N/A |
AI Coding Agents
Section titled “AI Coding Agents”Pre-installed coding agents ready to use:
| Agent | Command | Package |
|---|---|---|
| Claude Code | claude | @anthropic-ai/claude-code |
| Gemini CLI | gemini | @google/gemini-cli |
| OpenAI Codex | codex | @openai/codex |
| Cursor | cursor | cursor |
System Tools
Section titled “System Tools”Common development tools pre-installed:
- Build tools: build-essential, clang, autoconf, automake, libtool, pkg-config
- Version control: git
- Editors: vim, nano
- Shells: bash, zsh, fish, tcsh, ksh
- Terminal: tmux, kitty
- Utilities: curl, wget, rsync, tree, htop
- Network: dnsutils, iputils-ping, net-tools, openssh-client
Language Details
Section titled “Language Details”Node.js
Section titled “Node.js”Default commands work immediately via shims: node, npm, npx, corepack.
# These work directlynode --versionnpm --versionnpm install expressnpx create-next-appTo install or switch Node.js versions, you must source nvm first:
# Source nvmexport NVM_DIR="/.sprite/languages/node/nvm"[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Now nvm commands worknvm install 20nvm install 18nvm use 20nvm alias default 20nvm listPython
Section titled “Python”Default commands work immediately via shims: python, pip, pipenv, poetry, virtualenv.
The pyenv command is also shimmed and works directly:
# These work directlypython --versionpip --versionpip install requests
# pyenv is shimmed - works without sourcingpyenv install 3.12.0pyenv install 3.11.0pyenv global 3.12.0pyenv local 3.11.0 # Per-directorypyenv versions
# Virtual environmentspython -m venv myenvsource myenv/bin/activate
# Or use poetry/pipenv (pre-installed)poetry new myprojectpipenv installDefault commands work immediately via shims: go, gofmt.
# These work directlygo versiongo buildgo run main.gogo install github.com/example/tool@latestGo is installed directly without a version manager. Only one version is available at a time.
Default commands work immediately via shims: rustc, cargo, rustfmt, rustdoc.
The rustup command is also shimmed and works directly:
# These work directlyrustc --versioncargo --versioncargo buildcargo run
# rustup is shimmed - works without sourcingrustup toolchain install nightlyrustup toolchain install 1.75.0rustup default nightlyrustup default stablerustup component add clippyrustup toolchain listDefault commands work immediately via shims: ruby, gem, bundle, bundler, irb, rake.
The rbenv command is also shimmed and works directly:
# These work directlyruby --versiongem --versiongem install railsbundle install
# rbenv is shimmed - works without sourcingrbenv install 3.3.0rbenv install 3.2.0rbenv global 3.3.0rbenv local 3.2.0 # Per-directoryrbenv versionsElixir & Erlang
Section titled “Elixir & Erlang”Default Elixir commands work via shims: elixir, elixirc, iex, mix.
Default Erlang commands work via shims: erl, erlc, escript, dialyzer, rebar3.
# These work directlyelixir --versioniexmix new myapp
erl -versionrebar3 new app myappThe kerl command is shimmed for managing Erlang versions:
# kerl is shimmed - works without sourcingkerl list releaseskerl build 27.0 27.0kerl install 27.0 /.sprite/languages/erlang/kerl/installs/27.0Elixir is installed directly for the default Erlang version. To use different Elixir versions, download precompiled releases manually.
Default Java commands work via shims: java, javac, jar, jshell, etc.
# These work directlyjava --versionjavac --versionjava -jar myapp.jarTo install or switch Java versions, you must source SDKMAN first:
# Source SDKMANexport SDKMAN_DIR="/.sprite/languages/java/sdkman"[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ] && \. "$SDKMAN_DIR/bin/sdkman-init.sh"
# Now sdk commands worksdk list javasdk install java 21-temsdk install java 17-temsdk use java 21-temsdk default java 21-temDefault commands work via shims: bun, bunx.
# These work directlybun --versionbun run startbun installbun testbunx create-next-appDefault command works via shim: deno.
# These work directlydeno --versiondeno run script.tsdeno task startdeno compile app.tsFilesystem Layout
Section titled “Filesystem Layout”Languages are installed in /.sprite/languages/ with shims in /.sprite/bin/:
/.sprite/├── bin/ # Command shims (in PATH)│ ├── node│ ├── npm│ ├── python│ ├── pyenv # Shimmed - works directly│ ├── go│ ├── rustc│ ├── rustup # Shimmed - works directly│ ├── ruby│ ├── rbenv # Shimmed - works directly│ └── ...├── languages/│ ├── node/│ │ └── nvm/ # Must source to use nvm│ ├── python/│ │ └── pyenv/ # Shimmed via /.sprite/bin/pyenv│ ├── go/│ │ ├── versions/ # Go versions│ │ └── current/ # Symlink to active version│ ├── rust/│ │ ├── rustup/ # Shimmed via /.sprite/bin/rustup│ │ └── cargo/│ ├── ruby/│ │ └── rbenv/ # Shimmed via /.sprite/bin/rbenv│ ├── java/│ │ └── sdkman/ # Must source to use sdk│ ├── erlang/│ │ └── kerl/ # Shimmed via /.sprite/bin/kerl│ ├── elixir/│ │ └── current/ # Symlink to active version│ ├── bun/│ └── deno/├── etc/│ └── profile.d/ # Shell initialization└── llm.txt # LLM documentationImage Updates
Section titled “Image Updates”Base images are updated automatically without affecting your files:
- Your code and data: Stored in the overlay filesystem, preserved across updates
- System packages: Updated in the base image, applied on next boot
- Language runtimes: Base versions updated, your installed versions preserved
To check the current base image version:
cat /.sprite/version.txtLLM Integration
Section titled “LLM Integration”Each Sprite includes documentation for LLMs at /.sprite/llm.txt. This file describes the environment and available tools, making it easy for AI assistants to understand and work with your Sprite.
Additional language-specific documentation is available in each language directory:
# General environment documentationcat /.sprite/llm.txt
# Per-language documentationcat /.sprite/languages/node/llm.txtcat /.sprite/languages/python/llm.txtcat /.sprite/languages/rust/llm.txtInternal Tools
Section titled “Internal Tools”The base image includes several tools for interacting with the Sprite runtime from inside the environment.
curl-sprite-api
Section titled “curl-sprite-api”A convenience wrapper for accessing the internal API via Unix socket:
# Instead of:curl --unix-socket /.sprite/api.sock -H "Content-Type: application/json" http://sprite/v1/services
# You can use:curl-sprite-api /v1/services
# See all available endpointscurl-sprite-api --helpThe internal API manages:
- Services - Long-running processes that persist across reboots
- Checkpoints - Create and restore environment snapshots
See Services and Checkpoints for details.
sprite-browser
Section titled “sprite-browser”Handles browser open requests from within the Sprite. When a process tries to open a URL (e.g., xdg-open https://example.com), this tool sends an escape sequence to your terminal, which the Sprite CLI intercepts to open the URL in your local browser.
# Opens in your local browser (when connected via sprite console)xdg-open https://example.comsprite-console
Section titled “sprite-console”Launches the appropriate login shell based on your local environment. When you run sprite console, this script:
- Detects your preferred shell from the
$SHELLenvironment variable - Installs terminfo if needed for proper terminal rendering
- Starts a login shell session
Internal API Socket
Section titled “Internal API Socket”The Sprite runtime exposes a Unix socket at /.sprite/api.sock for internal management. While curl-sprite-api is the recommended way to interact with it, you can also use it directly:
# Using curl directlycurl --unix-socket /.sprite/api.sock \ -H "Content-Type: application/json" \ http://sprite/v1/services
# Using other HTTP clients that support Unix socketsNetwork Policy
Section titled “Network Policy”Network egress policy is mounted read-only at /.sprite/policy/network.json. This file shows which domains are allowed:
cat /.sprite/policy/network.jsonNetwork policies must be updated externally via the Sprite API—the container cannot modify its own policy. See Networking for details.