v0.4.18
Signedpublished August 25, 2026What changed
Added
- A "Re-add" tab on the Containers page for workspace containers this host still has but the dashboard is not running. Two things land there: a workspace DevGrail still knows about whose container is bound to a Docker network that no longer exists, and a workspace container the database no longer describes at all. Nothing is re-added on its own — each one comes back only when you say so, and the tab tells you what re-adding will restore before you do. Re-adding a detached workspace rebinds it and starts it with its files, volume, ports and credentials untouched. Re-adding a container DevGrail has no record of rebuilds one from the container itself; the description, documentation, project, app subdomains and API-key grants lived only in the database and do not come back, and its SSH password is reset. The tab is always there, so it can answer "is anything missing?" rather than only appearing once something is. Administrators only, since re-adding decides who owns a workspace.
uninstall.sh --keep-workspacesremoves DevGrail without removing your work. Everything of DevGrail's own goes — the stack, the database, the certificates, the images and the config in/opt/devgrailand/etc/devgrail— while the workspace containers, their volumes, their networks and the image they run on stay where they are. It is the way to start an install over from scratch without losing the workspaces: re-runinstall.shand the Re-add tab offers them back with their files, volume and ports intact. What only ever lived in the database — names, descriptions, documentation, projects, app subdomains and API-key grants — comes back by restoring the backup the uninstall takes first, not by re-adding. An uninstall run without the flag now offers the same mode as a question when you decline the full wipe, and the report says up front what keeping the containers does and does not preserve.- Workspaces in this state now say so. A workspace whose network binding is broken is shown as "detached" instead of appearing to be an ordinary stopped one, and starting it explains what to do rather than reporting a Docker error that names a hexadecimal id and nothing else.
Fixed
- Uninstalling with your workspaces kept no longer leaves them unable to
start. A preserved workspace is bound to its Docker network by id, not by
name, so removing that network — which the uninstaller did even when it was
keeping every container — stranded it: reinstalling recreated a network with
the same name and a new id, and starting the workspace failed with
failed to set up container networking: network <id> not found. The per-workspace networks are now kept whenever the workspaces themselves are, and only--purge(which removes the containers anyway) removes them.
Container images
Installer files
Signature
ecdsa-p256-sha256key f1f1eaf642454d65
One signature covers every artifact above. It is made off this host, and neither this site nor the registry behind it can check it — that is the point, and it is why verifying it catches things a checksum from the same server cannot. How to verify it.
Verify devgrail-container (amd64)
curl -fsSL https://web-dev.trixibot.com/api/registry/releases/v0.4.18 -o release.json
# -j, not -r: -r appends a newline the signer never saw, and the check fails.
jq -j '.signature.payload' release.json > payload
jq -r '.signature.signature' release.json | base64 -d > payload.sig
openssl dgst -sha256 -verify devgrail-release.pem -signature payload.sig payload
# -> Verified OK
# The payload must name this release, so an older signed one cannot be replayed.
head -2 payload
# ...and it must name this exact file. -qxF: whole line, literal.
grep -qxF 'image devgrail-container 24 amd64 4657a309f66b799f8da65119896ed7953bbb700f0a9f8ef974cf0d45740ed0cf' payload && echo "digest is covered by the signature"The signed payload — shown for reading, not for verifying
Copy this from the manifest with jq -j, never from this page: the signature covers exact bytes, and rendering here drops the trailing newline the signer included.
devgrail-release-signature-v1
release v0.4.18
asset docker-compose.yml 25 25d99bfe1eb947d9f3277067aa9fa776fb3da3b8896e5fcb8737a73e2582dc31
asset install.sh 25 57a946382d304d2a1deb30cc7cf9ceb760f96bf78e190d7e7e13119518d397ac
asset traefik-dynamic-http.yml 24 e344c8efd13c7d84996e2ebfbc75dcee2d995d8538c8a245c89c0e44fad0089b
asset traefik-dynamic.yml 25 d18fa561b8eb7d53b015284e0246b2d05953bf281b65269c1fae3d6883530db6
asset uninstall.sh 25 de144d9c73c97ee5739d6fc03f37081426b12a96b6791c7159b5438463e63b94
image devgrail-container 24 amd64 4657a309f66b799f8da65119896ed7953bbb700f0a9f8ef974cf0d45740ed0cf
image devgrail-container 24 arm64 016f34061e0dabe08d72b8017ca02322e2b1f4e51f6d50ad04ff3b56d33ac283
image devgrail-server 29 amd64 88f694ea17fe081c4153aa353bd7dafafc0fa8b6387b58950fb69394aa50305c
image devgrail-server 29 arm64 da74f438c43b1299eacaf497462078d55a5e6ec7167bf25c85be241401a42ee3