June was mostly about polish — a lot of UI improvements, a few CLI and MCP fixes, and a rework of how we report an app’s status. Deployments also moved to fully async under the hood, which unlocks a few things we’ll talk about in the coming months.
We shipped a batch of dashboard improvements this month.
Registry management is now available end-to-end in the account section — no need to jump to the CLI to configure a private registry.
All app domains (public and internal) now show their routing status more prominently, and disabled routes are clearly marked as such. The same view is now available for the private domains for services too.
On the app details page, we surface the Tailscale status for both apps and services, and show whether an app is in lockdown mode - highly recommended).
Last but not least: configuration is now editable directly in the UI. Just remember to restart your app after making changes.
The MCP server relies on the CLI login. One of our customers ran into a bug where the logged-in status wasn’t always obvious, which sent the agent off hallucinating a bunch of things.
The new Runway CLI (which ships our MCP server) fixes that:
runway selfupdate
In a CI/CD context, redeploying an app with no changes no longer fails with “already up to date” so your workflows can progress.
Interactive runs still error out — that’s on purpose.
Deployments are now fully asynchronous. This change requires clients (such as the CLI) to poll instead of the server blocking:
runway selfupdate
Asynchronous deployments pave the way for new features (different deploy sources, different authentication mechanisms) we’ve been planning. Stay tuned.
App status should be transparent, so we reworked it — more granular, and a lot zippier. The following states are now supported:
| status | description |
|---|---|
| not deployed | new app |
| build pending | initial runway app deploy |
| building | via Buildpacks or buildkit |
| deploying | app rollout has started |
| running | the app is running (everyone’s happy) |
| restarting | the user restarted the app |
| crashing | the app is crashing (Runway will restart) |
| crashed | the app crashed (no more attempts are made) |
| stopped | the app was stopped |
We also had to pull a few experiments out of our API because AI is a nosy bugger and kept discovering values that are still feature-flagged and in ideation.
For example: it would try to apply values for memory and CPU (something we’re casually experimenting with) — while apparently forgetting the app upgrade tool exists. Thanks for that.
The amount of AI hallucination is generally wild. Once agents are set on a path forward, they’re often too stubborn to be redirected and while we try to accommodate what agents come up with where we can, but we obviously can’t please every silly idea. So: be careful out there.
That’s it for June. As always, give the new bits a spin and let us know what you think — and if you’re new here: Runway runs your apps and managed databases, hosted entirely in the EU.