Caveat: jk is pre-1.0, and as such, features, commands, and APIs inevitably will change.
Releases within a minor version should be stable; we try to signal breaking changes ahead of time in ./docs/deprecations.md.
jk - configuration as code
jk is a data templating tool designed to help writing structured
The main idea behind
jk is to use a general purpose language for this task.
They offer mature tooling, great runtimes, a well established ecosystem and
many learning resources.
More complex examples
- A Kubernetes deployment written in Typescript
- Generating Kubernetes objects, using e.g., kustomize-like behavior
Architecture & design
While a general purpose language is great, configuration code can be made
more maintainable by restricting what it can do. A nice property
jk has to
offer is being hermetic: if you clone a git repository
and execute a
jk script, the resulting files should be the same on any
machine. To give concrete examples, this means the
jk standard library
doesn't support environment variables nor has any networking capability.
jk provides an unopinionated data templating layer. On top of the
runtime, libraries provide APIs for users to write configuration.
This project is still in early stages but future (exciting!) plans include:
- Reach the state of having Kubernetes examples working and well documented.
- Work on hermeticity. (eg. #110, #44, topic/hermeticity).
- Native typescript support (#54).
- HCL support (#94).
When contributing to this repository, please first discuss the change you wish to make via issue with the owners of this repository before making a change.
go1.11.4 or later (modules support)
First off, clone this repository:
$ git clone https://github.com/jkcfg/jk.git # or with hub: $ hub clone jkcfg/jk $ cd ./jk
Then pull most of the dependencies using the
$ make dep
# download the prebuilt artifacts from GitHub: $ git clone https://github.com/jkcfg/prebuilt.git $ cd ./prebuilt # these following put files in /usr/local, so you may need sudo # x64 Linux: $ make install-linux-amd64 # x64 macOS: $ make install-darwin-amd64
After setting up the environment, the
jk binary can be built:
$ make jk $ ./jk --help # confirm it works
Additionally, on Linux, it's possible to use a docker container to build the project instead of installing the prebuilt libraries and binaries:
$ ./run-in-docker.sh make dep jk