Skip to content

Releases: dstackai/dstack

0.19.40

27 Nov 15:01
757f0b6

Choose a tag to compare

This release fixes a DB migration deadlock that could happen when upgrading multi-replica server with Postgres to 0.19.39.

What's changed

  • [Bug] Split last user/project migration to fix deadlock by @r4victor in #3330

Full changelog: 0.19.39...0.19.40

0.19.39

27 Nov 15:00
e76696c

Choose a tag to compare

This release includes several important bug fixes, performance improvements, and updated documentation.

Documentation

Contributing

External contributors can now build the dstack documentation locally!

Previously, this wasn’t possible because dstack relied on the premium MKDocs Material Insider theme. Since the maintainers of MKDocs Material recently made the full edition free, we've updated the repository accordingly.

To help contributors get started, we've added a new guide: contributing/DOCS.md.

We welcome and encourage community contributions - whether that's reporting issues or submitting pull requests.

/llms.txt

As more users rely on LLMs to interact with tools, we've added support for /llms.txt to help guide models using dstack.

You can now use:

These files help LLMs better understand how dstack works and enable them to generate more accurate commands, configurations, and answers.

AGENTS.md

We’ve also added AGENTS.md to help modern AI agents automatically understand how to interact with the repository and tooling.

Warning

Be sure to update to 0.19.40, which includes an additional important fix.

What's changed

Full changelog: 0.19.38...0.19.39

0.19.38

21 Nov 08:46
3b58cae

Choose a tag to compare

Gateways

Routers

dstack gateways now integrate with SGLang Model Gateway, enabling inference request routing with policies such as cache_aware, power_of_two, round_robin, and random. You can enable it by setting the router property in your gateway configuration to sglang and select any of the available routing policies.

Example configuration:

type: gateway
name: sglang-gateway

backend: aws
region: eu-west-1

domain: example.com
router:
  type: sglang
  policy: cache_aware

Read how the new router property works in the documentation.

Fleets

Run plan

Since 0.19.26 release, dstack has been provisioning instances according to configured fleets, but run plan offers didn’t reflect that — meaning you might not have seen the actual offers used for provisioning.

This has now been fixed, and the run plan shows offers that respect the configured fleets.

For example, you can create a fleet for provisioning spot GPU instances on AWS:

type: fleet
name: cloud-fleet
nodes: 0..
backends: [aws]
spot_policy: spot
resources: 
  gpu: 1..

The run plan for submitted runs now shows offers that match the fleet configuration:

✗ dstack apply                                                      
...
 #  BACKEND          RESOURCES                            INSTANCE TYPE  PRICE    
 1  aws (us-east-1)  cpu=4 mem=16GB disk=100GB T4:16GB:1  g4dn.xlarge    $0.526   
 2  aws (us-east-2)  cpu=4 mem=16GB disk=100GB T4:16GB:1  g4dn.xlarge    $0.526   
 3  aws (us-west-2)  cpu=4 mem=16GB disk=100GB T4:16GB:1  g4dn.xlarge    $0.526   
    ...                                                                           
 Shown 3 of 309 offers, $71.552max

What's changed

Full changelog: 0.19.37...0.19.38

0.19.37

13 Nov 11:40

Choose a tag to compare

CLI

dstack attach --logs --since

The dstack attach --logs command now supports a --since argument to show only the recent logs before following real-time logs. You can specify either a relative duration or an absolute timestamp:

# Show logs from a specific timestamp and follow real-time logs
> dstack attach my-task --logs --since 2025-11-05T08:54:15Z

# Show logs from the last 5 minutes and follow real-time logs
> dstack attach my-task --logs --since 5m

This is especially helpful for long-running services and trainings when you don't need to load the entire logs history.

Fleets

Placement groups for elastic fleets

Previously dstack set up interconnected clusters with placement groups only for fleets with static number of instances such as nodes: 8. Now instances provisioned in fleets with placement: cluster always use placement groups. So now you can use elastic fleets and get best connectivity:

