More languages
The languages without their own page, with their exact catalogue state as of 2026.35.22 (2026-08-25), verified against the live index. Three states exist, and they mean different things:
- Published — resolvable by name, pullable, scanned. Runs today.
- Declared — the image is listed in the signed payload but no tool is bound to it yet.
kapsl --info <name>reportsunknown tool; the name is reserved, the runtime is not runnable. - Examples only — a runnable example exists in the corpus (captured against the development catalogue), but the runtime is not in the signed catalogue at all.
| Language | State | Notes | Example |
|---|---|---|---|
| Perl 5.40/5.42/5.44 | Published | perl, perldoc, prove, cpan; lines @5.40/@5.42/@5.44 | perl-simple |
| Elixir | Examples only | mix/Hex workflow documented; not in the signed catalogue | elixir-simple, elixir-hex |
| Haskell (GHC) | Examples only | ghc not in the signed catalogue | haskell-simple |
| Java (OpenJDK) | Declared | openjdk-jdk/openjdk-jre images declared, no java/mvn tool bound | java-maven-simple |
| Scala (sbt) | Declared | sbt image declared, no tool bound | scala-sbt-simple |
| R (r-project) | Declared | r-project image declared, no R/Rscript tool bound; @renv provider documented | r-simple, r-renv |
| C# (dotnet) | Examples only | dotnet not in the signed catalogue | csharp-dotnet-simple |
| Lua | Examples only | lua/luarocks not in the signed catalogue; rockspecs must be passed explicitly (no auto-detectable canonical name) | lua-simple, lua-luarocks |
| Ansible | Declared | ansible image declared; the galaxy provider is built in and is how collections are installed into an environment | ansible-simple, ansible-galaxy |
Perl: the one that runs, and a live scan gate
Perl is the only "more language" fully published: lines 5.40.5, 5.42.3, 5.44.0 with perl, perldoc, prove, and cpan as separate tools.
kapsl perl -e 'print "$^V\n"'
perl v5.44.0
It is also a good demonstration of the scan gate, because the older lines currently carry CRITICAL findings in the index's own data (CVE-2026-8376, CVE-2026-13221 on the 5.40 and 5.42 images; 5.44 is clean). At or above the configured prompt severity, a run asks — and with no terminal to ask on, it fails closed:
kapsl [email protected] -e 'print "hi\n"'
ERROR Vulnerability scan requires review, but no terminal to ask on
On a TTY the same command shows the findings and offers continue/dismiss; in CI the choices are --skip-scan for a known-accepted state, or pinning the clean line. This is the security model working as designed — a vulnerability database is only as good as the gate that enforces it — but it is the kind of thing that reads as a bug on first encounter. See Scanning for the severities and the VEX path.
What "declared" and "examples only" buy you
Nothing you can run, today. The examples are still worth reading — they are captured, runnable-from-checkout transcripts of the intended shape (the elixir-hex example documents the @hex inline-package form; ansible-galaxy documents the two path gotchas the galaxy provider handles invisibly) — but a recipe that requires kapsl elixir or kapsl dotnet on a clean machine will fail with unknown tool until the corresponding publish lands. Check kapsl --info <name>; the index site shows declared images per project, and the catalogue's payload lists them.
JVM and friends
The JVM cluster — java-maven-simple, kotlin-gradle-simple, scala-sbt-simple, clojure-lein-simple — shares the compiled-language mechanics from the Rust and Go pages (measured ABI pin, build-tool capabilities, the toolchain-vs-built-binary split) on top of the declared OpenJDK images. None of the JVM tools are published yet; the examples run against the development catalogue.