blob: cce59ee2b07226e13fb1f11f55263ef75cec3c3b [file] [log] [blame] [view]
<!--
Copyright 2018 The CUE Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
# The CUE Data Constraint Language
_Configure, Unify, Execute_
CUE is an open source data constraint language which aims
to simplify tasks involving defining and using data.
It can be used for data templating, data validation, and even
defining scrips operating on data.
CUE is a constraint-based language.
Constraints act both as data templates and detailed type definitions.
Constraints provide a powerful yet simple alternative
to inheritance, a common source of complexity
with existing configuration languages.
Constraints also provide an expressive way to define the possible
values of data types, which in turn can be used for data validation
in various applications.
The CUE tooling also provides integrated declarative scripting
aimed at simplifying putting configurations to good use while
giving static analysis tools maximum domain knowledge.
Some highlights:
- JSON superset: get started quickly
- convert existing YAML and JSON
- declarative scripting
- automatically simplify configurations
- formatter
- arbitrary-precision arithmetic
- rich APIs designed for automated tooling
- a formalism conducive to automated reasoning
- generate CUE templates from source code
- generate source code from CUE configurations (TODO)
### Download and Install
#### Install From Source
If you already have Go installed, the short version is:
```
go get -u cuelang.org/go/cmd/cue
```
This will install the `cue` command line tool.
For more details see [Installing CUE](./doc/install.md).
### Learning CUE
The fastest way to learn the basics is to follow the
[tutorial on basic language constructs](./doc/tutorial/basics/Readme.md).
A more elaborate tutorial demonstrating of how to convert and restructure
an existing set of Kubernetes configurations is available in
[written form](./doc/tutorial/kubernetes/README.md).
### References
- [Language Specification](./doc/ref/spec.md): official CUE Language specification.
- [API](https://godoc.org/cuelang.org/go/cue): the API on godoc.org
- [Builtin packages](https://godoc.org/cuelang.org/go/pkg): builtins available from CUE programs
- [`cue` Command line reference](./doc/cmd/cue.md): the `cue` command
### Contributing
Our canonical Git repository is located at https://cue.googlesource.com.
To contribute, please read the [Contribution Guide](./doc/contribute.md).
To report issues or make a feature request, use the
[issue tracker](https://github.com/cuelang/cue/issues).
##### Note that we do not accept pull requests and that we use the issue tracker for bug reports and proposals only.
Unless otherwise noted, the CUE source files are distributed
under the Apache 2.0 license found in the LICENSE file.
This is not an officially supported Google product.