Exo
  • About Exo
  • Getting Started
    • Quick Start
    • Installing Exo
      • Uninstall
  • Using Exo
    • Command Line Interface
    • Concepts
  • Manifests
    • exo.hcl
    • Migrating to Exo
      • Procfiles
      • Compose
  • Components
    • Overview
    • Unix
      • Process
    • Docker
      • Container
      • Volume
      • Network
  • Support
    • Github Issues
    • Slack Community
  • Resources
    • Videos
    • Github
    • Changelog
    • Legal
      • License
      • Terms of Service
      • Privacy Privacy
Powered by GitBook
On this page
  • What's in a manifest?
  • Manifest Location
  • Template exo.hcl
  • Blocks
  • Top-Level
  • environment Block
  • secrets Block
  • components Block
  • component Block
  • spec Block
  • Resources

Was this helpful?

  1. Manifests

exo.hcl

PreviousConceptsNextMigrating to Exo

Last updated 3 years ago

Was this helpful?

What's in a manifest?

An exo.hcl file contains project configuration and component definitions. It specifies how Exo orchestrates your development environment.

The .hcl file extension refers to the .

Manifest Location

Exo expects one exo.hcl at the root of each workspace. It is intended to be checked in to version control along with your project source.

Template exo.hcl

exo = "0.1"

components {

  process "web" {
    program = "./run-web-server"
  }

  # ...

}

Blocks

Top-Level

The top-level of an exo.hcl file forms the body of an implicit manifest block with the following attributes and sub-blocks.

Attribute
Description

exo

Specifies a manifest format version constraint. It has the form major.minor.

Required

Block
Description

Supplies environment variables used by components.

Defines components.

environment Block

The environment block supplies environment variables for use by component definitions in the project. For simple key/value string pairs, variables can be specified as attributes in the environment block. For more complex cases, including defining secrets, variables are specified by child blocks within the environment block. Later children blocks shadow earlier blocks, which shadow the environment block-level attributes.

Attribute
Description

/[a-z_][a-z0-9_]*/i

Individual environment variable key/value pair.

Block
Description

Specifies a secrets value to be merged in to the environment.

secrets Block

secrets {
  source = "https://example.com/secrets/vault"
}
Attribute
Description

source

URL of the secrets vault.

components Block

The components block acts as a container for individual component blocks. Each component has a unique name across the manifest.

Block
Description

Long form for defining a component.

/[a-z][a-z0-9_]*/

Component definiton macro.

component Block

Each component block specifies an individual component.

Label
Description

Name

Name of this component. Must match /[a-z_]([a-z0-9-]*[a-z0-9])/.

Attribute
Description

type

Type name for the component to be constructed.

Required

spec

String that defines the component. The format of a spec is dependent on the component's type.

spec Block

Alternative to the spec attribute. Specifies a component's configuration in HCL format, instead of as an arbitrary string. The contents of a spec block are entirely dependent on the type of a component.

Resources

Placement:

Placement:

Visit to create a secrets vault.

Placement:

Components may come in the form of or as macro-blocks named after the type of component. For details regarding specific component types and their respective syntax, see .

Placement:

Generally, it is less verbose to use type-specific component macros. For details regarding component types and their respective syntax, see .

Required if a is not provided.

Placement:

Hashicorp Configuration Language
https://secrets.deref.io/
Components
HCL Syntax Specification
top-level
environment
top-level
Components
component blocks
components
component
environment
components
secrets
component
spec Block