This guide is for students and faculty setting up a course or assignment that uses plcc-ng.
Does your course implement language semantics in Haskell?
-
No → use the standard image (smaller, faster to start):
{ "name": "My PLCC-NG Project", "image": "ghcr.io/ourplcc/devcontainers/plcc-ng:2" } -
Yes → use the full image (adds the Haskell toolchain):
{ "name": "My PLCC-NG Project", "image": "ghcr.io/ourplcc/devcontainers/plcc-ng-full:2" }
Save the snippet as .devcontainer/devcontainer.json in your project.
plcc-ng (3.1 GB) |
plcc-ng-full (12.4 GB) |
|
|---|---|---|
plcc-ng (all plcc-* commands) |
✅ | ✅ |
| Python 3.12 | ✅ | ✅ |
| Java 21 | ✅ | ✅ |
| JavaScript (Node LTS) | ✅ | ✅ |
| Haskell (GHC, cabal) | ❌ | ✅ |
Both images are published for amd64 (Codespaces) and arm64 (Apple Silicon).
| Tag | Meaning |
|---|---|
latest |
Most recent release |
2 |
Latest 2.x.x release |
2.1 |
Latest 2.1.x release |
2.1.3 |
Exact release (immutable) |
Recommendation for courses: pin the major tag (e.g. :2) for the
semester. You get plcc-ng updates and security patches automatically but are
protected from breaking changes mid-course.
The image's major tag tracks plcc-ng's major version: :2 carries plcc-ng
2.x, and :1 stays on plcc-ng 1.x. A course already running on :1 is not
affected by the 2.0 release and keeps receiving 1.x patches — switch to :2
between terms, not mid-semester.
If the prebuilt images don't fit (different Java version, extra tools, other base image), compose your own devcontainer with the plcc-ng feature. It installs plcc-ng and Python; add language features as needed:
{
"name": "My Custom PLCC-NG Project",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/ourplcc/features/plcc-ng:1": {},
"ghcr.io/devcontainers/features/java:1": { "version": "21" }
}
}The feature's version option pins a plcc-ng release from
PyPI, e.g.
{ "version": "2.0.2" }; the default is latest.
Note: the first Codespaces start of a feature-composed devcontainer builds the container from scratch (several minutes). The prebuilt images exist to avoid exactly that — prefer them when they fit.