Coiled Client Release Notes#

These release notes are related to updates to the Coiled Python package.


  • Better handling of rate limits in cluster state checks.


  • Add support for Prefect 3.


  • Add coiled cluster list CLI command.

  • Tweak error message when Cluster(software=...) is invalid software environment name format.


  • When using coiled run to start additional clusters (for example, when using @coiled.function in the script you’re running via coiled run), only re-use the software environment if the VM architecture matches.


  • By default, transmit and capture all Dask events to control-plane. Which events to send is determined by Dask config.


  • coiled run by default will no longer re-use VM from different coiled run invocations. To run multiple coiled run commands using the same VM, specify the same name with --name <name> for commands that you want to run on the same VM.


  • Show progress when using coiled run --file to upload files from local machine to cloud VM.

  • When adaptive scaling tries to scale down but the Dask scheduler does not retire some of the workers because they have data than cannot be moved, don’t forcibly stop the worker VMs.

  • Warn about log volume when any loggers are set to DEBUG in Dask config.

  • For CLI commands like coiled cluster ssh or coiled cluster stop that by default use the most recent cluster if no cluster is specified, this is now filtered by clusters that your user created, not the most recent cluster anyone made in your workspace.

  • Update the error message in coiled setup aws if you have insufficient permissions to include the permissions needed for setting up cross-account role assumption.


  • Fix bug in coiled setup gcp --enable-gar that prevented adding policy binding for Coiled to access private Google Artifact Registry repositories.


  • Fixed issue where starting a cluster with package sync enabled on Linux would cause package pins to be overly strict.


  • Automatically use private IP address for client <-> scheduler connection if you’ve configured Coiled to not assign public IP address to scheduler.


  • Allow configuring scheduler port using coiled.scheduler-port dask config setting.


  • For coiled notebook --sync and coiled run --sync, by default edit SSH config for SSH access (which is needed under the hood), rather than using SSH agent. If you want to use SSH agent instead, you can set this in your Dask config by running coiled config set coiled.use_ssh_agent True.


  • For coiled notebook --sync and coiled run --sync, add --sync-ignore <path> option; also, always ignore .venv directories when syncing.


  • When using coiled run --port ... to start VM with port(s) exposed, the server address is now shown in widget.

  • Error handling for creating the Coiled config file when DASK_CONFIG path is a file instead of directory.


  • Allow explicitly setting scopes when forwarding Google credentials when using For example, when using Google Earth Engine, you’d use scopes=[""] (or some longer list of desired scopes).

  • Add --workspace option to coiled env list and coiled env delete CLI.


  • Add support for getting credentials from keyring for private PyPI index.

  • Bug fix so that @coiled.function shows initial workers as 0 rather than -1 when n_workers isn’t specified.

  • Bug fix so that calling won’t affect any client(s) you’ve already gotten using cluster.get_client().


  • Explicitly calling cluster.scale(n) now turns off adaptive scaling (if adaptive was being used).

  • Fix bug that sometimes caused package sync to not sync local code in the working directory.


  • Forward long-lived Google credentials to your coiled run VM using the --forward-gcp-adc CLI flag.


  • Minimum and maximum number of workers for adaptive scaling can be specified using n_workers=[min, max] kwarg with coiled.Cluster and coiled.function. When you don’t want adaptive, use (e.g.) n_workers=10 as before to request exactly 10 workers.

  • Add allow_cross_zone kwarg to coiled.Cluster() to allow the cluster to have VMs in distinct zones. There’s a cost for cross-zone traffic (usually pennies per GB), so this is a bad choice for shuffle-heavy workloads, but can be a good choice for large embarrassingly parallel workloads.

  • Bug fix so that scaling down many workers at once does not result in error from very long request URL.

  • More accurate cloud cost estimate in coiled notebook and coiled run widgets.

  • Adjusted retry logic for when Coiled client HTTP requests get a server error response.


  • Minor refactoring for compatibility with pyright==1.1.362.

  • Add support for setting user-specified resource tags on notebooks with coiled notebook --tag key=value --tag another=value.


  • Fix the Credentials block for Prefect so that it’s compatible with pydantic>=2.


  • Fixed issue where @coiled.function(gpu=True) would raise an InstanceTypeError.


  • Re-raise any exception that happens inside code wrapped by coiled.performance_report as original exception, rather than generic Exception.


  • Added --env for coiled notebook start. These env vars are sent securely to the notebook server after boot and not stored on disk.


  • Added allow_ingress_from argument to @coiled.function.

  • Added --allow-ingress-from argument to coiled notebook start.

  • For @coiled.function, only open port 22 to the client IP address (not

  • Bug fix for running coiled setup azure in Windows Command Prompt (it doesn’t accept single quotation marks around JSON strings).


  • Added support to coiled run for string commands. For example, coiled run "python".

  • When requesting GPU cluster without specifying CPU or memory limits, we’ll default to small instance types (1 to 8 vCPUs).

  • Fixed an issue where pytorch would be missing on GPU clusters for some conda environments that did not include other packages that relied on pytorch.

  • The coiled client now explicitly sets PIP_REQUIRE_VIRTUALENV=false when calling pip wheel and pip config to avoid issues when PIP_REQUIRE_VIRTUALENV=true is set in the local environment.

  • All GPU package sync clusters will now automatically include pynvml in the environment to enable GPU performance metrics.


  • Added send_application_default_credentials(cluster) for sending Google Application Default Credentials to the cluster. These are longer-lived, revocable credentials, and can be automatically used by many libraries such as gcsfs. See Long-lived (revocable) Application Default Credentials for more details.

  • Package sync will now automatically fix common package issues that used to be warnings (e.g., using sklean instead of scikit-learn).

  • Added --root to coiled run for executing commands as root. For example, you could use coiled run --interactive bash --root --keepalive 5m to interactively install software with apt-get.

  • Added CoiledShippedCredentials for refreshable Google Cloud credentials using the temporary OAuth2 token shipped by Coiled to the cluster. See Personal OAuth2 tokens for more details.


  • Package sync will now automatically switch to the GPU-enabled torch conda package if you are using a GPU cluster.

  • Add --sync to coiled run for syncing files from local working directory to /scratch/synced on the cloud VM.

  • Bug fix so that @coiled.function(gpu=True) will add GPU to any additional workers (not just the first).


  • Another (better) fix for how environment variables such as OMP_NUM_THREADS are unset for CLI jobs.


  • When starting Spark, you can now specify memory limits relative to available VM memory. For example, cluster.get_spark(executor_memory_factor=0.9, worker_memory_factor=0.8).


  • coiled run --file will now report an error before cluster creation if the file does not exist.

  • Fixed typo in coiled setup aws --quotas output


  • Fix bug for coiled run --env and --tag introduced in 1.12.2.

  • Fix a bug for how environment variables such as OMP_NUM_THREADS are unset for notebooks and CLI jobs. They were being set to "", not they’re unset before user-code runs. Some libraries, such as torch, would give an error for "".

  • Fix common dependency conflict between aiobotocore and botocore.


  • Support for setting shm_size for Docker (sometimes needed for training on GPUs). For example, Cluster(..., backend_options={"docker_shm_size":"1gb"}).

  • Fix to coiled run [...] --detach so that VM will stay up while your code is running, and by default shut down after your code is no longer running. To keep VM running for re-use, specify a keepalive value, for example --keepalive 10m.


  • For the temporary AWS token shipped from client to cluster for data access, format the expiration datetime string to match format expected by some non-Python AWS libraries.

  • For coiled run path/to/ --file /another/dir/to/upload/, preserve path structure for the implicitly specified file and for explicitly specified directories outside current working directory.


  • Dropped support for Python 3.7.

  • We’re using the name “workspace” for what we used to call an “account”, so throughout the client we’re deprecating account= (in Python API) and --account (in CLI). You should use workspace= and --workspace instead (although account will continue to work for now).

  • Various improvements to make coiled setup azure more user-friendly.

  • Added kwarg for passing config when getting a SparkSession for Spark running on Coiled. For example, cluster.get_spark(spark_connect_config={"spark.scheduler.mode":"FAIR"}) to set the scheduling mode.

  • Home directory will now be abbreviated as ~ in the package sync widgets.


  • Allow user-specified custom subdomain for hostname. For regular coiled clusters, use dashboard_custom_subdomain='foo' to have the scheduler dashboard accessible at foo.<account slug> For coiled run, use --subdomain foo.

  • Fixed bug that prevented referencing cluster by name with coiled cluster logs or coiled cluster ssh


  • For coiled run and coiled notebook, default to opening port 22 on the VM only to the public IP address from where the command is run. This can be controlled with --allow-ssh-from (run) and --allow-sync-from (notebook). Coiled relies on SSH in the implementation of both run and notebook, and uses secure, unique-to-each-VM key pairs for SSH authentication. For normal Coiled clusters, you can also explicitly specify different SSH ingress CIDR using Cluster(allow_ssh_from=...).


  • Added support for authenticating with Coiled using a Prefect Block.

  • Fixed bugs in coiled setup aws CLI when setting up cross-account role assumption. Default region is now set as desired, and there’s now a check to ensure that permissions have propagated before Coiled tries to use them.


  • Added support in coiled run for uploading directories (as well as files) using --file <dir>

  • coiled setup aws CLI now uses cross-account role assumption for Coiled’s access to your AWS account. For existing users, we recommend transitioning to role assumption instead of using AWS access keys. (You can check which method you’re using under Cloud Provider Credentials.)


  • Fixed a bug where the notebook created using coiled notebook start --sync would not be able to see updated code in the local working directory (package sync was creating a wheel of the directory and that overrode the sync’ed python source files).

  • For coiled run --file foo/bar/file.txt, the directory structure will no longer be lost, so you can run (e.g.) coiled run cat foo/bar/file.txt --file foo/bar/file.txt (where previously you would have wanted coiled run cat file.txt --file foo/bar/file.txt).

  • Add --file argument to coiled prefect serve.


  • When using map() with @coiled.function-decorated function, you can now specify errors="skip" to map function calls that fail to None rather than raising an exception when you try to get result.

  • Fixed issue where package sync errors would get displayed multiple times.

  • Added local Python environment to package sync and notebook widgets, so you can now tell which Python environment is being synced.


  • For Google Cloud, if you specify cpu or memory but not both (e.g., Cluster(scheduler_cpu=4)) we’ll now only match this on “balanced” instance types. This was already the behavior for AWS. If you want to include memory and/or compute optimized instances, you can specify both cpu and memory, or explicitly specify "*" for one of these (e.g., Cluster(scheduler_cpu=4, scheduler_memory="*")).

  • Add support for setting user-specified resource tags with coiled run --tag key=value --tag another=value and @coiled.function(..., tags={"key": "value", "another": "value"}).

  • Bug fix so that when Coiled Function is running locally, e.g., @coiled.function(local=true), adaptive scaling will use a reasonable upper limit based on your local machine.


  • Add option to save generated bash script when using Azure setup. This feature is experimental, so please contact us before attempting to use it.


  • Bug fix so that use_scheduler_public_ip=False and use_dashboard_https=True can be used together.


  • Bug fix so that @coiled.function used from within coiled run or coiled prefect serve will re-use the software environment.


  • Bug fix for coiled notebook --sync that affects anyone not using their own Docker image.

  • Bug fix for package sync environments that will prevent wheels from being built out of site-packages directories.


  • Fix issue with using Coiled clusters from VSCode notebooks.


  • Add ability to use custom PyPI URLs with package sync. Just set the global.extra-index-url or global.index-url` settings by running pip config set 'global.extra-index-url' "YOUR_CUSTOM_URL".

  • Deprecated package_sync argument to Cluster, because it is always enabled by default. Use package_sync_only for restricting the list of packages. Specify container or software args to disable package sync.


  • Add ability to include local code in a manually created software environment via the --include-local-code flag for coiled env create and the include_local_code argument for coiled.create_software_environment.


  • Add ability to use editable packages with package sync from clusters or notebooks that start other clusters.


  • Notify users sooner when they have not configured a cloud provider and try to create a cluster.


  • By default, don’t include burstable AWS instance types (e.g., t3) in types you’ll get if you specify desired cores and memory. You can still explicitly request these instance types if desired.

  • For @coiled.function, use “spot_with_fallback” as the default spot_policy.

  • Declare extra optional dependencies for using coiled notebook to simplify installation by allowing pip install coiled[notebook].


  • Bug fix for package sync when starting Coiled cluster from inside Celery task.


  • Bug fix for shipping refreshable temporary AWS credentials when we’re unable to determine expiration of local AWS session credentials.


  • Change the default idle timeout for Coiled Notebooks from “24 hours” to “4 hours”.


  • Fix path issues when using coiled setup gcp on Windows


  • Package sync will now use httpx with HTTP/2 for uploading wheels to S3 to fix a crash when uploading files larger than 2GB.


  • coiled prefect serve is an easy way to run your Prefect flow on Coiled. See Prefect for more details.


  • coiled run now uses SSH under the hood, instead of relying on dask client. This adds support for --interactive and --detach, and means that local and remote versions of dask don’t need to match (this matters if you’re using --container). Note that fabric is now a client dependency.


  • This has no changes from version 0.9.39. We’re just updating the major version to 1 as an overdue acknowledgement of stability.


  • Reattaching to an existing cluster is now ~35% faster.

  • Improvements to how temporary AWS credentials are shipped from your local machine to the cloud. The upshot is that code running in the cloud will automatically pick up refreshed credentials as needed, rather than sometimes getting errors from trying to use expired credentials.


  • Fix to coiled setup gcp for when there’s an existing policy in GCP project with condition set.


  • Fixed package sync KeyError when handling old conda packages that do not have the “constrains” key specified in their metadata.


  • Package sync will now default to looking for conda packages on conda-forge if they were installed directly from an archive file (e.g. conda install /path/to/miniconda/pkgs/some_package.conda).

  • coiled run CLI now captures what code ran (unless configured not to with in your dask config).


  • Package sync will no longer make a coiled_local_* wheel out of your working directory if that directory is a git repository that you already installed via pip.


  • Coiled can now ship an OAuth2 token for Google data access if you have Google Application Default Credentials configured locally. See Personal OAuth2 tokens for more details.


  • Package sync will now upload software environments to the same region as the cluster, which can improve performance.


  • When you don’t specify instance types, for AWS the second-choice instance type will now be m5.xlarge (older generation non-burstable) rather than t3.xlarge (similar hardware to m5 but also burstable). The first-choice we request from AWS remains m6i.xlarge. If you want to use burstable instance types, you can ask for them explicitly like this: coiled.Cluster(worker_vm_types=["t3.xlarge", "t2.xlarge"]).

  • coiled run CLI and @coiled.function decorator will not set MKL_NUM_THREADS, OMP_NUM_THREADS, or OPENBLAS_NUM_THREADS to 1 by default (Dask sets these to 1 by default). Setting these to 1 makes sense when you have as many dask worker threads as you have cores, but for coiled run and @coiled.function you often want to run a single task that has access to the full resources of the machine.


  • Empty string environ values such as cluster = coiled.Cluster(environ={"OMP_NUM_THREADS": ""}) can now be used to disable default Dask values for MKL_NUM_THREADS, OMP_NUM_THREADS, or OPENBLAS_NUM_THREADS.


  • Fixed a bug that would create extra coiled_local_ wheels when package sync ran inside a virtualenv.


  • Restore Python 3.7 support.

  • Renamed to @coiled.function(...).


  • Renamed coiled.magic module to coiled.capture_environment

  • When shipping local AWS credentials to cluster (using temporary STS token), default region is set on the cluster to the default AWS region for local AWS sessions. If a different region is desired, you can explicitly set region in your code.


  • Increase the default time before adaptive shuts down workers from 1 minute to 2 minutes. This is implemented by switching the default wait_count in Cluster.adapt from 12 to 24, so that a worker must be suggested for shutdown during 24 consecutive 5-second intervals. Both the interval and wait_count can be controlled by users in Cluster.adapt. We expect this is a better experience for interactive uses of adaptive by avoiding scaledown while waiting for user input. If you want the old behavior, specify cluster.adapt(wait_count=12).


  • Resolve an issue that would cause Cluster to wait on workers that could never arrive.


  • Improvements to the package sync code that scans for all importable Python files, it now ignores more files that can be safely ignored.


  • Fixed a bug that was ignoring --account option on coiled login.


  • Fixed a bug with coiled setup aws.


  • coiled login lets you grant access with a single click from your Coiled web account; you no longer need to manually create then copy and paste an API token. If you do wish to log in locally with an existing token, use coiled login --token <token>.

  • Resolved a crash on Windows with package sync when dask_labextension is present in the environment.


  • If no cluster size is specified, adaptive scaling is now turned on, with a minimum of 4 workers and maximum of 20. However, recommend that users specify their cluster size and/or adaptive settings explicitly.

  • Package sync will now automatically create wheels from all importable Python packages in sys.path and your current working directory, even if you do not have a or pyproject.toml file.

  • Package sync will now issue warnings if the wheels being built are missing Python files that would have been importable locally.

  • Added a new decorator for running functions in the cloud. See the Serverless Functions documentation for more details.


  • Fixed a bug in coiled env list where the links to the software environment were incorrect.


  • Drop support for Python 3.7

  • When the package_sync_ignore kwarg for coiled.Cluster() is set, package sync strict mode is no longer automatically enabled even if the client and cluster architectures match.

  • coiled notebook start now generates a unique name by default instead of determining the name from the current working directory.

  • If the user has not configured any log handler (and is not in iPython/Jupyter), Coiled now attaches a StreamHandler to the logger named “COILED” and sets its level to INFO. This allows us to show important information (e.g. the cluster name) to users who have not set up info-level logging for themselves. Users configuring their own logging are unaffected. To disable this, pass use coiled.Cluster(..., configure_logging=False).

  • Some less important logging info has been changed from INFO to DEBUG.

  • coiled cluster ssh --dask lets you attach directly to shell inside container running Dask (rather than host machine).


  • coiled notebook start will now block your terminal by default (like jupyter lab does), use --no-block to not block.


  • Shorter tracebacks for some client errors, some of internal (mostly async-related) functions are no longer included.


  • Renamed coiled notebook up / coiled notebook down to coiled notebook start / coiled notebook stop.


  • Fixed an issue where coiled package-sync scan would output data in the wrong columns when reporting that a wheel could not be created of local importable Python code.


  • Add container keyword argument to coiled.Cluster() so that you can skip the step of explicitly creating a Coiled software environment when using a pre-made container image.

  • now takes cluster_id or scheduler_id. (This is minor breaking change to API since previous cluster_id kwarg was in fact interpreted as scheduler id.)

  • Fixed an issue resolving software environments when package name was different for conda and pypi.

  • coiled cluster ssh with no cluster specified now connects you to most recent cluster.


  • By default Coiled will now add GPU to scheduler if workers have GPU, as this is the recommended best practice. You can explicitly set scheduler_gpu=False if you want to override this default.

  • Package sync will now set CUDA version (used when installing packages from Conda) when syncing to a cluster with GPU.


  • Add arm keyword argument to coiled.Cluster() so you don’t need to explicitly specify instance types to make a cluster with ARM instances.



  • region is now an optional kwarg on Cluster(...), making it more convenient to run a cluster in a different region from your default region. Including region in backend_options is still supported.


  • There’s a new CLI utility for setting Dask config related to Coiled: coiled config set. For instance, you could run coiled config set account foo to set your default account to foo, or run coiled config set distributed.diagnostics.computations.nframes 3 to have Coiled analytics collect up to three frames of code.


  • create_software_environment can now set CUDA version when installing packages from Conda. See GPU for usage.


  • Added coiled setup gcp --quotas for checking and setting Google Cloud quotas relevant for using Coiled.


  • coiled setup now checks if you have authenticated your Coiled account, and if not, will run coiled login

  • Bug fixed for link to package sync build logs


  • For container-based software environments, fixed a bug introduced in 0.4.0 related to ENTRYPOINT. By default the ENTRYPOINT set in image will now be used (as it was in 0.3.x), you can set use_entrypoint if you want to override this default when creating software environment from a container image.


  • Software environment builds are now much faster. The new system is based on conda instead of building an entire Docker image and is only in effect if you are using coiled >= 0.4.0. You can continue to use the older system of creating a Docker image by pinning coiled<0.4.0. If you encounter issues please reach out to


  • When no software argument is passed, package sync will be used instead of a coiled-runtime

  • Minor improvements to coiled setup aws

  • Updated Automatic Package Synchronization documentation includes more detailed usage guidelines and a clearer overview of features


  • use_best_zone is now on by default It’s now guaranteed that your scheduler and workers will all be in the same zone, so this option won’t result in any interzone network traffic for your cluster.

  • coiled cluster better-logs (name and arguments subject to change) to pull logs from your cluster which uses your Coiled credentials.

  • The coiled package has fewer dependencies so you’ll get faster installs and fewer potential conflicts.

  • Package sync
    • Fixed windows and .egg format packages

    • Fixed python 3.7 compatibility

    • Use the anaconda defaults channel for python versions instead of conda-forge. This provides a wider number of versions while being slower to have new versions compared to conda-forge

    • Fixed a race condition that would sometimes cause hiccups creating a package sync environment


  • When specifying both the worker_cpu and worker_memory, or the scheduler_cpu and scheduler_memory arguments to Cluster, Coiled will now include AWS instance types from c5, c6i, and r6i families if they match your request. This is useful if you want high-cpu or high-memory instances, where the ratio of cpu cores to memory is different than the usual “balanced” instance types.

  • When you specify only cpu or memory (and not both), we’ll only match “balanced” instance types from t2, t3, m5 and m6i families on AWS. Previously we also included c5 instances as possibilities.


  • Added use_best_zone argument to Cluster. When you’re using this option, the cloud provider will pick the best availability zone (inside the region you’ve selected for your account). For spot or for harder-to-get instance types, this makes it much more likely that you’ll get all the workers you’ve requested. Your workers will all be in the same zone (to avoid cross-zone traffic costs), but one caveat is that it’s possible your scheduler will be in a different zone than your workers. This currently defaults to False but soon we plan to have this default to True.


  • Added coiled cluster logs for pulling cluster logs (see API)

  • Package sync now works for Windows

  • Improved documentation for known package sync limitations (see Package Sync Limitations)


  • Added shutdown() method on Cluster, useful for stopping a cluster when shutdown_on_close=False.

  • Added allow_ssh and allow_ingress_from kwargs on Cluster to make it easier to configure cluster firewall (see How to SSH into your cluster).

  • Added coiled cluster ssh <cluster name or id> for easily opening SSH connection to scheduler. This uses a keypair unique to each cluster (see How to SSH into your cluster).


A number of package sync-related fixes, including:
  • Fix detection of legacy egg-info metadata.

  • Improvements to detection of active package when multiple versions are installed.

  • Fix ignoring of packages

  • Fix detection of egg-linked packages


  • Dask configuration (dask.config) from your local client environment will be collected when you start a cluster and applied to the cluster. If you don’t want local dask config sent and applied to your cluster, there’s a kwarg you can use to disable this:

  • package_sync_strict, aimed at production use of package sync, enforces an identical environment on the cluster where non-strict mode allows slight differences in package versions between client and cluster. Strict mode works best when your client is running on Linux x86 so that the exact same package versions are available locally and on the cluster.

  • Bugfix for package sync sometimes using the wrong channel for a package.


  • Removed all Coiled hosted backend logic for the coiled.set_backend_options(), you must now provide credentials if you want to set your backend option with this command.

  • Removed the following parameters from coiled.set_backend_options(): use_coiled_defaults, customer_hosted, create_vpc.

  • Removed acr as a registry type since this registry is not supported.


  • We’ve added support custom tagging on your clusters (tags on AWS, labels on GCP). This makes it easier to use your cloud providing billing interface to separately track the cloud costs of different teams or workloads. See Tags for more information.

  • You can specify a larger disk size using worker_disk_size keyword argument when creating a cluster. For example, to start a cluster in which each worker has a 200GB disk (EBS on AWS, Persistent Disk on GCP), you’d call



  • (Coiled v2) When creating container software environments, we no longer default to overriding the ENTRYPOINT set on container image. If you’re using an image where Coiled should override the entrypoint, then you should set use_entrypoint=False kwarg when creating your software environment. For example, to create a software environment from a RAPIDS image (which use entrypoint to start a Jupyter server), you’d call

  • (Coiled v2) Fixed issue where creating a Cluster with both cpu/memory and vm_types arguments would prioritize the cpu/memory argument over vm_types. If trying to use both, the client will now raise an exception.


Released May 23rd, 2022

  • (Coiled v2) backend_options now lets you specify multiple CIDR blocks to open for ingress to your scheduler using the ingress keyword; see Configure Firewalls for more information.


Released May 17th, 20022

  • Relaxes the version constraint on click in the coiled package’s dependencies.


Released May 5th, 2022

This version switches to using v2 clusters (see Manage Hardware).


Released April 28, 2022

  • (Coiled v2) You can now use the worker_class argument when creating a Cluster to change the workers class of the workers created by Coiled.

  • (Coiled v2) You can now ask for AWS Spot instances When creating a cluster.

  • (Coiled v2) Various improvements to the Cluster widget.

  • The coiled package now supports Python 3.10. Note that Python 3.10 is not recommended if you ar using the coiled-runtime package which includes a Dask version (2022.1.0) that does not support Python 3.10.

  • The CLI command coiled env create used to create software environments, now accepts an --account option to specify the account to use for the creation of that software environment.


Released March 29, 2022

  • No user-facing changes


Released March 22, 2022

  • Added deprecation warning for cluster configurations. This feature will soon be deprecated


Released March 17, 2022

  • No user-facing changes included in this release.


Released March 9, 2022

  • Sometimes fetching account credentials would fail if the server responded with a brief error code. The code will now retry to fetch Coiled credentials for your user if the server responds with an error code.

  • The command coiled.list_instance_types() will now accept exact values or a range of values for cores, memory and gpus. You can specify a range by passing a list of two values, for example: coiled.list_instance_types(cores=[2, 8]).

  • When fetching instance types with the command coiled.list_instance_types() you can now specify memory values as you would when creating Clusters. For example: coiled.list_instance_types(memory=”8GiB”).


Released February 25, 2022

  • Release is the same as 0.0.66, this new version was released to address some versioning issues that the team found.


Released February 23, 2022

  • When creating a Cluster, if you specify an account with the keyword argument account= that is not valid, the request will fail earlier. The error message will also contain the account name that you specified.

  • Updated the error message that the command coiled.delete_software_environment() returns if the software environment doesn’t exist. The error message will now contain the name of the software environment and the account.


Released February 11, 2022

  • Fix misleading error message warning about not getting workers, when workers don’t connect to the scheduler once wait_for_workers completes.


Released February 10, 2022

  • This commit was stale and removed


Released February 9, 2022

  • Clusters created with the coiled.Cluster will now wait for 30% of the requested workers before returning the prompt back to the user.

  • The method coiled.Cluster() accepts a wait_for_workers keyword argument that allows you to increase/decrease the number of workers that need to be created before returning the prompt back. Additionally, the option to wait for workers can be toggled off.

  • Improved validation for instance types when creating a Cluster

  • Added a warning message informing users to run coiled.get_notifications(level="ERROR") when no workers have connected to the scheduler after 10 minutes.

  • If a Cluster can’t get any workers due to availability issues or any other reason, the coiled.Cluster() constructor will now return the last error message when Coiled tried to create the worker (you need to have wait_for_workers enabled).


Released January 26, 2022

  • The command coiled.list_instance_types now returns a list of all available instance types that your cloud provider allows.

  • You can now specify a minimum number of memory, cores and gpus when using the command coiled.list_instance_types().


Released January 12, 2022

  • Fixed issue with setting loop when using a Dask version higher than 2021.11.2


Released December 15, 2021

  • set_backend_options no longer accepts arguments related to Azure backends.

  • coiled.Cluster now accepts a use_scheduler_public_ip to configure the scheduler address the Coiled client connects to.


Released December 13, 2021

  • Pin Dask.distributed to a version prior to 2021.12.0 since this introduced an incompatibility with coiled.


Released December 03, 2021

  • Fix a bug that prevented users’ AWS credentials from being sent to clusters.


Released December 01, 2021

  • Add support for managing long lived API access tokens via the Coiled client.

  • Coiled client is tested and supported for Python version 3.7, 3.8 and 3.9. Coiled client raises an exception if you attempt to install in an environment with python versions below 3.7 or version 3.10

  • Removed functionality associated with Coiled Notebooks and Coiled Jobs since they have been deprecated.


Released November 22, 2021

  • Users can specify during cluster creation whether to use the public address or the private address of the scheduler to connect to the cluster.

  • Python client will raise an AccountFormatError if the account is not a combination of lowercase letters, numbers or hyphens.


Released November 11, 2021

  • Fixed issue that when using the command coiled login --token in the terminal, would show an error message saying that you have run out of credits.

  • Updated connection timeout, which should mitigate the timeout error that sometimes was ocurring when launching clusters.

  • You can now customize the firewall/security group that Coiled uses by adding a firewall dictionary and pass it to the backend_options keyword argument for the coiled.Cluster constructor.


Released October 17, 2021

  • You can now specify a list of instance types with the scheduler_vm_types/worker_vm_types when creating a cluster using the coiled.Cluster() constructor.

  • You can now select a GPU type by using the keyword argument gpu_type from the coiled.Cluster() constructor.

  • Added a new command coiled.list_instance_types() to the Coiled Client which returns a list of allowed instance types that you can use while creating your Cluster.

  • Added a new command coiled.list_gpu_types() to the Coiled Client which returns a list of allowed GPU types that you can use while creating your cluster.

  • You can now specify enable_public_http, enable_public_ssh and disable_public_ingress when using the coiled.set_backend_options() to have more control on the security group that Coiled created with AWS.

  • You can now use the Clusters private IP address when interacting with your cluster by using backend_options={"disable_public_ingress": True} when creating a cluster with the coiled.Cluster() constructor or when setting your backend with the command coiled.set_backend_options().

  • You can now remove port 22 from the AWS security group that Coiled creates in your account by setting the enable_public_ssh flag to False used with either the backend_options or when setting your backend with the command coiled.set_backend_options().


Released October 13, 2021

  • Environment variables sent to the Cluster with the environ= keyword argument are now converted to strings.

  • Added a depagination method so our list commands (for example coiled.list_cluster_configurations()) will now return all of the items instead of only the last 50.


Released September 16, 2021

  • coiled.set_backend_options() no longer supports the deprecated ECS backend.


Released September 1, 2021

  • Coiled clusters now support adaptive scaling. To enable it, create a cluster, then run cluster.adapt(maximum=max_number_of_workers).

  • Removed an unused region parameter from coiled.Cluster(). Cloud provider regions can be set using backend_options=.

  • coiled.create_notebook() now takes an optional account= parameter like the rest of the API. If there is a conflict between the account specified via the name and the account specified via tha account parameterm an error is raised.


Released August 24, 2021

  • Another aiobotocore-related fix.


Released August 20, 2021

  • Hotfix to support aiobotocore==1.4.0.


Released August 17, 2021

  • Hotfix to relax the dependency on typing_extensions in order to conflict less with third-party packages.


Released August 13, 2021

  • coiled.set_backend_options() has changed several parameter names, and it is now possible to specify a gcp zone. A VPC will now be created if credentials are provided.

  • 'vm_aws' is now the default backend for coiled.set_backend_options() in preparation for the deprecation of the 'ecs' backend.


Released August 2, 2021.

  • Hotfix to better-specify typing-extensions dependency.


Released July 28, 2021.

  • coiled.set_backend_options() now supports specifying a Google Artifact Registry for storing software environments.

  • Cluter protocols (currently either tls or wss) can now be configured using the dask configuration system under coiled.protocol.

  • Cluster scheduler and worker options can now be configured using the dask configuration system under coiled.scheduler-options and coiled.worker-options.


Released July 15, 2021.

  • Users with customer-hosted accounts on Google Cloud Platform can now provide a region (gcp_region_name) to coiled.set_backend_options().

  • Users can now specify a protocol when creating a Coiled cluster. By default, clusters communicate over TLS ("tls"), but in some restricted environments it can be useful to direct traffic through the Coiled web application over websockets ("wss").

  • The command line interface for creating a software environment (conda env create) now accepts an optional --conda-env-name parameter to specify the name of the conda environment into which packages will be installed (defaults to coiled).


Released June 29, 2021.

  • Hotfix to remove aiostream dependency


Released June 29, 2021.

  • coiled.set_backend_options() now supports configuring your Coiled account to run in your own Google Cloud Plaform account.


Released June 9, 2021.

  • New function coiled.set_backend_options() which allows users to set the options for an account (e.g., cloud provider, region, docker registry) from the Python client. Previously this was only available using the Coiled web application.

  • Fixed a bug in coiled.performance_report() that was preventing performance data from being captured.

  • Fixed an issue where an error building software environments could result in hanging client sessions.

  • coiled.Cluster(), coiled.start_job(), coiled.create_software_environment(), and coiled.create_notebook() can now take an optional environ dictionary as an argument, allowing users to pass in environment variables to clusters, jobs, software environments, and notebooks. These environment variables are not encrypted, and so should not be used to store credentials or other sensitive information.

  • coiled.list_core_usage() now shows additional information about how many credits your account has used for the current program period.

  • coiled.Cluster() no longer raises a warning if no AWS credentials can be found, since a given cluster may not want or need to use them.


Released May 18, 2021.

  • New functions coiled.performance_report() and coiled.list_performance_reports(). coiled.performance_report() is a context manager which captures cluster computation as a dask performance report, uploads it to Coiled, and hosts it online for later viewing.

  • New function coiled.get_notifications() returns notifications from resource creation steps in your chosen cloud provider. This can be useful in debugging when resources do not launch as intended.

  • coiled.create_software_environment() now has an optional argument force_rebuild, defaulting to False, which forces a rebuild of the software environment, even if one matching the given specification already exists. There is a new corresponding flag --force-rebuild in the coiled env create command line command.

  • New functions coiled.cluster_logs() and coiled.job_logs() return logs from Coiled clusters and Coiled jobs, respectively. Cloud.logs() has been renamed to Cloud.cluster_logs() to better distinguish it from Cloud.job_logs().

  • New function coiled.get_software_info() returns detailed information about a Coiled software environment specification.

  • has been renamed to coiled.diagnostics(), and now always returns JSON-formatted diagnostic information.

  • New function coiled.list_user_information() provides information about the currently logged-in user.

  • New function cloud.health_check() checks the user’s connection with the Coiled Cloud application.

  • coiled login --server <url-for-your-coiled-deployment> now works if there is a trailing slash in the URL.

  • coiled login --account <team_slug> sets the user’s specified account as a config value.

  • Previously, some coiled functions accepted account as an optional parameter, and others did not. Now the entire API consistently allows users to specify their account with an account= keyword argument. The priority order for choosing an account to make API requests is:

    1. Accounts specified via a resource name (where applicable), e.g. name = <account-name>/<software-environment-name>

    2. Accounts specified via the account= keyword argument

    3. Accounts specified in your Coiled configuration file (i.e. ~/.config/dask/coiled.yaml)

    4. The default account associated with your username (as determined by the token you use to log in)

  • Most of the resource creation functions in the coiled API (e.g., coiled.Cluster() or coiled.create_software_environment()) can take a lot of optional arguments. The order of these arguments in their function invocations is not important, and so they have been turned into keyword-only arguments.


Released on May 3, 2021.

  • Following dask/distributed, we have dropped support for Python 3.6

  • The arguments for coiled.Cluster() are now keyword-only.

  • coiled is now more fully type annotated, allowing for better type checking and editor integration.

  • coiled.Cloud.logs() now has account as an optional second parameter instead of a required first parameter to be more consistent with the rest of the API.

  • Fixed a bug where updating the software environment in a cluster configuration did not work.

  • Add a --private flag to the command line interface for coiled env create.

  • Fixed a bug where the rich console output from coiled did not work well with the Spyder editor.

  • Fixed a bug where the coiled.Cloud.close() did not properly clean up threads.


Released on March 25, 2021.

  • Improve connection error when creating a coiled.Cluster where the local and remote versions of distributed use different protocol versions

  • Return the name of newly started jobs for use in other API calls


Released on March 2, 2021.

  • Add core usage count interface

  • Make startup error more generic and hopefully less confusing

  • Filter clusters by descending order in coiled.list_clusters()

  • Add messages to commands and status bar to cluster creation

  • Don’t use coiled default if software environment doesn’t exist

  • Handle case when trying to create a cluster with a non-existent software environment

  • Set minimum click version

  • Several documentation updates


Released on February 5, 2021.

  • Add backend options docs

  • Fix CLI command install for python < 3.8

  • Add color to coiled login output

  • Fix bug with coiled.Cluster(account=...)

  • De-couple container registry from backends options


Released on January 29, 2021.

  • Flatten json object if error doesn’t have "message"

  • Enable all Django middleware to run async

  • Remove redundant test with flaky input mocking

  • Use util handle_api_exception to handle exceptions


Released on January 26, 2021.

  • Update AWS IAM docs

  • Add --retry/--no-retry option to coiled login

  • Update default conda env to coiled instead of base

  • Add worker_memory < "16 GiB" to GPU example

  • Fix small issues in docs and add note for users in teams

  • Do not add python via conda if container in software spec

  • Use new Status enum in distributed


Released on January 15, 2021.

  • Update post_build to run as POSIX shell

  • Fix errors due to software environment / account name capitalization mismatches

  • Automatically use local Python version when creating a pip-only software environment

  • Improved support for custom Docker registries

  • Several documentation updates


Released on December 22, 2020.

  • Add boto3 dependency


Released on December 22, 2020.

  • Add coiled.backend-options config value

  • Allow selecting which AWS credentials are used

  • Don’t initialize with account when listing cluster configurations

  • Add support for using custom Docker registries

  • Add coiled.cluster_cost_estimate

  • Several documentation updates


Released on November 30, 2020.

  • Update API to support generalized backend options

  • Enable coiled.inspect and coiled.install inside Jupyter


Released on November 24, 2020.

  • Add informative error message when AWS GPU capacity is low

  • Fix bug in software environment creation which caused conda packages to be uninstalled

  • Add notebook creation functionality and documentation

  • Generalize backend options

  • Add support for AWS Fargate spot instances


Released on November 9, 2020.

  • Expose private field in list/create/update

  • More docs for running in users’ AWS accounts

  • Add Dask-SQL example

  • Use examples account instead of coiled-examples

  • Add list of permissions for users AWS accounts

  • Add example to software environment usage section

  • Update conda_env_name description

  • Set default TOC level for sphinx theme


Released on October 9, 2020.

  • Fix AWS credentials error when running in Coiled notebooks


Released on October 8, 2020.

  • Handle AWS STS session credentials

  • Fix coiled depending on older aiobotocore

  • Only use proxied dashboard address in Jobs

  • Improve invalid fargate resources error message

  • Mention team accounts

  • Support AWS credentials to launch resources on other AWS accounts

  • Update FAQ with a note on notebooks and Azure support

  • Add GPU docs

  • Add jupyterlab example

  • Add community page

  • Add tabbed code snippets to doc landing page

  • Ensure job configuration description and software envs are updated


Released on September 22, 2020.

  • Handle redirecting from to

  • Add Prefect example

  • Update dashboards to go through our proxy

  • Add descriptions to notebooks

  • Update cluster documentation

  • Add Optuna example


Released on September 16, 2020.

  • Support overriding cluster configuration settings in coiled.Cluster

  • Don’t require region on cluster creation

  • Add links to OSS licenses

  • Add ability to upload files

  • Add access token for private repos


Released on September 4, 2020.

  • Fixed bug where specifying name in a conda spec would cause clusters to not be launched

  • Open external links in a separate browser tab in the docs

  • Explicitly set the number of worker threads to the number of CPUs requested if not otherwise specified

  • Improvements to Coiled login behavior

  • Update to using coiled/default as our default base image for software environments

  • Several documentation updates


Released on August 27, 2020.

  • Add AWS multi-region support

  • Log informative message when rebuilding a software environment Docker image

  • Remove link to Getting Started guide from coiled login output

  • Update distributed version pinning

  • Add support for running non-Dask code through Coiled Jobs

  • Several documentation updates


  • Add logs to web UI

  • Verify worker count during cluster creation

  • Raise more informative error when a solve conda spec is not available

  • Improve docker caching when building environments


  • Allow ‘target’ conda env in creating software environment (#664)

  • Start EC2 instances in the right subnets (#689)


  • Added support for installing pip packages with coiled install

  • Support Python 3.8 on Windows with explicit ProactorEventLoop

  • Updated default coiled.Cluster configuration to use the current Python version

  • Updated dependencies to include more flexible version checking in distributed

  • Don’t scale clusters that we’re re-connecting to

  • Added support for using custom worker and scheduler classes


Released August 8, 2020.

  • Add --token option to coiled login

  • Add post_build= option to coiled.create_software_environment

  • Add back support for Python 3.6

  • Remove extra newline from websocket output

  • Remove coiled upload from public API

  • Add coiled env CLI command group

  • Several documentation updates


Released July 31, 2020.

  • Move documentation page to

  • Added --version flag to coiled CLI

  • Raise an informative error when using an outdated version of the coiled Python API

  • Several documentation updates

  • Added coiled.Cluster.get_logs method

  • Added top-level coiled.config attribute

  • Use fully qualified coiled.Cluster name in the cluster interactive IPython repr


Released July 27, 2020.

  • Added getting started video to docs.

  • Added support GPU enabled workers.

  • Added new documentation page on configuring JupyterLab.

  • Added support for specifying pip, conda, and/or container inputs when creating software environments.

  • Remove account argument from coiled.delete_software_environment.

  • Added cost and feedback FAQs.


Released July 22, 2020.

  • Removed “cloud” namespace in configuration values.

  • Several documentation updates.

  • Added new security and privacy page to the docs.

  • Added coiled upload command for creating a Coiled software environment from a local conda environment.

  • Added tests for command line tools.


Released July 17, 2020.


Released July 16, 2020.

  • Update “Getting Started” documentation page.

  • Update coiled.create_software_environment to use name provided by conda= input, if provided.

  • Send AWS credentials when making a Cluster object.


Released July 14, 2020.

  • Switch to using full coiled Python namespace and rename CoiledCluster to coiled.Cluster

  • Raise informative error when attempting to create a cluster with a non-existent cluster configuration

  • Bump supported aiobotocore version to aiobotocore>=1.0.7

  • Add coiled install command to create conda software environments locally

  • Repeated calls to Cloud.create_cluster_configuration will now update an existing configuration


Released July 9, 2020.

  • Don’t shut down clusters if we didn’t create them

  • Slim down the outputs of list_software_environments and list_cluster_configurations


Released July 8, 2020.

  • Use websockets to create clusters due to long-running requests

  • Avoid excess endlines when printing out status in the CLI

  • Allow calling coiled env create repeatedly on the same environment


Released July 7, 2020.

  • Change default to coiled/default

  • Add coiled login CLI command

  • Use account namespaces everywhere, remove account= keyword

  • Allow the use of public environments and configurations


Released on July 1, 2020.

  • Update to use new API endpoint scheme

  • Adds conda env create command line interface


Released on June 29, 2020.

  • Adds Cloud.create_software_environment, Cloud.delete_software_environment, and Cloud.list_software_environments methods

  • Adds Cloud.create_cluster_configuration, Cloud.delete_cluster_configuration, and Cloud.list_cluster_configurations methods

  • Update Cloud object to use a token rather than a password

  • Changed name of package from coiled_cloud to coiled


Released on May 26, 2020.

  • Includes requirements.txt in


Released on May 26, 2020.

  • Includes versioneer in


Released on May 26, 2020.

  • Adds LICENSE to project


Released on May 21, 2020.


  • Renamed Cluster to CoiledCluster