Presets
Registry
Presets created on one machine can now be shared and reused on another via the dstack registry:
$ dstack preset push qwen38-27b-mi300x main/qwen38-27b-mi300x
OK
$ dstack preset pull main/qwen38-27b-mi300x
OK
$ dstack preset export main/qwen38-27b-mi300x -f qwen38.dstack.yml
OK
$ dstack apply -f qwen38.dstack.ymlPush and pull require project membership in a registry. Currently, the only available preset registry is dstack Sky.
Traces
Preset creation sessions now always write a real-time trace to ~/.dstack/presets/<id>/trace.jsonl, along with the agent prompt and final report — the --debug flag is no longer needed and has been removed.
Note
It's recommended to create presets using your own agent — either via a CLI such as Claude Code, or inside your IDE. Your agent helps you design the preset configuration, formulate hypotheses, and — most importantly — analyze the session's traces as well as the trial results (stored under ~/.dstack/presets/<id>/trials/<n>/trial.json), to decide what the next session can be and what instructions to give it via prompt.
To help your agent use dstack and presets, install the dstack and dstack-presets skills with npx skills add dstackai/dstack.
Services
Replica groups
Heterogeneous services now use the same groups layout as tasks, replacing the old replicas: [{count}] list:
groups:
- replicas: 1
commands: [...]Service commands can also reference other replicas by IP:
${{ groups[i].replicas[j].IP_ADDRESS }}Interpolation is only allowed for replica slots guaranteed to exist at start (e.g., with replicas: 2, slots 0 and 1 are valid; with replicas: 1..4, only slot 0 is). The old replicas layout still works and existing saved configurations keep using it.
Gateways
In-place update
The gateway property of a service can now be changed without stopping the service:
$ dstack apply -f my-service.dstack.yml
Active run my-service already exists. Detected changes that can be updated in-place:
- Configuration properties:
- gateway
Update the run? [y/n]: yThis also supports migrating between having a gateway and running without one (gateway: false). Migration may cause a brief interruption while traffic reroutes.
ALB gateways without a certificate
AWS gateways can now use an Application Load Balancer without requiring a certificate, via the new load_balancer property:
type: gateway
name: example-gateway
backend: aws
region: eu-west-1
domain: example.com
load_balancer:
type: alb
certificate: nullEvents
Gateway replica lifecycle (creation, status changes, service and replica registration/unregistration) is now tracked as events, filterable with --within-gateway:
$ dstack event --within-gateway my-gateway
[2026-08-25 22:56:14] [gateway-replica my-gateway-0] Gateway replica created. Status: SUBMITTED
[2026-08-25 22:57:58] [gateway-replica my-gateway-0] Gateway replica status changed PROVISIONING -> RUNNINGBackends
Seeweb
dstack now supports Seeweb as a backend.
$ dstack offer -b seeweb --max-offers 10
# BACKEND RESOURCES INSTANCE TYPE PRICE
1 seeweb (it-fr2) cpu=x86:4 mem=32GB disk=100GB gpu=L4:24GB:1 ECS1GPU6 $0.38
2 seeweb (it-fr2) cpu=x86:8 mem=32GB disk=500GB gpu=A6000:48GB:1 ECS1GPU2 $0.74
3 seeweb (it-fr2) cpu=x86:8 mem=64GB disk=200GB gpu=L4:24GB:2 ECS2GPU6 $0.76
4 seeweb (it-fr2) cpu=x86:8 mem=32GB disk=500GB gpu=L40S:48GB:1 ECS1GPU7 $0.85
5 seeweb (it-fr2) cpu=x86:16 mem=120GB disk=500GB gpu=RTXPRO6000:96GB:1 ECS1GPU12 $1.25
6 seeweb (it-fr2) cpu=x86:16 mem=64GB disk=1000GB gpu=A6000:48GB:2 ECS2GPU2 $1.48
7 seeweb (it-fr2) cpu=x86:16 mem=64GB disk=1000GB gpu=L40S:48GB:2 ECS2GPU7 $1.7
8 seeweb (it-fr2) cpu=x86:32 mem=256GB disk=750GB gpu=H200:141GB:1 ECS1GPU10 $2.6
9 seeweb (it-fr2) cpu=x86:32 mem=128GB disk=2000GB gpu=L40S:48GB:4 ECS3GPU7 $3.4
10 seeweb (it-fr2) cpu=x86:64 mem=512GB disk=1500GB gpu=H200:141GB:2 ECS2GPU10 $5.2Breaking changes
dstack preset get --jsonnow reports the served model repository asrepoinstead ofmodel, distinguishing it frombase(the model family) andservice.model(what the endpoint serves it as).dataset: randomis rejected in preset configurations; omitdatasetto request synthetic prompts instead.- The
--debugflag has been removed from preset creation; traces are now always written.
What's changed
- [Presets] Delete creations that never saved a preset by @peterschmidt85 in #4170
- Always show replica IP in
dstack gateway -vby @jvstme in #4172 - Document that idle_duration requires a nodes range by @r4victor in #4173
- Fix Run.logs() returning nothing for a finished run by @r4victor in #4176
- [Docs] Removed
namefromNode groupsexamples; plus few minor edits by @peterschmidt85 in #4178 - Don't add duplicate keys while provision SSH instance by @un-def in #4179
- [Blog] Presets: a toolkit for agent-based inference optimization by @peterschmidt85 in #4171
- [Blog] Tighten the presets post intro by @peterschmidt85 in #4180
- [Blog] Rewrite the presets post's compound learning section by @peterschmidt85 in #4181
- Make
GatewayReplicaModel.backend_idrequired by @jvstme in #4183 - Rename service replica groups to groups and support IP interpolation by @Bihan in #4177
- Add
GatewayReplicaModel.nameby @jvstme in #4184 - Fix
dstack apply --ssh-identityby @un-def in #4191 - Write preset traces by default and add the dstack-presets skill by @peterschmidt85 in #4192
- docs: fix two typos by @vaibhav8a in #4195
- [UI] Move SSH keys into the Settings tab on the user page by @peterschmidt85 in #4193
- [Docs] Service groups and Replica IP interpolation by @Bihan in #4185
- [shim] Commit task state changes via TaskStorage.Modify() by @un-def in #4200
- [Presets] Support for
dstack preset pushanddstack preset pullby @peterschmidt85 in #4194 - Keep the machine awake during preset creation by @r4victor in #4205
- [shim] Rework Run() into Start() and complete tasks in the background by @un-def in #4203
- [shim] Mark authorized_keys entries added by the shim by @un-def in #4206
- Add Seeweb GPU backend by @massaindustries in #4070
- Fix Seeweb test for gpuhunt 0.1.30 by @peterschmidt85 in #4207
- [Presets] Make a preset workload state the requested dataset by @peterschmidt85 in #4201
- Fix events client backward compatibility by @jvstme in #4209
- Drop AI Assistance Notice requirement by @r4victor in #4213
- Add gateway replica events by @jvstme in #4212
- Add compatibility guidance to
AGENTS.mdby @jvstme in #4210 - Fix case-sensitive fleet and run spec intersection by @r4victor in #4215
- [shim] Fix flaky Docker tests by @un-def in #4216
- [shim] Adjust log levels and messages by @un-def in #4217
- [shim] Fix GPU ownership of restored tasks by @un-def in #4218
- [shim] Persist task state to clean up tasks after a restart by @un-def in #4220
- Support AWS gateways with ALB without certificate by @jvstme in #4219
- Support in-place update for service
gatewayby @jvstme in #4221
New contributors
- @vaibhav8a made their first contribution in #4195
- @massaindustries made their first contribution in #4070
Full changelog: 0.21.2...0.21.3