v0.4.11
Signedpublished August 19, 2026What changed
Added
-
A house size for new workspaces, set once instead of per workspace. Settings has a Workspace defaults card holding a default CPU limit, a default memory limit and a process limit. Until now the first two did not exist: a workspace created without limits was created with none, so keeping a shared box from being swallowed by one runaway container meant remembering to pick limits every single time — including on the workspaces an agent creates over MCP, where nobody is there to remember. The defaults apply wherever a workspace is created from, and they are a default rather than a ceiling: a workspace that names its own limits keeps them.
Changing the default never resizes a workspace that already exists. Each one records the limits it was actually given at creation, so what you see on a workspace is what it is running with, and a later change to the house default cannot quietly re-size it on its next restart or rebuild.
The create form now labels its first CPU and memory option with the default your deployment will really apply — "Default (2)" rather than a flat "Unlimited" that would be untrue as soon as you set one. Picking "Unlimited" explicitly still does what it says.
-
The workspace process limit is adjustable. It caps how many processes one workspace may spawn, so a fork bomb or a runaway build cannot exhaust the host's process table and take every other workspace down with it. It has always been there at 4096 and stays there unless you change it; the reason to raise it is a genuinely build-heavy workspace hitting the ceiling, which previously needed a custom build. There is deliberately no "unlimited" setting — it is a guard on a shared host, not a sizing preference — and it applies to a workspace the next time it is created or recreated.
Container images
Installer files
Signature
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.
curl -fsSL https://web-dev.trixibot.com/api/registry/releases/v0.4.11 -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 19 amd64 f72e7322bc2dd531903ca69efe785c7971f6198243ff414a451dc68c0443178b' 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.11
asset docker-compose.yml 18 5b2a3db83132da5e0611dbfdb9993b03690ae4a13a27bed45f24eba1eb637e67
asset install.sh 18 6122e56cdb0b9f8dc11f6ec5f81644f0c5ed5c4e0da567d72e2ad9d8ab8527aa
asset traefik-dynamic-http.yml 17 e344c8efd13c7d84996e2ebfbc75dcee2d995d8538c8a245c89c0e44fad0089b
asset traefik-dynamic.yml 18 d18fa561b8eb7d53b015284e0246b2d05953bf281b65269c1fae3d6883530db6
asset uninstall.sh 18 d8dc586f38e0cf33eadc126d75b303c660e970e55028f60ad4e2872c40cbaa71
image devgrail-container 19 amd64 f72e7322bc2dd531903ca69efe785c7971f6198243ff414a451dc68c0443178b
image devgrail-container 19 arm64 6bff127dab39ba5b2339c8aa885248252c4e1d5e10408b988d3ca642a4153804
image devgrail-server 19 amd64 5136424f4a6cfa17dc93b61439bba20cad941bbdbff93aeb53a6bf8af5005ac5
image devgrail-server 19 arm64 3df1edbf83f754881f8c680bc505f128d57e357b8a90be9715240bac6f5749f9