type: fleet
name: cloud-fleet
placement: cluster
nodes: 0..

Important change: Multi-node tasks can now run only on fleets with placement: cluster.

Backends

Gateways on Kubernetes

Previously gateways support on Kubernetes was limited to managed Kubernetes with DNS-based load balancers such as EKS. Now the support is extended to IP-based load balancers such as GKE and Nebius' mk8s.

What's Changed

New Contributors

Full Changelog: 0.19.36...0.19.37

0.19.36

06 Nov 16:40
17cc2bd

Choose a tag to compare

CLI

dstack ps

The output of dstack ps has been revamped to include colored statuses and a more compact resource view. Full resource details are still available in dstack ps --verbose.

dstack-ps

dstack logs --since

The dstack logs command now supports a --since argument to show only recent logs. You can specify either a relative duration or an absolute timestamp:

# Show logs from a specific timestamp
> dstack logs logs-task --since 2025-11-05T08:54:15Z

# Show logs from the last 5 minutes
> dstack logs logs-task --since 5m

Kubernetes

Improved GPU allocation

The kubernetes backend now requests all available GPU types when scheduling jobs, instead of limiting to just the first available type. This enables more flexible scheduling in heterogeneous Kubernetes clusters with multiple GPU types.

Offers

Optional GPU requirements

When specifying GPU requirements with a lower bound of 0 (e.g., gpu: 0..8:24GB), dstack now includes non-GPU offers in addition to GPU instances. This allows for more flexible resource selection when GPU access is optional.

What's changed

New Contributors

Full Changelog: 0.19.35...0.19.36

0.19.35

30 Oct 09:40
c8c14cd

Choose a tag to compare

Runpod

Instant Clusters

dstack adds support for Runpod Instant Clusters enabling multi-node tasks on Runpod:

✗ dstack apply -f nccl-tests.dstack.yaml -b runpod

 Project          main                                    
 User             admin                                   
 Configuration    .dstack/confs/nccl-tests-simple.yaml    
 Type             task                                    
 Resources        cpu=2.. mem=8GB.. disk=100GB.. gpu:1..8 
 Spot policy      auto                                    
 Max price        -                                       
 Retry policy     -                                       
 Creation policy  reuse-or-create                         
 Idle duration    5m                                      
 Max duration     -                                       
 Reservation      -                                       

 #  BACKEND           RESOURCES                          INSTANCE TYPE     PRICE    
 1  runpod (US-KS-2)  cpu=128 mem=2008GB disk=100GB      NVIDIA A100-SXM…  $16.7…   
                      A100:80GB:8                                                   
 2  runpod (US-MO-1)  cpu=128 mem=2008GB disk=100GB      NVIDIA A100-SXM…  $16.7…   
                      A100:80GB:8                                                   
 3  runpod            cpu=160 mem=1504GB disk=100GB      NVIDIA H100 80G…  $25.8…   
    (CA-MTL-1)        H100:80GB:8                                                   
    ...                                                                             
 Shown 3 of 5 offers, $34.464max

Submit the run nccl-tests? [y/n]: 

Runpod offers clusters of 2 to 8 nodes with H200, B200, H100, and A100 GPUs and InfiniBand networking up to 3200 Gbps.

What's Changed

New Contributors

Full Changelog: 0.19.34...0.19.35

0.19.34

23 Oct 10:32
7c2db9d

Choose a tag to compare

UI

Scheduled runs

The Run details page now shows Schedule and Next time for scheduled runs.

Finished times

The Run and Job list and details pages now display Finished times.

Backends

GCP

GCP G4 instances with NVIDIA RTX PRO 6000 GPUs are now generally available:

