Events
UI
In the UI, both the Project and User pages now have an Events tab, providing a convenient way to track events without manually using the global filters.
On the User page, the Events tab shows events where the current user is either the Actor (the one who initiated the operation) or the Target user (the user the command was applied to):
On the Project page, the Events tab shows all events within the current project.
CLI
dstack attach
The dstack attach command now waits until the run is provisioned (similar to dstack apply), shows live progress, and attaches only after the run reaches the running state.
In addition, if a task defines ports and any of those ports cannot be forwarded to localhost (for example, because the port is already in use), both dstack attach and dstack apply now show a clear error message with a -p suggestion:
Failed to attach: port 8000 is already in use. Use -p in dstack attach to override the local port mapping, e.g. -p 8001:8000.
Kubernetes
Resources and offers
The way the kubernetes backend fetches offers has been updated. Previously, the offers reflected the node resources. Now, dstack returns only the offers that satisfy the requested range at its minimum value; for example, if you request gpu: 0..8, dstack returns only offers with gpu: 0. This makes the displayed offers closer to how runs are actually provisioned by Kubernetes.
dstack offer -b kubernetes --gpu 0..8 will return only offers with gpu: 0.
To see offers with gpu: 1, you must pass gpu: 1 or gpu: 1.. to dstack offer or dstack apply.
Note
We understand that this differs from how offers are shown for other backends, but this is the first step in improving how the kubernetes backend does provisioning. Feedback is welcome.
Proxy jump
To proxy SSH traffic inside containers, the kubernetes backend creates a proxy jump pod on startup. This requires at least one cluster node to have an external IP and relies on Kubernetes to forward this traffic even if the proxy jump pod is not running on the node with the external IP.
However, not all Kubernetes services support this behavior; for example, Nebius's Managed Kubernetes requires the proxy jump pod to run on a node with an external IP. To support these cases, the kubernetes backend now double-checks that the proxy jump pod is created correctly.
Note
The most reliable approach in such environments is still to ensure that all cluster nodes have an external IP. Feedback is welcome.
Fleets
Instances in SSH fleets are no longer automatically terminated when they become unreachable over SSH. This prevents premature termination of SSH fleet instances due to transient SSH connectivity issues.
Docs
The reference pages for .dstack.yml configurations now include more information on supported types for every property, making them more useful.
What's changed
- Events UI #3309 by @olgenn in #3532
- [runner] Write termination_{reason,message} to the log by @un-def in #3550
- Disable autoflush by @r4victor in #3553
- Update SKILL.md with authentication details and OpenAI model usage instructions by @peterschmidt85 in #3554
- Update SKILL.md to standardize run name formatting and add permissions guardrail for
dstack attachby @peterschmidt85 in #3555 - Optimize create instance on AWS by @r4victor in #3556
- [UX] Wait for run provisioning in
dstack attach; pretty-print "port in use" error duringdstack applyanddstack attachby @peterschmidt85 in #3562 - Updated schema generation script to improve type handling and user-fr… by @peterschmidt85 in #3563
- Replaced
datacrunchwithverdaby @peterschmidt85 in #3564 - Kubernetes: improve offers by @un-def in #3548
- Streamline
InstanceModel.remote_connection_infohandling by @un-def in #3566 - Kubernetes: rework jump pod provisioning by @un-def in #3561
- Don't terminate unreachable SSH instances by @un-def in #3568
Full changelog: 0.20.8...0.20.9