All releases

v0.4.48

Signedpublished September 24, 2026

What changed

  • The Git client can squash commits that have not been pushed. The Log tab marks unpushed commits with an arrow and offers to squash them all at once, or tick a commit to squash it with every newer one. You get to edit the combined message first. Staged and modified files are left as they are, and commits already on a remote branch are never rewritten.

Container images

registry build 35
amd64812 MB
sha256:9020aa8337f6b63afd7a8e54b07267cdc51a0ca901453f6b13a09b020042b230
Download
arm64678 MB
sha256:e6cc907ce93f056f8fc8b2f7b23cbbe3b50bad19da53f4a790ff8ef8cbfec239
Download
registry build 1
amd641.0 GB
sha256:68bf04883024d21245a452d69128bcc6604894a49b963c50cdf2df034e4cf409
Download
registry build 72
amd6446 MB
sha256:8ca381c40ef23d2ab269d042e0ba3ae1f436e65f60b3c79a4713a41bff784c14
Download
arm6445 MB
sha256:4b8539e9026915418c6bba9992e552536656583bd03daee0df466dfd77a650fa
Download

Installer files

docker-compose.yml22 KBsha256:f9e9dc571a02a77b699ef5f920aeb3e9e52afd1c6a32ed03310e271a7b5fa966
install.sh200 KBsha256:a9281d39a317586bddd3246db8f20578dc3f3c01064b9606da2b1cc937eb43b1
traefik-dynamic-http.yml6 KBsha256:09d88c6184e1b46b8036d79a075df5c058c8a010bce486537398b5d4b6c2936e
traefik-dynamic.yml6 KBsha256:54c85ea3c4bc1e73de71dac019e4242cdfe7320dcd1f1aa17a5d639e4dd325ac
uninstall.sh61 KBsha256:287ed1ff0ece38bd7da9d9b88d67923b48e75b934500900a0905477169a33151

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.48 -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 35 amd64 9020aa8337f6b63afd7a8e54b07267cdc51a0ca901453f6b13a09b020042b230' 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.48
asset docker-compose.yml 56 f9e9dc571a02a77b699ef5f920aeb3e9e52afd1c6a32ed03310e271a7b5fa966
asset install.sh 56 a9281d39a317586bddd3246db8f20578dc3f3c01064b9606da2b1cc937eb43b1
asset traefik-dynamic-http.yml 55 09d88c6184e1b46b8036d79a075df5c058c8a010bce486537398b5d4b6c2936e
asset traefik-dynamic.yml 56 54c85ea3c4bc1e73de71dac019e4242cdfe7320dcd1f1aa17a5d639e4dd325ac
asset uninstall.sh 56 287ed1ff0ece38bd7da9d9b88d67923b48e75b934500900a0905477169a33151
image devgrail-container 35 amd64 9020aa8337f6b63afd7a8e54b07267cdc51a0ca901453f6b13a09b020042b230
image devgrail-container 35 arm64 e6cc907ce93f056f8fc8b2f7b23cbbe3b50bad19da53f4a790ff8ef8cbfec239
image devgrail-desktop 1 amd64 68bf04883024d21245a452d69128bcc6604894a49b963c50cdf2df034e4cf409
image devgrail-server 72 amd64 8ca381c40ef23d2ab269d042e0ba3ae1f436e65f60b3c79a4713a41bff784c14
image devgrail-server 72 arm64 4b8539e9026915418c6bba9992e552536656583bd03daee0df466dfd77a650fa