Optional code-server bundle
The separate bundles/code-server carrier supplies the official stable
code-server standalone distribution for Linux AMD64 and ARM64. It is optional:
the toolbox catalog, image pins, mount path, volume names and consumer
configuration remain unchanged. No browser service starts automatically.
The current standalone pin comes from this bundle’s own lock:
Published bundle
Version: 2026.10.12-b1.1
Index digest: sha256:07d3452052c1c5cb34cd6545b1975cd3dda589b9ee66710e5c765ea541ae49f1
Source: 9f25e0065885dce912658986bf26c178dddbaf36
Publication: run 38192754108, attempt 1
Pull this published carrier by its immutable index digest:
docker pull quay.io/bundledock/code-server@sha256:07d3452052c1c5cb34cd6545b1975cd3dda589b9ee66710e5c765ea541ae49f1
The source inventory below describes the current lock; this publication retains its exact source revision.
| Tool | Pinned version |
|---|---|
| code-server | 4.141.0 |
The initial 4.141.0 pin was released October 8, 2026, with VS Code 1.141.0;
see the official release
.
Each architecture has a pinned SHA-256. The builder verifies the entire
archive before reading members. The full payload retains bundled Node, native
modules, VS Code assets, built-in extensions, MIT license and all third-party
notices under /opt/bdock/code-server/payload.
This standalone release needs a glibc consumer with glibc >= 2.28 and GLIBCXX >= 3.4.21; use a Debian-based stock language image. The scratch carrier only initializes a volume. Alpine is used to run the static BundleDock builder, not to run code-server. There is no npm installation, source build, dependency patching or additional extension installation. See the upstream standalone requirements .
Build and initialize manually
Any image build requires explicit user approval of the operation and exact source revision. These commands are a manual recipe, not a publication or activation workflow:
make bundle-build BUNDLE=code-server
make bundle-smoke BUNDLE=code-server
make bundle-volume BUNDLE=code-server
The initializer resolves the image tag once and prints a volume named
bundledock-code-server-<full image ID>. The code-server image explicitly enables
its dedicated initializer profile. An arbitrary tools-init --source does not
enable symbolic links; both caller opt-in and matching validated manifest
metadata are required. Regular-file toolbox initialization keeps its default
behavior.
Mount the printed volume read-only at /opt/bdock/code-server, alongside
the separate toolbox mount. Add /opt/bdock/code-server/bin to the
consumer’s PATH if desired. The forwarding launcher preserves the upstream
launcher’s relative access to bundled Node and resources. The initializer
preserves twelve internal node_modules/.bin symbolic links with their literal
targets. It rejects links outside that directory, absolute/escaping targets,
chains, directory or missing targets, hardlinks, collisions and special files.
The manifest records link types and target text; checksums cover that text,
regular-file contents and the manifest. Initialization and repeat verification
check exact tree membership, link targets and regular-file modes/content.
Start an authenticated browser session
Set CODE_SERVER_VOLUME to the printed volume name. This disposable manual
example uses the existing stock Go consumer image with a writable temporary
home. It binds the host port only to loopback and retains password
authentication. The upstream service creates its password in the usual
$HOME/.config/code-server/config.yaml; read it inside the consumer without
committing it. All configuration, data, cache and extension writes stay outside
the read-only bundle.
docker run --rm -it \
--user "$(id -u):$(id -g)" \
--env HOME=/tmp/code-server-home \
--tmpfs /tmp:rw,mode=1777 \
--mount "type=volume,src=$CODE_SERVER_VOLUME,dst=/opt/bdock/code-server,readonly" \
--publish 127.0.0.1:8080:8080 \
--entrypoint /bin/sh \
mcr.microsoft.com/devcontainers/go:2-1.27-trixie \
-c 'mkdir -p "$HOME"; exec /opt/bdock/code-server/bin/code-server --bind-addr 0.0.0.0:8080 --auth password /tmp'
For a persistent consumer, use its existing writable home and workspace mounts. Do not put HOME, configuration, caches, user data or installed extensions in the bundle. Remote access, reverse proxies, credentials, automatic startup and consumer configuration changes require a separate explicit decision.
Update and verification boundary
Resolve only this bundle’s inputs with:
bdock tools upgrade --directory bundles/code-server
The Propose upgrades workflow with bundle=code-server runs daily at 06:50 UTC and offers
manual dry runs by default. It proposes only this lock and its generated source
inventory. Each bundle retains a separate proposal PR. The upgrade workflow never
builds or publishes images. Future stable archives must pass
the same structural profile; changed archive layouts fail closed until reviewed.
The Publish bundles workflow with bundle=code-server
(.github/workflows/publish-bundles.yml) supports the shared
automatic updater approval flow
: an actual human wstein merge authorizes frozen-lock publication after
successful exact merged-main CI.
Manual dispatch on default main with the exact full approved SHA remains
available. It uses the
existing REPOSITORY_URL Quay namespace and publishes to its separate
code-server repository, with distinct run/attempt artifacts. Each native AMD64
or ARM64 image stages only after its own dedicated read-only volume and
password-service smoke passes. Final version, stable and latest tag
promotion requires the entire native matrix to succeed; if one platform fails,
the other platform may already have staged. The publisher checks its own
workflow identity before promotion. For an initial publication, only an
authenticated HTTP 404 for this repository’s stable manifest permits an absent baseline;
authentication, transport and other baseline failures stay closed. No workflow
was dispatched as part of adding these source definitions.
The initial source implementation was checked with Go 1.27.2 on Linux ARM64. Both official 4.141.0 archives were downloaded privately, checksum verified, and inspected without extraction or execution: AMD64 has 7,153 entries, ARM64 has 7,157 entries, and each contains twelve relative symbolic links to direct regular files. Synthetic source tests cover the complete observed link set on both architectures and hostile archive/volume changes. This establishes source and structural evidence only. OCI builds, code-server execution, read-only consumer/browser smoke tests, vulnerability scans and native runtime coverage on both architectures remain pending explicit build/runtime approval. Go 1.25 is the minimum source toolchain; it was not separately tested here.
Successful approved publication also creates an annotated code-server/<immutable-version>
Git tag at the verified image source commit. Its annotation binds the immutable
image digest and workflow attempt; see source tags
for verification, conflicts and separately authorized backfills.