> dstack offer -b gcp --gpu RTXPRO6000                                          

 #  BACKEND            RESOURCES                                        INSTANCE TYPE    PRICE      
 1  gcp (us-central1)  cpu=48 mem=180GB disk=100GB RTXPRO6000:96GB:1    g4-standard-48   $4.5001    
 2  gcp (us-central1)  cpu=96 mem=360GB disk=100GB RTXPRO6000:96GB:2    g4-standard-96   $9.0002    
 3  gcp (us-central1)  cpu=192 mem=720GB disk=100GB RTXPRO6000:96GB:4   g4-standard-192  $18.0003   
 4  gcp (us-central1)  cpu=384 mem=1440GB disk=100GB RTXPRO6000:96GB:8  g4-standard-384  $36.0006

Also, GCP A4 instances are supported via reservations.

Runs

SSH keys

dstack now uses server-managed user SSH keys when starting new runs. This allows users to attach to the run from different machines, since the SSH key is automatically replicated to all clients. User-supplied SSH keys are still used if specified explicitly.

Docs

Kubernetes

The Kubernetes backend docs now include a list of required permissions.

What's Changed

Full Changelog: 0.19.33...0.19.34

0.19.33

16 Oct 17:20
1c2a7bd

Choose a tag to compare

Kubernetes

AMD

The kubernetes backend now allows you to run workloads on AMD GPU-enabled Kubernetes clusters.

Screenshot 2025-10-10 at 17 36 50

UI

Dev environments

You can now configure and provision dev environments directly from the user interface.

create-dev-environment-2.mp4

Note

CLI version 0.19.33 or later is required to attach to runs created from the UI.

GCP

Reservations

You can now configure specifically-targeted GCP reservations in fleet configurations to leverage reserved compute capacity:

type: fleet
nodes: 4
placement: cluster
backends: [gcp]
reservation: my-reservation

For reservations shared between projects, use the full syntax:

type: fleet
nodes: 4
placement: cluster
backends: [gcp]
reservation: projects/my-proj/reservations/my-reservation

dstack will automatically locate the specified reservation, match offers to the reservation's properties, and provision instances within the reservation. If there are multiple reservations with the specified name, all of them will be considered for provisioning.

Note

Using reservations requires the compute.reservations.list permission in the project that owns the reservation.

G4 preview

If your GCP project has access to the preview G4 instance type, you can now try it out with dstack.

> dstack offer -b gcp --gpu RTXPRO6000

 #  BACKEND            RESOURCES                                      INSTANCE TYPE   PRICE
 1  gcp (us-central1)  cpu=48 mem=180GB disk=100GB RTXPRO6000:96GB:1  g4-standard-48  $0

To use G4, enable its preview in the backend settings.

projects:
- name: main
  backends:
  - type: gcp
    project_id: my-project
    creds:
      type: default
    preview_features: [g4]

Hot Aisle

The hotaisle backend now supports 8x MI300X instances too.

> dstack offer -b hotaisle --gpu 8:MI300X                         

 #  BACKEND                   RESOURCES                                       INSTANCE TYPE                      PRICE    
 1  hotaisle (us-michigan-1)  cpu=104 mem=1792GB disk=12288GB MI300X:192GB:8  8x MI300X 104x Xeon Platinum 8470  $15.92

Docker

Default image

The default Docker image now uses CUDA 12.8 (updated from 12.1).

What's changed

Full changelog: 0.19.32...0.19.33

0.19.32

09 Oct 11:23
58a6757

Choose a tag to compare

Fleets

Nodes

Maximum number of nodes

The fleet nodes.max property is now respected that allows limiting maximum number of instances allowed in a fleet. For example, to allow at most 10 instances in the fleet, you can do:

type: fleet
name: cloud-fleet
nodes: 0..10

A fleet will be considered for a run only if the run can fit into the fleet without violating nodes.max. If you don't need to enforce an upper limit, you can omit it:

type: fleet
name: cloud-fleet
nodes: 0..

Backends

Nebius

Tags

Nebius backend now supports backend and resource-level tags to tag cloud resources provisioned via dstack:

type: nebius
creds:
  type: service_account
  # ...
tags:
  team: my_team
  user: jake

Credentials file

It's also possible to configure the nebius backend using a credentials file generated by the nebius CLI:

nebius iam auth-public-key generate \
    --service-account-id <service account ID> \
    --output ~/.nebius/sa-credentials.json
