Metadata-Version: 2.4
Name: dstack
Version: 0.19.23
Summary: dstack is an open-source orchestration engine for running AI workloads on any cloud or on-premises.
Project-URL: Homepage, https://dstack.ai
Project-URL: Source, https://github.com/dstackai/dstack
Project-URL: Documentation, https://dstack.ai/docs
Project-URL: Issues, https://github.com/dstackai/dstack/issues
Project-URL: Changelog, https://github.com/dstackai/dstack/releases
Project-URL: Discord, https://discord.gg/u8SmfwPpMd
Author-email: Andrey Cheptsov <andrey@dstack.ai>
License-File: LICENSE.md
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.9
Requires-Dist: apscheduler<4
Requires-Dist: argcomplete>=3.5.0
Requires-Dist: cachetools
Requires-Dist: cryptography
Requires-Dist: cursor
Requires-Dist: filelock
Requires-Dist: gitpython
Requires-Dist: gpuhunt==0.1.7
Requires-Dist: ignore-python>=0.2.0
Requires-Dist: jsonschema
Requires-Dist: orjson
Requires-Dist: packaging
Requires-Dist: paramiko>=3.2.0
Requires-Dist: psutil
Requires-Dist: pydantic-duality>=1.2.4
Requires-Dist: pydantic<2.0.0,>=1.10.10
Requires-Dist: python-dateutil
Requires-Dist: python-multipart>=0.0.16
Requires-Dist: pyyaml
Requires-Dist: requests
Requires-Dist: rich
Requires-Dist: rich-argparse
Requires-Dist: simple-term-menu
Requires-Dist: tqdm
Requires-Dist: typing-extensions>=4.0.0
Requires-Dist: websocket-client
Provides-Extra: all
Requires-Dist: aiocache; extra == 'all'
Requires-Dist: aiorwlock; extra == 'all'
Requires-Dist: aiosqlite; extra == 'all'
Requires-Dist: alembic-postgresql-enum; extra == 'all'
Requires-Dist: alembic>=1.10.2; extra == 'all'
Requires-Dist: asyncpg; extra == 'all'
Requires-Dist: azure-identity>=1.12.0; extra == 'all'
Requires-Dist: azure-mgmt-authorization>=3.0.0; extra == 'all'
Requires-Dist: azure-mgmt-compute>=29.1.0; extra == 'all'
Requires-Dist: azure-mgmt-msi>=7.0.0; extra == 'all'
Requires-Dist: azure-mgmt-network<28.0.0,>=23.0.0; extra == 'all'
Requires-Dist: azure-mgmt-resource>=22.0.0; extra == 'all'
Requires-Dist: azure-mgmt-subscription>=3.1.1; extra == 'all'
Requires-Dist: backports-entry-points-selectable; extra == 'all'
Requires-Dist: boto3>=1.38.13; extra == 'all'
Requires-Dist: botocore; extra == 'all'
Requires-Dist: cryptography>=44.0.3; extra == 'all'
Requires-Dist: datacrunch; extra == 'all'
Requires-Dist: docker>=6.0.0; extra == 'all'
Requires-Dist: fastapi; extra == 'all'
Requires-Dist: google-api-python-client>=2.80.0; extra == 'all'
Requires-Dist: google-auth>=2.3.0; extra == 'all'
Requires-Dist: google-cloud-billing>=1.11.0; extra == 'all'
Requires-Dist: google-cloud-compute>=1.5.0; extra == 'all'
Requires-Dist: google-cloud-logging>=2.0.0; extra == 'all'
Requires-Dist: google-cloud-storage>=2.0.0; extra == 'all'
Requires-Dist: google-cloud-tpu>=1.18.3; extra == 'all'
Requires-Dist: grpcio>=1.50; extra == 'all'
Requires-Dist: httpx; extra == 'all'
Requires-Dist: jinja2; extra == 'all'
Requires-Dist: kubernetes; extra == 'all'
Requires-Dist: nebius<0.3,>=0.2.40; (python_version >= '3.10') and extra == 'all'
Requires-Dist: oci>=2.150.0; extra == 'all'
Requires-Dist: prometheus-client; extra == 'all'
Requires-Dist: pyopenssl>=23.2.0; extra == 'all'
Requires-Dist: python-dxf==12.1.0; extra == 'all'
Requires-Dist: python-json-logger>=3.1.0; extra == 'all'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'all'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'all'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'all'
Requires-Dist: starlette>=0.26.0; extra == 'all'
Requires-Dist: uvicorn; extra == 'all'
Requires-Dist: uvicorn[standard]; extra == 'all'
Requires-Dist: watchfiles; extra == 'all'
Provides-Extra: aws
Requires-Dist: aiocache; extra == 'aws'
Requires-Dist: aiorwlock; extra == 'aws'
Requires-Dist: aiosqlite; extra == 'aws'
Requires-Dist: alembic-postgresql-enum; extra == 'aws'
Requires-Dist: alembic>=1.10.2; extra == 'aws'
Requires-Dist: asyncpg; extra == 'aws'
Requires-Dist: backports-entry-points-selectable; extra == 'aws'
Requires-Dist: boto3>=1.38.13; extra == 'aws'
Requires-Dist: botocore; extra == 'aws'
Requires-Dist: docker>=6.0.0; extra == 'aws'
Requires-Dist: fastapi; extra == 'aws'
Requires-Dist: grpcio>=1.50; extra == 'aws'
Requires-Dist: httpx; extra == 'aws'
Requires-Dist: jinja2; extra == 'aws'
Requires-Dist: prometheus-client; extra == 'aws'
Requires-Dist: python-dxf==12.1.0; extra == 'aws'
Requires-Dist: python-json-logger>=3.1.0; extra == 'aws'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'aws'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'aws'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'aws'
Requires-Dist: starlette>=0.26.0; extra == 'aws'
Requires-Dist: uvicorn[standard]; extra == 'aws'
Requires-Dist: watchfiles; extra == 'aws'
Provides-Extra: azure
Requires-Dist: aiocache; extra == 'azure'
Requires-Dist: aiorwlock; extra == 'azure'
Requires-Dist: aiosqlite; extra == 'azure'
Requires-Dist: alembic-postgresql-enum; extra == 'azure'
Requires-Dist: alembic>=1.10.2; extra == 'azure'
Requires-Dist: asyncpg; extra == 'azure'
Requires-Dist: azure-identity>=1.12.0; extra == 'azure'
Requires-Dist: azure-mgmt-authorization>=3.0.0; extra == 'azure'
Requires-Dist: azure-mgmt-compute>=29.1.0; extra == 'azure'
Requires-Dist: azure-mgmt-msi>=7.0.0; extra == 'azure'
Requires-Dist: azure-mgmt-network<28.0.0,>=23.0.0; extra == 'azure'
Requires-Dist: azure-mgmt-resource>=22.0.0; extra == 'azure'
Requires-Dist: azure-mgmt-subscription>=3.1.1; extra == 'azure'
Requires-Dist: backports-entry-points-selectable; extra == 'azure'
Requires-Dist: docker>=6.0.0; extra == 'azure'
Requires-Dist: fastapi; extra == 'azure'
Requires-Dist: grpcio>=1.50; extra == 'azure'
Requires-Dist: httpx; extra == 'azure'
Requires-Dist: jinja2; extra == 'azure'
Requires-Dist: prometheus-client; extra == 'azure'
Requires-Dist: python-dxf==12.1.0; extra == 'azure'
Requires-Dist: python-json-logger>=3.1.0; extra == 'azure'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'azure'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'azure'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'azure'
Requires-Dist: starlette>=0.26.0; extra == 'azure'
Requires-Dist: uvicorn[standard]; extra == 'azure'
Requires-Dist: watchfiles; extra == 'azure'
Provides-Extra: datacrunch
Requires-Dist: aiocache; extra == 'datacrunch'
Requires-Dist: aiorwlock; extra == 'datacrunch'
Requires-Dist: aiosqlite; extra == 'datacrunch'
Requires-Dist: alembic-postgresql-enum; extra == 'datacrunch'
Requires-Dist: alembic>=1.10.2; extra == 'datacrunch'
Requires-Dist: asyncpg; extra == 'datacrunch'
Requires-Dist: backports-entry-points-selectable; extra == 'datacrunch'
Requires-Dist: datacrunch; extra == 'datacrunch'
Requires-Dist: docker>=6.0.0; extra == 'datacrunch'
Requires-Dist: fastapi; extra == 'datacrunch'
Requires-Dist: grpcio>=1.50; extra == 'datacrunch'
Requires-Dist: httpx; extra == 'datacrunch'
Requires-Dist: jinja2; extra == 'datacrunch'
Requires-Dist: prometheus-client; extra == 'datacrunch'
Requires-Dist: python-dxf==12.1.0; extra == 'datacrunch'
Requires-Dist: python-json-logger>=3.1.0; extra == 'datacrunch'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'datacrunch'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'datacrunch'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'datacrunch'
Requires-Dist: starlette>=0.26.0; extra == 'datacrunch'
Requires-Dist: uvicorn[standard]; extra == 'datacrunch'
Requires-Dist: watchfiles; extra == 'datacrunch'
Provides-Extra: gateway
Requires-Dist: aiocache; extra == 'gateway'
Requires-Dist: aiorwlock; extra == 'gateway'
Requires-Dist: fastapi; extra == 'gateway'
Requires-Dist: httpx; extra == 'gateway'
Requires-Dist: jinja2; extra == 'gateway'
Requires-Dist: starlette>=0.26.0; extra == 'gateway'
Requires-Dist: uvicorn; extra == 'gateway'
Provides-Extra: gcp
Requires-Dist: aiocache; extra == 'gcp'
Requires-Dist: aiorwlock; extra == 'gcp'
Requires-Dist: aiosqlite; extra == 'gcp'
Requires-Dist: alembic-postgresql-enum; extra == 'gcp'
Requires-Dist: alembic>=1.10.2; extra == 'gcp'
Requires-Dist: asyncpg; extra == 'gcp'
Requires-Dist: backports-entry-points-selectable; extra == 'gcp'
Requires-Dist: docker>=6.0.0; extra == 'gcp'
Requires-Dist: fastapi; extra == 'gcp'
Requires-Dist: google-api-python-client>=2.80.0; extra == 'gcp'
Requires-Dist: google-auth>=2.3.0; extra == 'gcp'
Requires-Dist: google-cloud-billing>=1.11.0; extra == 'gcp'
Requires-Dist: google-cloud-compute>=1.5.0; extra == 'gcp'
Requires-Dist: google-cloud-logging>=2.0.0; extra == 'gcp'
Requires-Dist: google-cloud-storage>=2.0.0; extra == 'gcp'
Requires-Dist: google-cloud-tpu>=1.18.3; extra == 'gcp'
Requires-Dist: grpcio>=1.50; extra == 'gcp'
Requires-Dist: httpx; extra == 'gcp'
Requires-Dist: jinja2; extra == 'gcp'
Requires-Dist: prometheus-client; extra == 'gcp'
Requires-Dist: python-dxf==12.1.0; extra == 'gcp'
Requires-Dist: python-json-logger>=3.1.0; extra == 'gcp'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'gcp'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'gcp'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'gcp'
Requires-Dist: starlette>=0.26.0; extra == 'gcp'
Requires-Dist: uvicorn[standard]; extra == 'gcp'
Requires-Dist: watchfiles; extra == 'gcp'
Provides-Extra: kubernetes
Requires-Dist: aiocache; extra == 'kubernetes'
Requires-Dist: aiorwlock; extra == 'kubernetes'
Requires-Dist: aiosqlite; extra == 'kubernetes'
Requires-Dist: alembic-postgresql-enum; extra == 'kubernetes'
Requires-Dist: alembic>=1.10.2; extra == 'kubernetes'
Requires-Dist: asyncpg; extra == 'kubernetes'
Requires-Dist: backports-entry-points-selectable; extra == 'kubernetes'
Requires-Dist: docker>=6.0.0; extra == 'kubernetes'
Requires-Dist: fastapi; extra == 'kubernetes'
Requires-Dist: grpcio>=1.50; extra == 'kubernetes'
Requires-Dist: httpx; extra == 'kubernetes'
Requires-Dist: jinja2; extra == 'kubernetes'
Requires-Dist: kubernetes; extra == 'kubernetes'
Requires-Dist: prometheus-client; extra == 'kubernetes'
Requires-Dist: python-dxf==12.1.0; extra == 'kubernetes'
Requires-Dist: python-json-logger>=3.1.0; extra == 'kubernetes'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'kubernetes'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'kubernetes'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'kubernetes'
Requires-Dist: starlette>=0.26.0; extra == 'kubernetes'
Requires-Dist: uvicorn[standard]; extra == 'kubernetes'
Requires-Dist: watchfiles; extra == 'kubernetes'
Provides-Extra: lambda
Requires-Dist: aiocache; extra == 'lambda'
Requires-Dist: aiorwlock; extra == 'lambda'
Requires-Dist: aiosqlite; extra == 'lambda'
Requires-Dist: alembic-postgresql-enum; extra == 'lambda'
Requires-Dist: alembic>=1.10.2; extra == 'lambda'
Requires-Dist: asyncpg; extra == 'lambda'
Requires-Dist: backports-entry-points-selectable; extra == 'lambda'
Requires-Dist: boto3>=1.38.13; extra == 'lambda'
Requires-Dist: botocore; extra == 'lambda'
Requires-Dist: docker>=6.0.0; extra == 'lambda'
Requires-Dist: fastapi; extra == 'lambda'
Requires-Dist: grpcio>=1.50; extra == 'lambda'
Requires-Dist: httpx; extra == 'lambda'
Requires-Dist: jinja2; extra == 'lambda'
Requires-Dist: prometheus-client; extra == 'lambda'
Requires-Dist: python-dxf==12.1.0; extra == 'lambda'
Requires-Dist: python-json-logger>=3.1.0; extra == 'lambda'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'lambda'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'lambda'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'lambda'
Requires-Dist: starlette>=0.26.0; extra == 'lambda'
Requires-Dist: uvicorn[standard]; extra == 'lambda'
Requires-Dist: watchfiles; extra == 'lambda'
Provides-Extra: nebius
Requires-Dist: aiocache; extra == 'nebius'
Requires-Dist: aiorwlock; extra == 'nebius'
Requires-Dist: aiosqlite; extra == 'nebius'
Requires-Dist: alembic-postgresql-enum; extra == 'nebius'
Requires-Dist: alembic>=1.10.2; extra == 'nebius'
Requires-Dist: asyncpg; extra == 'nebius'
Requires-Dist: backports-entry-points-selectable; extra == 'nebius'
Requires-Dist: docker>=6.0.0; extra == 'nebius'
Requires-Dist: fastapi; extra == 'nebius'
Requires-Dist: grpcio>=1.50; extra == 'nebius'
Requires-Dist: httpx; extra == 'nebius'
Requires-Dist: jinja2; extra == 'nebius'
Requires-Dist: nebius<0.3,>=0.2.40; (python_version >= '3.10') and extra == 'nebius'
Requires-Dist: prometheus-client; extra == 'nebius'
Requires-Dist: python-dxf==12.1.0; extra == 'nebius'
Requires-Dist: python-json-logger>=3.1.0; extra == 'nebius'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'nebius'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'nebius'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'nebius'
Requires-Dist: starlette>=0.26.0; extra == 'nebius'
Requires-Dist: uvicorn[standard]; extra == 'nebius'
Requires-Dist: watchfiles; extra == 'nebius'
Provides-Extra: oci
Requires-Dist: aiocache; extra == 'oci'
Requires-Dist: aiorwlock; extra == 'oci'
Requires-Dist: aiosqlite; extra == 'oci'
Requires-Dist: alembic-postgresql-enum; extra == 'oci'
Requires-Dist: alembic>=1.10.2; extra == 'oci'
Requires-Dist: asyncpg; extra == 'oci'
Requires-Dist: backports-entry-points-selectable; extra == 'oci'
Requires-Dist: cryptography>=44.0.3; extra == 'oci'
Requires-Dist: docker>=6.0.0; extra == 'oci'
Requires-Dist: fastapi; extra == 'oci'
Requires-Dist: grpcio>=1.50; extra == 'oci'
Requires-Dist: httpx; extra == 'oci'
Requires-Dist: jinja2; extra == 'oci'
Requires-Dist: oci>=2.150.0; extra == 'oci'
Requires-Dist: prometheus-client; extra == 'oci'
Requires-Dist: pyopenssl>=23.2.0; extra == 'oci'
Requires-Dist: python-dxf==12.1.0; extra == 'oci'
Requires-Dist: python-json-logger>=3.1.0; extra == 'oci'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'oci'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'oci'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'oci'
Requires-Dist: starlette>=0.26.0; extra == 'oci'
Requires-Dist: uvicorn[standard]; extra == 'oci'
Requires-Dist: watchfiles; extra == 'oci'
Provides-Extra: server
Requires-Dist: aiocache; extra == 'server'
Requires-Dist: aiorwlock; extra == 'server'
Requires-Dist: aiosqlite; extra == 'server'
Requires-Dist: alembic-postgresql-enum; extra == 'server'
Requires-Dist: alembic>=1.10.2; extra == 'server'
Requires-Dist: asyncpg; extra == 'server'
Requires-Dist: backports-entry-points-selectable; extra == 'server'
Requires-Dist: docker>=6.0.0; extra == 'server'
Requires-Dist: fastapi; extra == 'server'
Requires-Dist: grpcio>=1.50; extra == 'server'
Requires-Dist: httpx; extra == 'server'
Requires-Dist: jinja2; extra == 'server'
Requires-Dist: prometheus-client; extra == 'server'
Requires-Dist: python-dxf==12.1.0; extra == 'server'
Requires-Dist: python-json-logger>=3.1.0; extra == 'server'
Requires-Dist: sentry-sdk[fastapi]>=2.27.0; extra == 'server'
Requires-Dist: sqlalchemy-utils>=0.40.0; extra == 'server'
Requires-Dist: sqlalchemy[asyncio]>=2.0.0; extra == 'server'
Requires-Dist: starlette>=0.26.0; extra == 'server'
Requires-Dist: uvicorn[standard]; extra == 'server'
Requires-Dist: watchfiles; extra == 'server'
Description-Content-Type: text/markdown

