v0.4.55
Signedpublished October 7, 2026What changed
-
More shared memory for development tools. Newly created workspace containers and containers recreated by snapshot restores have a 1 GiB
/dev/shm, up from Docker's 64 MiB default. Shared-memory usage still counts toward the workspace's memory limit. Existing containers keep their current size until recreated. -
Install apps and developer tools from desktop controls. Open Install apps & tools to search the catalog and install, update or uninstall VS Code, ChatGPT, Claude Desktop, Antigravity, ripgrep, GIMP and Inkscape. Downloads happen only when requested, from official signed repositories. The panel shows installed versions and progress; uninstall keeps settings and refuses to remove a package another installed package needs. Electron launchers use
--no-sandboxinside the workspace container. VS Code and Antigravity open directly from the terminal even when Docker shares a WSL2 kernel, without prompting to install the Windows app. Claude Desktop launchers use--disable-dev-shm-usageto prevent a white window and connection error caused by renderer crashes with Docker's default shared-memory limit. The panel scrolls to the top after actions to show confirmations and progress. -
Notifications from the desktop reach you. A notification from an app in the desktop add-on's desktop, such as
notify-sendat the end of a long build, now shows at the top right of the viewer, where you can click it or its buttons. Turn on Notifications › On this computer in the desktop's controls to get them as your computer's own notifications while the viewer is in the background; an installed desktop app also counts unseen ones on its icon. -
The browser tab names the window you are working in. The desktop viewer's tab, and an installed desktop app's window, now take the title of the window in front of the desktop, so you can tell desktops apart in the tab bar and the window switcher.
-
Everyday apps in the desktop. The desktop add-on now installs a text editor, Meld for comparing and merging files, an image viewer, an archive manager, screenshots, a task manager and a calculator, and PDFs open in Firefox. Upgrading an installed desktop adds them.
-
The desktop on a phone or tablet. A keyboard button at the bottom right of the viewer, or Show keyboard in its controls, brings up the on-screen keyboard to type into the desktop, with a row of the keys it lacks: Esc, Tab, Ctrl, Alt and the arrows. The desktop makes room above the keyboard, and its Help explains the touch gestures: tap to click, touch and hold to right-click, two fingers to scroll. On an iPhone, where a page cannot go full screen, the controls no longer offer it.
-
The desktop picks up where you left off. After the desktop restarts, is upgraded or its workspace restarts, its terminals reopen in the folders they were in, and Firefox reopens with its windows and tabs. The desktop saves what is open every minute and before it stops.
-
Help in the desktop add-on. A Help button in the desktop's controls opens a guide over the desktop: how copy and paste work between your computer and the desktop (and why a copy from the desktop sometimes waits for a click), dropping and downloading files, keyboard shortcuts the browser keeps, sound and the microphone, and what to know about a desktop everyone shares. The controls now also close when you click anywhere outside them.
-
Paste JPEG, WebP, GIF and other images into the desktop. Pasting an image used to work only for PNGs, such as screenshots. An image in any format your browser can show, such as an image file copied in Explorer or Finder, is now converted to PNG on the way in (an animation keeps its first frame).
-
Paste files into the desktop. Copy files on your computer and paste them into the desktop's file manager, or onto its desktop, and they land in the folder you pasted them in. Until now, pasting a copied file did nothing; only dragging it onto the desktop worked. A single image file still pastes as an image.
-
A progress bar for files copied into the desktop. Dropping or pasting a large file shows how much of it has arrived.
-
Find add-ons in the dashboard. A new Add-ons page in the sidebar lists what you can add to a workspace you already have, with a guide for each. The desktop add-on's guide gives you the install command for your DevGrail to copy into the workspace's terminal, and walks through adding its subdomain, signing in, its options, RDP, upgrading and removing it. Pick a workspace on the page to get links straight to its terminal and settings.
-
The desktop add-on moved on the DevGrail website. Its guide is now at
/addons/desktop, and the install command iscurl -fsSL …/addons/desktop/install.sh | bash. The upgrade command the desktop shows uses the new address once the add-on is installed or upgraded from it. -
Breaking: the desktop image and the dashboard's Desktop tab are gone. The desktop add-on replaces them: install it into any workspace, from the guide on the Add-ons page, and reach its desktop through an app subdomain. The installer no longer offers or downloads
devgrail-desktop, its--desktop-imageflag is gone, and Container images and Updates no longer list it. Before upgrading, move anything you want to keep out of workspaces created from the desktop image into a default workspace (add the desktop add-on there if it needs a desktop), then delete them. One left running keeps running, but its desktop no longer connects, and it cannot be recreated once the image is removed. After upgrading, remove the old image withdocker rmi $(docker images -q devgrail-desktop), and delete theDEVGRAIL_DESKTOP_IMAGEandDEVGRAIL_DESKTOP_IMAGE_DECLINEDlines from/opt/devgrail/deploy/.env, which nothing reads any more. -
Breaking: an agent can no longer read API keys and secrets it was never given. A script run puts the values of its
@[apikey:…]and@[secret:…]references into the workspace, where the agent can read them. Any API key holdingrun_scriptand write access to one workspace could therefore name any of your keys or secrets — including a full-access key with external access — and read it. A run an agent starts may now only use the agent's own key, a key with no more access than it (and without external access unless the agent's key has it), and secrets granted to its key. Anything else stops the run before it starts, with a message naming the key or secret. Runs you start from the dashboard and automations are unchanged. -
Breaking: secrets are granted to API keys. The key editor has a new Secrets section, with an "all my secrets" option like the ones for scripts and skills. Existing keys hold no secrets. If an agent runs scripts that use your secrets, or updates or deletes secrets over MCP, open its key under API keys and tick the secrets it should use. A secret an agent creates is granted to its key automatically. A secret whose value is a file in a workspace is usable through its grant alone, even by a key with no access to that workspace, so grant one only to agents that may read that file.
-
Breaking: an agent saving a script may only add references it could use itself. Creating, editing or cloning a script over MCP is refused when it would add a reference to a key or secret the agent's key may not use, so an agent cannot leave one for you to run. References a script already had do not block an edit.
-
Deleting a workspace shows that it is under way. The delete dialog closes as soon as you confirm, and removing a workspace can take a while. Its card on the Workspaces page now dims and its Delete button spins and reads "Deleting…" until the workspace is gone, instead of looking untouched.
-
Signing in to the desktop add-on works. In v0.4.54 the browser was told to leave out where a request came from, so the desktop turned away its own sign-in form with "This sign-in did not come from the desktop's own page". Once signed in, the picture and sound connections were turned away the same way, so the desktop kept showing "Desktop disconnected" and reconnecting. Run the install command again in the workspace to upgrade it.
-
Strangers can no longer keep you out of the desktop add-on. The desktop's sign-in allows thirty attempts a minute in all, to slow down password guessing from many addresses at once, and anyone who kept that limit used up could stop the owner from signing in. A browser that has signed in to the desktop before is now remembered and is not held up by that limit, only by its own five attempts a minute. Addresses on one IPv6 network now count as one address. Run the install command again in the workspace to upgrade.
-
Adding the Claude.ai connector can no longer be blocked from outside. DevGrail keeps at most 1,000 connector registrations, and registering needs no sign-in, since Claude.ai registers before you sign in. Anyone who kept registering could keep that table full, and adding a connector then failed with "temporarily unavailable". A new registration now pushes out the oldest one that never became a connection. Connectors in use are never touched.
-
Sign-in lockouts count an IPv6 network as one address. After five wrong passwords the dashboard holds back further sign-ins from that address for fifteen minutes. An IPv6 caller could previously move to the next address on its network and keep guessing; addresses on one IPv6 network (/64) now share one count. The connector registration limit counts them the same way.
Container images
Installer files
sha256:c51589709af161fc76120a7b4742772be478280107a97704144a8d998c25ec45sha256:f6dc82abc6b0624660adb45d6e234f1bc5b93f2e030e1cf39a976234f939efebsha256:e4ca9f0fae394663d8c642e905ada878c2a982dbc34ebc4fd41dfed0f1282017sha256:33c43480ebde81dc55bdee463f57e9e82d2e00401a381588debc4c9a50949b3dSignature
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.55 -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 40 amd64 b55400b6dcc79c0455fe36afebd150ee7ab66ef6195062b022ef2e27a6c61cee' 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.55
asset devgrail-desktop-files.tar.gz 2 c51589709af161fc76120a7b4742772be478280107a97704144a8d998c25ec45
asset devgrail-desktop-install.sh 2 f6dc82abc6b0624660adb45d6e234f1bc5b93f2e030e1cf39a976234f939efeb
asset devgrail-desktop-linux-amd64 2 e4ca9f0fae394663d8c642e905ada878c2a982dbc34ebc4fd41dfed0f1282017
asset devgrail-desktop-linux-arm64 2 33c43480ebde81dc55bdee463f57e9e82d2e00401a381588debc4c9a50949b3d
asset docker-compose.yml 63 dee267b0c918e08a48a703deb8d1e8d8126f90499e9cb1a660aec872a3d8480c
asset install.sh 63 9a13638477e5de0f2c8afa7376246c10652ae95522e3cb09e9deee0735af20e0
asset traefik-dynamic-http.yml 62 d857ec0f454d5e0e1593c8ff9105c8f7b2954c2ccf04caa791510bb56017c93b
asset traefik-dynamic.yml 63 ac2f53650064223ab682a8f3e3a8836928566e7c864fa155f4e9588656d4de33
asset uninstall.sh 63 281cc13781057416ce9d78e0fc48b6cf38310cdc0889c0281ef4a01e8b9487e4
image devgrail-container 40 amd64 b55400b6dcc79c0455fe36afebd150ee7ab66ef6195062b022ef2e27a6c61cee
image devgrail-container 40 arm64 8cbc1ec1ec161bb3c7c1ca43c37b073056f5a3dc32c4f3261cfd1ba66be5a4ea
image devgrail-server 79 amd64 4e84e5f1764d18535305e66efaa6441557cb755d22afef6c9d0d6a6b78c044e6
image devgrail-server 79 arm64 080f468b46847f5a23af0d3b07b6301ae812ccef10857894d8345c0959e8b693