hcl

HCL is the HashiCorp configuration language.

Github星跟踪图

HCL

GoDoc Build Status

HCL (HashiCorp Configuration Language) is a configuration language built
by HashiCorp. The goal of HCL is to build a structured configuration language
that is both human and machine friendly for use with command-line tools, but
specifically targeted towards DevOps tools, servers, etc.

NOTE: This is major version 1 of HCL, which is now in maintenence mode only. We strongly recommend that new projects use HCL 2 instead. For more information, see
our version selection guide.

HCL is also fully JSON compatible. That is, JSON can be used as a completely
valid input to a system expecting HCL. This helps to make systems
interoperable with other systems.

HCL is heavily inspired by
libucl,
nginx configuration, and others similar.

Why?

A common question when viewing HCL is to ask the question: why not
JSON, YAML, etc.?

Prior to HCL, the tools we built at HashiCorp
used a variety of configuration languages from full programming languages
such as Ruby to complete data structure languages such as JSON. What we
learned is that some people wanted human-friendly configuration languages
and some people wanted machine-friendly languages.

JSON fits a nice balance in this, but is fairly verbose and most
importantly doesn't support comments. With YAML, we found that beginners
had a really hard time determining what the actual structure was, and
ended up guessing more often than not whether to use a hyphen, colon, etc.
in order to represent some configuration key.

Full programming languages such as Ruby enable complex behavior
a configuration language shouldn't usually allow, and also forces
people to learn some set of Ruby.

Because of this, we decided to create our own configuration language
that is JSON-compatible. Our configuration language (HCL) is designed
to be written and modified by humans. The API for HCL allows JSON
as an input so that it is also machine-friendly (machines can generate
JSON instead of trying to generate HCL).

Our goal with HCL is not to alienate other configuration languages.
It is instead to provide HCL as a specialized language for our tools,
and JSON as the interoperability layer.

Syntax

For a complete grammar, please see the parser itself. A high-level overview
of the syntax and grammar is listed here.

  • Single line comments start with # or //

  • Multi-line comments are wrapped in /* and */. Nested block comments
    are not allowed. A multi-line comment (also known as a block comment)
    terminates at the first */ found.

  • Values are assigned with the syntax key = value (whitespace doesn't
    matter). The value can be any primitive: a string, number, boolean,
    object, or list.

  • Strings are double-quoted and can contain any UTF-8 characters.
    Example: "Hello, World"

  • Multi-line strings start with <<EOF at the end of a line, and end
    with EOF on its own line (here documents).
    Any text may be used in place of EOF. Example:

<<FOO
hello
world
FOO
  • Numbers are assumed to be base 10. If you prefix a number with 0x,
    it is treated as a hexadecimal. If it is prefixed with 0, it is
    treated as an octal. Numbers can be in scientific notation: "1e10".

  • Boolean values: true, false

  • Arrays can be made by wrapping it in []. Example:
    ["foo", "bar", 42]. Arrays can contain primitives,
    other arrays, and objects. As an alternative, lists
    of objects can be created with repeated blocks, using
    this structure:

    service {
        key = "value"
    }
    
    service {
        key = "value"
    }
    

Objects and nested objects are created using the structure shown below:

variable "ami" {
    description = "the AMI to use"
}

This would be equivalent to the following json:

{
  "variable": {
      "ami": {
          "description": "the AMI to use"
        }
    }
}

Thanks

Thanks to:

  • @vstakhov - The original libucl parser
    and syntax that HCL was based off of.

  • @fatih - The rewritten HCL parser
    in pure Go (no goyacc) and support for a printer.

主要指标

概览
名称与所有者hashicorp/hcl
主编程语言Go
编程语言Makefile (语言数: 11)
平台
许可证Mozilla Public License 2.0
所有者活动
创建于2014-07-31 21:09:00
推送于2025-06-24 10:28:20
最后一次提交
发布数49
最新版本名称v2.20.2-nomad-1 (发布于 2025-06-20 12:45:38)
第一版名称v1.0.0 (发布于 2018-08-25 18:00:46)
用户参与
星数5.5k
关注者数352
派生数634
提交数1.5k
已启用问题?
问题数345
打开的问题数171
拉请求数281
打开的拉请求数54
关闭的拉请求数69
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?