Open container images for software development.
Every downloaded tool, including Clor, is pinned to an explicit version and overridable at build time. Images are built for linux/amd64 and linux/arm64 and published to ghcr.io/clorhq.
| Image | Toolchain | Includes |
|---|---|---|
software-development-base | Node, Bun, Deno, Go, Python/uv | Clor, Claude, Codex, code-server, Playwright, gh/gh-dash, lazygit, Yazi, Neovim, API/network clients, quality/security scanners, logs/data/content tools |
software-development-rust | rustup Rust | clippy, rustfmt, rust-src, rust-analyzer, cargo-nextest, cargo-watch, cargo-edit, cargo-audit |
software-development-go | Go (from base) | gopls, delve, golangci-lint |
software-development-typescript | Node, Bun, Deno | eslint, prettier, tailwindcss |
software-development-python | uv-managed CPython | ruff, mypy, pyright, poetry, ipython |
software-development-zig | Zig | zls |
software-development-ruby | Ruby | bundler, rubocop, solargraph |
software-development-data | Base image with pinned CPython | JupyterLab, Marimo, Harlequin, pandas, Polars, PyArrow, DuckDB |
software-development-devops | Base image | Web/cloud deployment CLIs, Kubernetes, IaC, signing, and registry tools |
Each language image is FROM software-development-base, so the agents, OS
tooling, and the base toolchains are present in every image. The language
images override the managed entrypoint with an unprivileged Bash default,
making them suitable as custom space images.
The Data and DevOps images are intentionally pull-on-demand variants. Their services and terminal helpers only open local interactive interfaces: image startup never authenticates to a provider, selects a deployment target, or changes external infrastructure. Provider credentials remain runtime state, supplied interactively or through Clor secrets.
software-development-base includes the practical tools below. Exact versions
are pinned in images/base/Dockerfile.
gh),
gh-dash,
delta,
difftastic,
ESLint,
Prettier,
ShellCheck,
shfmt,
golangci-lint,
actionlint,
ast-grep,
typos,
Vale, and
lychee.tailscale and tailscaled, not
started by the image), ping, traceroute, mtr, netcat, socat, tcpdump, DNS
tools, and whois.docker_access = true, using private persistent state
mounted at /var/lib/docker. Package installation never starts the daemon.playwright install webkit.PostgreSQL, MariaDB (available under the mysql service name), and Redis are
preconfigured for local development. They bind only to loopback, use
passwordless development authentication, and do not start with the space.
sv start postgres
sv start mysql
sv start redis
sv status postgres mysql redis
sv stop postgres mysql redis
The first start initializes each database. PostgreSQL creates the user
superuser, MariaDB creates a passwordless local root account, and Redis does
not require a password. These defaults are for development inside a space,
not for publicly reachable or production databases.
The services follow the XDG base-directory layout:
| Content | Location |
|---|---|
| runit service definitions | ~/.config/runit/services |
| Server configuration | ~/.config/postgresql, ~/.config/mysql, ~/.config/redis |
| Database data | ~/.local/share/postgresql, ~/.local/share/mysql, ~/.local/share/redis |
| Rotated logs | ~/.local/state/<service>/log |
| Sockets and PID files | $XDG_RUNTIME_DIR/<service> |
Edit the native server config and restart the corresponding service to change
ports, authentication, persistence, or network exposure. To reset a database,
stop its service and remove only that service's directory under
~/.local/share; its next start initializes a fresh database.
Shell
53.7%
Dockerfile
30.2%
JavaScript
13.6%
Python
2.2%
Open container images for software development.
Every downloaded tool, including Clor, is pinned to an explicit version and overridable at build time. Images are built for linux/amd64 and linux/arm64 and published to ghcr.io/clorhq.
| Image | Toolchain | Includes |
|---|---|---|
software-development-base | Node, Bun, Deno, Go, Python/uv | Clor, Claude, Codex, code-server, Playwright, gh/gh-dash, lazygit, Yazi, Neovim, API/network clients, quality/security scanners, logs/data/content tools |
software-development-rust | rustup Rust | clippy, rustfmt, rust-src, rust-analyzer, cargo-nextest, cargo-watch, cargo-edit, cargo-audit |
software-development-go | Go (from base) | gopls, delve, golangci-lint |
software-development-typescript | Node, Bun, Deno | eslint, prettier, tailwindcss |
software-development-python | uv-managed CPython | ruff, mypy, pyright, poetry, ipython |
software-development-zig | Zig | zls |
software-development-ruby | Ruby | bundler, rubocop, solargraph |
software-development-data | Base image with pinned CPython | JupyterLab, Marimo, Harlequin, pandas, Polars, PyArrow, DuckDB |
software-development-devops | Base image | Web/cloud deployment CLIs, Kubernetes, IaC, signing, and registry tools |
Each language image is FROM software-development-base, so the agents, OS
tooling, and the base toolchains are present in every image. The language
images override the managed entrypoint with an unprivileged Bash default,
making them suitable as custom space images.
The Data and DevOps images are intentionally pull-on-demand variants. Their services and terminal helpers only open local interactive interfaces: image startup never authenticates to a provider, selects a deployment target, or changes external infrastructure. Provider credentials remain runtime state, supplied interactively or through Clor secrets.
software-development-base includes the practical tools below. Exact versions
are pinned in images/base/Dockerfile.
gh),
gh-dash,
delta,
difftastic,
ESLint,
Prettier,
ShellCheck,
shfmt,
golangci-lint,
actionlint,
ast-grep,
typos,
Vale, and
lychee.tailscale and tailscaled, not
started by the image), ping, traceroute, mtr, netcat, socat, tcpdump, DNS
tools, and whois.docker_access = true, using private persistent state
mounted at /var/lib/docker. Package installation never starts the daemon.playwright install webkit.PostgreSQL, MariaDB (available under the mysql service name), and Redis are
preconfigured for local development. They bind only to loopback, use
passwordless development authentication, and do not start with the space.
sv start postgres
sv start mysql
sv start redis
sv status postgres mysql redis
sv stop postgres mysql redis
The first start initializes each database. PostgreSQL creates the user
superuser, MariaDB creates a passwordless local root account, and Redis does
not require a password. These defaults are for development inside a space,
not for publicly reachable or production databases.
The services follow the XDG base-directory layout:
| Content | Location |
|---|---|
| runit service definitions | ~/.config/runit/services |
| Server configuration | ~/.config/postgresql, ~/.config/mysql, ~/.config/redis |
| Database data | ~/.local/share/postgresql, ~/.local/share/mysql, ~/.local/share/redis |
| Rotated logs | ~/.local/state/<service>/log |
| Sockets and PID files | $XDG_RUNTIME_DIR/<service> |
Edit the native server config and restart the corresponding service to change
ports, authentication, persistence, or network exposure. To reset a database,
stop its service and remove only that service's directory under
~/.local/share; its next start initializes a fresh database.
Shell
53.7%
Dockerfile
30.2%
JavaScript
13.6%
Python
2.2%