hash_id. You can optionally override specific values at creation time.
Templates are useful for:
- Standardization — ensure all team members launch instances with consistent configurations
- Convenience — avoid repeating the same image, env, and onstart parameters across commands
- Sharing — distribute configurations via template hash ID
Template Fields Reference
When creating or editing a template, the following fields can be configured:| Field | Type | CLI Flag | Description |
|---|---|---|---|
name | string | --name | Human-readable name for the template |
image | string | --image | Docker image path (e.g., vllm/vllm-openai) |
tag | string | --image_tag | Docker image tag. Defaults to latest |
desc | string | --desc | Short description of the template |
readme | string | --readme | Longer documentation/readme content |
env | string | --env | Environment variables and port mappings in Docker flag format (e.g., "-e VAR=val -p 8000:8000") |
onstart | string | --onstart-cmd | Shell commands to run when the instance starts |
runtype | string | --ssh / --jupyter | Launch mode: ssh, jupyter, or args (default). Set via flags |
ssh_direct | boolean | --ssh --direct | Enable direct SSH (set by combining --ssh and --direct) |
use_ssh | boolean | --ssh | Enable SSH access |
jup_direct | boolean | --jupyter --direct | Enable direct Jupyter (set by combining --jupyter and --direct) |
jupyter_dir | string | --jupyter-dir | Directory to launch Jupyter from |
use_jupyter_lab | boolean | --jupyter-lab | Use JupyterLab instead of Jupyter Notebook |
docker_login_repo | string | --login | Private Docker registry URL (first token of the login string) |
extra_filters | object | --search_params | Default machine search filters (parsed from query string) |
recommended_disk_space | number | --disk_space | Recommended disk space in GB |
private | boolean | --public | Private by default; pass --public to make it public |
href | string | --href | Link to Docker Hub or image documentation |
repo | string | --repo | Repository identifier |
Template Identifiers
Templates have two identifiers. Which one you use depends on the operation:| Identifier | Type | Used For |
|---|---|---|
id | integer | Deleting templates (--template-id) |
hash_id | string | Creating instances (--template_hash), editing templates (positional arg) |
Create a Template
Usevastai create template to define a reusable configuration:
id and hash_id — you’ll need them for different operations.
You can also attach default machine search filters using --search_params:
Search for Templates
Find templates usingvastai search templates with the same query syntax used by search offers:
Query Syntax
Quote the query string to prevent shell interpretation of
> and < characters.Searchable Fields
| Field | Type | Description |
|---|---|---|
creator_id | int | ID of the creator |
created_at | float | Time of initial creation (UTC epoch) |
count_created | int | Number of instances created (popularity) |
default_tag | string | Image default tag |
docker_login_repo | string | Image docker repository |
id | int | Template unique ID |
image | string | Image used for the template |
jup_direct | bool | Supports Jupyter direct |
hash_id | string | Unique hash ID |
name | string | Displayable name |
recent_create_date | float | Last time of instance creation (UTC epoch) |
recommended_disk_space | float | Minimum disk space required |
recommended | bool | On the recommended list |
ssh_direct | bool | Supports SSH direct |
tag | string | Image tag |
use_ssh | bool | Supports SSH (direct or proxy) |
Create an Instance from a Template
Pass--template_hash to create instance to use a template as the base configuration. You don’t need to specify --image or other fields already defined in the template:
Override Template Values
When you create an instance with both a template and additional flags, the following precedence rules apply:| Field Type | Behavior |
|---|---|
| Scalar fields (image, disk, runtype, etc.) | Request value overrides template value |
env (string) | Merged. Template values retained, request values appended. Conflicting keys use the request value |
extra_filters (dict) | Merged by key. Request values win on conflicts |
Example: Overriding the Image
Example: Merging Environment Variables
If your template defines:MODEL_ID=mistralai/Mistral-7B-v0.1— request overrides templateMAX_TOKENS=4096— retained from templateHF_TOKEN=hf_xxx— added from request
Edit a Template
Update an existing template usingvastai update template with the template’s hash_id as the positional argument. Include only the flags you want to change:
create template:
The
hash_id changes after editing because it is derived from the template’s content. Use the new hash_id returned in the output for subsequent operations.Delete a Template
Delete a template using either its numericid or its hash_id:
Deleting a template removes your relationship to it. It does not destroy the underlying template record.
Common Pitfalls
Using the wrong identifier for the operation
Using the wrong identifier for the operation
Templates have two identifiers and each is used in different contexts:
create instance --template_hashtakes the hash_id (string)update templatetakes the hash_id as a positional argumentdelete template --template-idtakes the numeric id (integer)
id where a hash_id is expected (or vice versa), the operation will fail.Environment variables aren't applying
Environment variables aren't applying
The Port mappings are also specified in this string using
--env flag expects Docker flag format as a single string, not key=value pairs:-p:Template image overridden unexpectedly
Template image overridden unexpectedly
When you specify both
--template_hash and --image, the --image flag overrides the template’s image. If you want to use the template’s image, omit the --image flag entirely.Volume didn't mount from template
Volume didn't mount from template
The
volume_info field stored in templates is a UI hint only. To actually mount a volume, pass the volume flags in the create instance command:hash_id changed after editing
hash_id changed after editing
This is expected behavior. The
hash_id is content-based, so any edit produces a new hash. Always capture the new hash_id from the update command output or search for your template again before referencing it.