<div style="text-align: center;">
<h2>
  <a target="_blank" href="https://dstack.ai">
    <img alt="dstack" src="https://raw.githubusercontent.com/dstackai/dstack/master/docs/assets/images/dstack-logo.svg" width="350px"/>
  </a>
</h2>

[![Last commit](https://img.shields.io/github/last-commit/dstackai/dstack?style=flat-square)](https://github.com/dstackai/dstack/commits/)
[![PyPI - License](https://img.shields.io/pypi/l/dstack?style=flat-square&color=blue)](https://github.com/dstackai/dstack/blob/master/LICENSE.md)
[![Discord](https://img.shields.io/discord/1106906313969123368?style=flat-square)](https://discord.gg/u8SmfwPpMd)

</div>

`dstack` is an open-source container orchestrator that simplifies workload orchestration and drives GPU utilization for ML teams. It works with any GPU cloud, on-prem cluster, or accelerated hardware.

#### Accelerators

`dstack` supports `NVIDIA`, `AMD`, `Google TPU`, `Intel Gaudi`, and `Tenstorrent` accelerators out of the box.

## Latest news ✨
- [2025/07] [dstack 0.19.17: Secrets, Files, Rolling deployment](https://github.com/dstackai/dstack/releases/tag/0.19.17)
- [2025/06] [dstack 0.19.16: Docker in Docker, CloudRift](https://github.com/dstackai/dstack/releases/tag/0.19.16)
- [2025/06] [dstack 0.19.13: InfiniBand support in default images](https://github.com/dstackai/dstack/releases/tag/0.19.13)
- [2025/06] [dstack 0.19.12: Simplified use of MPI](https://github.com/dstackai/dstack/releases/tag/0.19.12)
- [2025/05] [dstack 0.19.10: Priorities](https://github.com/dstackai/dstack/releases/tag/0.19.10)
- [2025/05] [dstack 0.19.8: Nebius clusters, GH200 on Lambda](https://github.com/dstackai/dstack/releases/tag/0.19.8)
- [2025/04] [dstack 0.19.6: Tenstorrent, Plugins](https://github.com/dstackai/dstack/releases/tag/0.19.6)

## How does it work?

<img src="https://dstack.ai/static-assets/static-assets/images/dstack-architecture-diagram-v10.svg" width="750" />

### Installation

> Before using `dstack` through CLI or API, set up a `dstack` server. If you already have a running `dstack` server, you only need to [set up the CLI](#set-up-the-cli).

#### Set up the server

##### (Optional) Configure backends

To use `dstack` with cloud providers, configure backends
via the `~/.dstack/server/config.yml` file.

For more details on how to configure backends, check [Backends](https://dstack.ai/docs/concepts/backends).

> For using `dstack` with on-prem servers, create [SSH fleets](https://dstack.ai/docs/concepts/fleets#ssh) 
> once the server is up.

##### Start the server

You can install the server on Linux, macOS, and Windows (via WSL 2). It requires Git and
OpenSSH.

##### uv

```shell
$ uv tool install "dstack[all]" -U
```

##### pip

```shell
$ pip install "dstack[all]" -U
```

Once it's installed, go ahead and start the server.

```shell
$ dstack server
Applying ~/.dstack/server/config.yml...

The admin token is "bbae0f28-d3dd-4820-bf61-8f4bb40815da"
The server is running at http://127.0.0.1:3000/
```

> For more details on server configuration options, see the
[Server deployment](https://dstack.ai/docs/guides/server-deployment) guide.


<details><summary>Set up the CLI</summary>

#### Set up the CLI

Once the server is up, you can access it via the `dstack` CLI. 

The CLI can be installed on Linux, macOS, and Windows. It requires Git and OpenSSH.

##### uv

```shell
$ uv tool install dstack -U
```

##### pip

```shell
$ pip install dstack -U
```

To point the CLI to the `dstack` server, configure it
with the server address, user token, and project name:

```shell
$ dstack project add \
    --name main \
    --url http://127.0.0.1:3000 \
    --token bbae0f28-d3dd-4820-bf61-8f4bb40815da
    
Configuration is updated at ~/.dstack/config.yml
```

</details>

### Define configurations

`dstack` supports the following configurations:
   
* [Dev environments](https://dstack.ai/docs/dev-environments) &mdash; for interactive development using a desktop IDE
* [Tasks](https://dstack.ai/docs/tasks) &mdash; for scheduling jobs (incl. distributed jobs) or running web apps
* [Services](https://dstack.ai/docs/services) &mdash; for deployment of models and web apps (with auto-scaling and authorization)
* [Fleets](https://dstack.ai/docs/fleets) &mdash; for managing cloud and on-prem clusters
* [Volumes](https://dstack.ai/docs/concepts/volumes) &mdash; for managing persisted volumes
* [Gateways](https://dstack.ai/docs/concepts/gateways) &mdash; for configuring the ingress traffic and public endpoints

Configuration can be defined as YAML files within your repo.

### Apply configurations

Apply the configuration either via the `dstack apply` CLI command or through a programmatic API.

`dstack` automatically manages provisioning, job queuing, auto-scaling, networking, volumes, run failures,
out-of-capacity errors, port-forwarding, and more &mdash; across clouds and on-prem clusters.

## Useful links

For additional information, see the following links:

* [Docs](https://dstack.ai/docs)
* [Examples](https://dstack.ai/examples)
* [Discord](https://discord.gg/u8SmfwPpMd)

## Contributing

You're very welcome to contribute to `dstack`. 
Learn more about how to contribute to the project at [CONTRIBUTING.md](CONTRIBUTING.md).

## License

[Mozilla Public License 2.0](LICENSE.md)
