﻿# Project templates

> An overview of project templates

:::div{.warning}
Project templates are in Public Preview. The feature is still evolving and standard SLAs don't apply. We don't recommend it for production workloads yet. It's available to Enterprise customers on Cloud and to self-hosted customers running Octopus 2026.2. We'd love your feedback as we work towards General Availability, [tell us what you think](https://roadmap.octopus.com/c/263-project-templates).
:::

## Overview

Project templates are reusable project blueprints that can be shared across multiple spaces in Octopus Deploy. Instead of manually configuring each new project from scratch, defining deployment steps and variables every time, you create a single template that any space can use as a starting point. This ensures teams follow the same standards and removes the risk of configuration drift.

To create or manage your project templates, navigate to Platform Hub. If you haven't set up your [Git repository](/docs/platform-hub#git-credentials-in-platform-hub), you must do so before creating a project template.

1. Navigate to **Project Templates** in Platform Hub.
2. Give the project template a **Name** and an optional **Description**.
3. Create your project template.

:::figure
![Creating a project template with a name and description](/docs/img/platform-hub/project-templates/project-templates-onboarding.png)
:::

After creating your template, Octopus adds the template's [folder and OCL files](#git-repository-structure) to your Git repository. If you've already created templates or are joining an existing team, you'll see the existing templates on the overview page.

:::figure
![The Project Templates overview page](/docs/img/platform-hub/project-templates/project-templates-list.png)
:::

You can now define the deployment process, parameters, and variables for the template.

## Deployment process

The deployment process defines the steps Octopus orchestrates when deploying a project created from this template. Each project template has a single deployment process, and you can use Octopus's built-in steps, step templates, community step templates, and process templates to define it.

Projects created from the template can't modify the deployment process. They can't add, remove, reorder, or disable steps. The only thing a project can configure is the parameter values explicitly exposed in the template, ensuring every project based on the template follows the same deployment process.

Some steps behave differently inside the project template editor. Instead of letting you set a value directly, they ask for parameters or variables. Parameters are required when a step requires a resource that Platform Hub can't define, such as a Worker Pool, and that resource must be supplied by the project. These fields accept parameters so projects can provide the right values for their context.

:::figure
![A step in a project template asking for a Worker Pool parameter](/docs/img/platform-hub/project-templates/project-templates-process-editor.png)
:::

:::div{.hint}
Unlike standard projects, project templates validate the deployment process when you publish, not when you commit. You can save an incomplete process and continue configuring parameters and variables before publishing. This will change once we add inline variable configuration to the deployment process editor.
:::

:::div{.hint}
If your deployment process includes a process template configured to auto-update on patch or minor versions, those updates flow through to templated projects automatically, even without you publishing a new version of the project template. This means two releases created on different days could use different versions of the process template, without anyone making any change to the project template or the project itself.

The project template process editor shows a warning callout when included process templates have received automatic updates since the template was last published. Use it to review the changes before publishing a new version.

We're interested in your [feedback](https://roadmap.octopus.com/c/263-project-templates) on whether this behavior meets your expectations.
:::

## Parameters

Parameters let you define the inputs a user must supply when they create a project from the template. They're the mechanism for making a template flexible. Rather than hardcoding values that differ between teams or spaces, you expose them as parameters.

:::div{.warning}
Project templates don't yet support parameter scoping or sensitive parameter default values. We're still shaping how parameters, variables, and scoping work together and expect this area to evolve. We'd love your [feedback](#feedback).
:::

For a full reference of supported parameter types and default values, see [Template parameters](/docs/platform-hub/templates/parameters).

To create a parameter, navigate to **Parameters** on your project template and add a new parameter.

:::figure
![The Parameters tab in a project template](/docs/img/platform-hub/project-templates/project-templates-parameters.png)
:::

## Variables

Variables in a project template work the same way as project variables in a standard Octopus project. Any variable you define is available to the deployment and can be selected in steps.

Unlike parameters, users can't change the variables defined in a template when creating a project from it. Use variables for values that must be consistent across every project, like accounts. If you need users to provide their own value, expose it as a parameter instead.

Variable values can reference parameters, letting you combine fixed template-level values with project-supplied inputs where needed.

### Variable types

Project template variables support the following types:

- **Text**: plain string values.
- **Sensitive**: encrypted values like passwords and API keys.
- **Account**: references to accounts defined in Platform Hub. Add the account in Platform Hub before using it in a template.
- **Certificate**: references to certificates defined in Platform Hub.

### Variable scoping

You can scope a project template variable to any combination of the following:

- Specific steps in the deployment process.
- Process template usages, when the template's deployment process includes one or more.
- Environment parameters, target tag parameters, or tenant tag parameters defined on the template. Whatever the project's parameter value resolves to determines the scope.

Scoping is fixed at the template level. The same scoping rules apply to every project created from the template.

:::figure
![The Variables tab in a project template](/docs/img/platform-hub/project-templates/project-templates-variables.png)
:::

## Project settings

Project templates let you set a few project-level defaults that flow through to every project created from the template. Configure these in **Settings** on the project template.

- **Multi-tenant Deployments**: choose whether projects created from the template require tenants, allow tenants, or run untenanted. Users can't change this on a project created from the template.
- **Project Persistence**: choose the preferred storage for projects created from the template, either in Octopus or backed by Git. The project creation flow defaults to your recommendation and lets users pick a different option if they need to.

:::div{.hint}
We're planning to add more template-level settings, including default lifecycle and channel configuration, once those features are available in project templates.
:::

## Git repository structure

Octopus stores each project template as a folder in the Platform Hub Git repository. The folder name is a slug derived from the template name. Each folder contains four [OCL](/docs/projects/version-control) files:

```text
project-templates/<template-slug>/
    deployment_process.ocl
    parameters.ocl
    template.ocl
    variables.ocl
```

- **`template.ocl`** contains the template settings
- **`deployment_process.ocl`** contains the deployment process steps
- **`parameters.ocl`** contains the parameters defined for the template
- **`variables.ocl`** contains the variables defined for the template

Octopus stores published versions, sensitive variables, and space sharing configurations in the database, not in the Git repository.

## Committing, publishing, and sharing

After you've configured your project template, see [Publishing and sharing templates](/docs/platform-hub/templates/publishing-and-sharing) for how to commit, publish, and share it.

## Using a project template

After you publish and share a template, users in a space can create a new project from it. For details on creating and managing templated projects, see [Templated projects](/docs/platform-hub/templates/project-templates/using-project-templates).

## Feedback

Project templates are in Public Preview and we're actively shaping how the feature works. If you run into something unexpected or have thoughts on how parameters, variables, scoping, or anything else should work, we'd love to hear from you. [Share your feedback](https://oc.to/feedback) to help us build this the right way.
