v0.4.62
Signedpublished October 22, 2026What changed
-
Development agreement and privacy previews now use short notices stating that DevGrail is not live yet.
-
Agreements, accepted once and kept current. Someone who has to accept sees a short "Before you start" step for each agreement (an administrator the Operator Agreement and then the User Agreement, anyone else the User Agreement) and then continues where they were going. When an agreement changes, one banner gives the date to accept it by, 30 days after the new version arrives; a wording fix asks nobody. Until then dashboard, API, MCP and new terminal access wait; running workloads continue and your files can still be exported. Agreements & privacy lists each document with where you stand on it, and installation reporting is now on Administration. There is no setting to turn acceptance off.
-
Every installation sends a daily heartbeat, and says exactly what is in it. Once an administrator accepts the Operator Agreement, DevGrail sends that acceptance and a heartbeat to the site it was installed from, at each start and then daily: random IDs, a sequence number, the release, the operating system and the CPU architecture, and nothing about users, workspaces or usage. It cannot be turned off. The installer, the Operator Agreement step and the Agreements & privacy page, which every user can open, list each field, and Administration shows the last heartbeat exactly as it was sent. If the installation's identity cannot be opened (a
config.yamlthat does not belong to the database, or a damaged instance file), only the heartbeat stops: Administration says why, and everything else keeps working. When reporting needs an administrator (that, or the DevGrail site refusing this installation's credential), Administration explains what happened and every administrator gets a notification when it starts and when it ends. When the identity cannot be recovered (the site has revoked or rejected its credential, or the config that can read it is lost), an administrator can start a new installation identity there, with their password and by accepting the Operator Agreement again for it. -
The server downloads its legal documents itself. Releases no longer carry them. The installer links the three documents, says that installing, unattended included, does not accept them, and waits up to two minutes for the server to have them. If it cannot get them, the install ends with an error, and DevGrail keeps running and trying.
-
IPv6 visitors are seen as themselves. On a server with IPv6, DevGrail now serves IPv6 visitors directly, so a route's IP addresses can name them, Add my IP adds a browser's own IPv6 address, and the sign-in lockout counts each IPv6 visitor separately instead of all of them together. Before, every IPv6 visitor reached DevGrail from one internal address, so none could be named and one could lock the others out. The installer turns this on when the server has a public IPv6 address and route, and decides again on every run;
--ipv6=nokeeps it off. Add AAAA records for your domain and the wildcard pointing at the server's IPv6 address: the installer prints them, and warns about an AAAA record that points somewhere else, since Let's Encrypt would use it. Workspaces stay IPv4-only. -
The installer needs Docker Engine 28.0 and Docker Compose 2.33.1 or newer. A server with an older Docker is stopped before anything changes, with the versions it found. A server without Docker still gets the current one installed.
Container images
Installer files
sha256:44dc54d035e3262da2df136dce5e3aac0a1b53b4c31775ee0a2f3024d5d38308sha256:c2f31ebdcb1c09c7278f8d1073d6b99c3b50586922c9d1ca0fe8451e798e4187sha256:30bcfcba7ae4de2be3e1d57bfd80beabab62d8ac55cf8a32588a161f2f32f2dbsha256:de45b19a64243c3a5bb0e66fc9b021e6a3450e73ae10a4ba28935d643282a9dbSignature
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.62 -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 44 amd64 a9c29847101f3f366ee27210ce1d11ae29c93c3d4c5f59e3c48d1d1fb896547b' 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.62
asset devgrail-desktop-files.tar.gz 11 44dc54d035e3262da2df136dce5e3aac0a1b53b4c31775ee0a2f3024d5d38308
asset devgrail-desktop-install.sh 11 c2f31ebdcb1c09c7278f8d1073d6b99c3b50586922c9d1ca0fe8451e798e4187
asset devgrail-desktop-linux-amd64 11 30bcfcba7ae4de2be3e1d57bfd80beabab62d8ac55cf8a32588a161f2f32f2db
asset devgrail-desktop-linux-arm64 11 de45b19a64243c3a5bb0e66fc9b021e6a3450e73ae10a4ba28935d643282a9db
asset docker-compose.yml 72 4e331b5def82291a8aed5d78f1e22dd09301232c4e30e173128ec91939a17862
asset install.sh 72 24012cea73129aad443659c7773eecfb3bb92add8b7e8982b011b65a9b436e13
asset traefik-dynamic-http.yml 71 726f358caacf8625fcc3ab27ae3d8d811308029389bf01c6d93efacf8b60fe60
asset traefik-dynamic.yml 72 db7d4c5afe08ae9eb5f0c8227e9ac632776fff4b8929ba30484c36b85924054a
asset uninstall.sh 72 fd82c86b402c09d1b335bbba43cd8f34db382548eb804bc54e598c3bcf2e01a2
image devgrail-container 44 amd64 a9c29847101f3f366ee27210ce1d11ae29c93c3d4c5f59e3c48d1d1fb896547b
image devgrail-container 44 arm64 346a1d1fe703ca8ba138404ad48aa744593ffe7f7e5ef6ece946afc09a64d157
image devgrail-server 88 amd64 5d43d4adeb4d194a90d3a6772a23142770dfb0cc5098014e12d1a977ff464e71
image devgrail-server 88 arm64 b09a275104edd5ff48deb3ae62e0270545fb25a0bcf4f1b56f6f2d15a81678ad