Templates#

A template is a reusable blueprint for a deployment. It targets a specific application, cloud provider, and infrastructure-as-code engine, and bundles the infrastructure-as-code files, configuration presets, and deployment logic needed to stand that deployment up.

You turn a template running deployment by creating a project from it.

Installation and discovery#

Templates ship as Python packages, and must be installed into the same virtual environment as jupyter-deploy itself. We recommend a dedicated virtual environment per set of deployments (for example with uv or venv), so the CLI and its templates are isolated from other Python tooling.

At startup, jupyter-deploy discovers the installed templates through Python entry points — each template package registers itself under the jupyter_deploy.terraform_templates group.

You can install templates from several sources:

  • PyPI (recommended) — the published packages, with version pinning:

    pip install jupyter-deploy-tf-aws-ec2-base
    
    # pin a version
    pip install "jupyter-deploy-tf-aws-ec2-base==0.6.5"
    
  • GitHub — install a branch or tag directly from the repository, for pre-release or in-development templates.

  • Local wheel or source — a .whl file or a local checkout, useful when developing your own template.

Because the template is just an installed package, upgrading it (pip install -U ) picks up the maintainer’s changes. Note however that changes only reach an existing projecy when you carry it into its directory (see Projects).

Manifest#

Every template carries a manifest.yaml that declares its metadata and the provider commands backing the jd subcommands; for example which output holds the URL that jd open targets. The manifest lets the generic jd command surface drive template-specific infrastructure.

Official and default templates#

Refer to the Templates section to find a list of official templates, along with a feature comparison.

jd init selects a template from four coordinates — engine (-E), provider (-P), infrastructure (-I), and template name (-T). It defaults to terraform / aws / ec2 / base.

Running jd init <PROJECT-DIR> with no flags therefore selects the AWS Base Template, a single-instance JupyterLab deployment on Amazon EC2. Pass the flags to choose another, for example the EKS OIDC template:

jd init <PROJECT-DIR> -E terraform -P aws -I eks -T oidc