projects:
- name: main
  backends:
  - type: nebius
    creds:
      type: service_account
      filename: ~/.nebius/sa-credentials.json

Hot Aisle

Hot Aisle backend now supports multi-GPU VMs such as 2xMI300X and 4xMI300X.

dstack apply -f .local/.dstack.yml --gpu amd:2
The working_dir is not set — using legacy default "/workflow". Future versions will default to the
image's working directory.

 #  BACKEND               RESOURCES                                 INSTANCE TYPE        PRICE
 1  hotaisle              cpu=26 mem=448GB disk=12288GB             2x MI300X 26x Xeon…  $3.98
    (us-michigan-1)       MI300X:192GB:2

What's changed

New contributors

Full changelog: 0.19.31...0.19.32

0.19.31

02 Oct 12:47
6201c2f

Choose a tag to compare

Kubernetes

The kubernetes backend introduces many significant improvements and has now graduated from alpha to beta. It is much more stable and can be reliably used on GPU clusters for all kinds of workloads, including distributed tasks.

Here's what changed:

  • Resource allocation now fully respects the user’s resources specification. Previously, it ignored certain aspects, especially the proper selection of GPU labels according to the specified gpu spec.
  • Distributed tasks now fully work on Kubernetes clusters with fast interconnect enabled. Previously, this caused many issues.
  • Added support privileged.

We’ve also published a dedicated guide on how to get started with dstack on Kubernetes, highlighting important nuances.

Warning

Be aware of breaking changes if you used the kubernetes backend before. The following properties in the Kubernetes backend configuration have been renamed:

  • networkingproxy_jump
  • ssh_hosthostname
  • ssh_portport

Additionally, the "proxy jump" pod and service names now include a dstack- prefix.

GCP

A4 spot instances with B200 GPUs

The gcp backend now supports A4 spot instances equipped with B200 GPUs. This includes provisioning both standalone A4 instances and A4 clusters with high-performance RoCE networking.

To use A4 clusters with high-performance networking, you must configure multiple VPCs in your backend settings (~/.dstack/server/config.yml):

projects:
- name: main
  backends:
  - type: gcp
    project_id: my-project
    creds:
      type: default
    vpc_name: my-vpc-0   # regular, 1 subnet
    extra_vpcs:
    - my-vpc-1   # regular, 1 subnet
    roce_vpcs:
    - my-vpc-mrdma   # RoCE profile, 8 subnets

Then, provision a cluster using a fleet configuration:

type: fleet

nodes: 2
placement: cluster

availability_zones: [us-west2-c]
backends: [gcp]

spot_policy: spot

resources:
  gpu: B200:8

Each instance in the cluster will have 10 network interfaces: 1 regular interface in the main VPC, 1 regular interface in the extra VPC, and 8 RDMA interfaces in the RoCE VPC.

Note

Currently, the gcp backend only supports A4 spot instances. Support for other options, such as flex and calendar scheduling via Dynamic Workload Scheduler, is coming soon.

CLI

dstack project is now faster

The USER column in dstack project list is now shown only when the --verbose flag is used.
This significantly improves performance for users with many configured projects, reducing execution time from ~20 seconds to as little as 2 seconds in some cases.

What's changed

  • [Kubernetes] Request resources according to RequirementsSpec by @un-def in #3127
  • [GCP] Support A4 spot instances with the B200 GPU by @jvstme in #3100
  • [CLI] Move USER to dstack project list --verbose by @jvstme in #3134
  • [Kubernetes] Configure /dev/shm if requested by @un-def in #3135
  • [Backward incompatible] Rename properties in Kubernetes backend config by @un-def in #3137
  • Support GCP A4 clusters by @jvstme in #3142
  • Kubernetes: add multi-node support by @un-def in #3141
  • Fix duplicate server log messages by @jvstme in #3143
  • [Docs] Improve Kubernetes documentation by @peterschmidt85 in #3138

Full changelog: 0.19.30...0.19.31