NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #646 by repository stars
Last release 2 days ago
05 Oct 2026
Ships on a steady schedule
a new release about every 1 weeks
Most releases are documented
notes for 45 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
911 releases · first in 2019
Nothing published for this version
New month, new release! And this one ships with a long awaited feature:
New month, new release! And this one ships with a long awaited feature:
Tanka can finally clean up behind itself. By optionally attaching a
tanka.dev/environment label to each resource it creates, we can find these
afterwards and purge those removed from the Jsonnet code. No more dangling
resources!
:warning: Keep in mind this is still experimental!
To get started, enable labeling in your environment's spec.json:
"spec": {
+ "injectLabels": true,
}
Don't forget to tk apply afterwards! From now on, Tanka can clean up using tk prune.
Docs: https://tanka.dev/garbage-collection
Tanka now has it's very own logo, and here it is:
<img src="docs/img/logo.svg" width="400px" />
Tanka is now present in some package managers, notably brew for macOS and the
AUR of ArchLinux! See the updated install
instructions to
make sure to use these if possible.
TANKA_JB_PATH environment variable introduced to set the jb
binary if required (#272).
Thanks @qckzrOne column per quarter.
Nothing published for this version
Mini-release to fix an issue with our Makefile (required for packaging). No changes in functionality.
Mini-release to fix an issue with our Makefile (required for packaging). No changes in functionality.
static Makefile target on all operating systems
(#262)Small patch release to fix a panic issue with tk apply.
Small patch release to fix a panic issue with tk apply.
This release includes a critical fix, update ASAP.
This release includes a critical fix, update ASAP.
Another Tanka release is here, just in time for Easter. Enjoy the built-in formatter, much more intelligent apply and several important bug fixes.
kubectl diff changes resources :rotating_light:The recently released kubectl version v1.18.0 includes a critical issue
that causes kubectl diff (and so tk diff as well) to apply the changes.
This can be very harmful, so Tanka decided to require you to downgrade
to v1.17.x, until the fix in kubectl version v1.18.1 is released.
tk fmt)Since jsonnetfmt was rewritten in Go
recently, Tanka now ships it as
tk fmt. Just run tk fmt . to keep all Jsonnet files recursively formatted.
When using tk apply, Tanka now automatically sorts your objects
based on dependencies between them, so that for example
CustomResourceDefinitions created before being used, all in the same run. No
more partly failed applies!
apply
(#244)TANKA_KUBECTL_PATH can now be used to set a custom
kubectl binary
(#221)jsonnetfmt as tk fmt
(#241)less, instead of the BusyBox
one (#232)kubectl, jsonnet-bundler, coreutils, git and
diffutils to the Docker image, so Tanka can be fully used in there.
(#243)tk apply is now colored again
(#216)os.PathListSeparator during context patching, so that Tanka
also works on non-UNIX platforms (e.g. Windows)
(#242)kubectl version v1.18.0, because of
above mentioned unfixed issue
(#254)diff
(#237)spf13/cobra to much smaller go-clix/cli. This cuts
our dependencies to a minimum.
(#235)Nothing published for this version
Nothing published for this version
Nothing published for this version
(@xvzf) The next big one is here! Feature packed with environment overriding and tk export. Furthermore lots of bugs were fixed, so using Tanka should
(@xvzf)
The next big one is here! Feature packed with environment overriding and tk export. Furthermore lots of bugs were fixed, so using Tanka should be much
smoother now!
vendor per Environment (#198)It is now possible, to have a vendor/ directory managed by jb on an
environment basis: https://tanka.dev/libraries/overriding. This means you can
test out changes in libraries in single environments (like dev), without
affecting others (like prod).
Changes done in the last release (v0.7.1) can cause indentation changes when
using std.manifestYAMLFromJSON(), related to bumping gopkg.in/yaml.v2 to
gopkg.in/yaml.v3.
Please encourage all your teammembers to upgrade to at least v0.7.1 to avoid
whitespace-only diffs on your projects.
tk export can be used to write all generated Kubernetes resources
to .yaml filesdiff when kubectl had an internal error
(#213)tk diff colors:tk diff now also works on light color schemes,
without messing up the background color.
(#210)--version output:tk --version, instead of
the git commit sha. (#201)tk apply showed a memory address instead of the actual differences, which
was kinda pointless. (#200)Nothing published for this version
Nothing published for this version
This is a smaller release focused on critical bug fixes and some other minor enhancements. While features are included, none of them are significant,
This is a smaller release focused on critical bug fixes and some other minor enhancements. While features are included, none of them are significant, meaning they are part of a patch release.
parseYaml works nowBefore, std.native('parseYaml') did not work at all, a line of code got lost
during merge/rebase, resulting in parseYaml returning invalid data, that
Jsonnet could not process. This issue has been fixed in
(#195).
The built-in Jsonnet compiler has been upgraded to the lastest master
07fa4c0.
In some cases, this should provide up to 50% more speed, especially when
base64 is involved, which is now natively implemented.
(#196)
tk env set|add has been extended by --server-from-context, which
allows to parse $KUBECONFIG to find the apiServer's IP directly from that
file, instead of having to manually specify it by hand.
(#184)vendor overrides:vendor/ directory per environment, so that
updating upstream libraries can be done gradually.
(#185)kubectl validation:
tk apply now takes --validate=false to pass that exact flag to kubectl
as well, for disabling the integrated schema validation.
(#186)(import "tk").env.name
does not anymore depend on how Tanka was invoked, but will
always be the relative path from <rootDir> to the environment's directory.
(#182)parseYaml has been fixed to actually return a
valid result (#195)Nothing published for this version
Nothing published for this version
The promised big update is here! In the last couple of weeks a lot has happened.
The promised big update is here! In the last couple of weeks a lot has happened.
Grafana Labs announced Tanka to the public, and the project got a lot of positive feedback, shown both on HackerNews and in a 500+ increase in GitHub stars!
While we do not ship big new features this time, we ironed out many annoyances and made the overall experience a lot better:
Our new website is published! It does not only look super sleek and performs like a supercar, we also revisited (and rewrote) the most of the content, to provide especially new users a good experience.
This especially includes the new tutorial, which gives new and probably even more experienced users a good insight into how Tanka is meant to be used.
import ".yaml" (#176) :rotating_light::rotating_light:Unfortunately, we had to disable the feature that allowed to directly import
YAML files using the familiar import syntax, introduced in v0.6.0, because it
caused serious issues with importstr, which became unusable.
While our extensions to the Jsonnet language are cool, it is a no-brainer that
compatibility with upstream Jsonnet is more important. We will work with the
maintainers of Jsonnet to find a solution to enable both, importstr and
import ".yaml"
Workaround:
- import "foo.yaml"
+ std.parseYaml(importstr "foo.yaml")
k.libsonnet installation (#140)Previously, installing k.libsonnet was no fun. While the library is required
for nearly every Tanka project, it was not possible to install it properly using
jb, manual work was required.
From now on, Tanka automatically takes care of this. A regular tk init
installs everything you need. In case you prefer another solution, disable this
new thing using tk init --k8s=false.
k.libsonnet is now automatically installed on tk init (#140):k.libsonnet was a time consuming manual task. Tanka now
takes care of this, as long as jb is present on the $PATH. See
https://tanka.dev/tutorial/k-lib#klibsonnet for more details.tk env --server-from-context:kubectl
context. No need to remember IP's anymore – and they are even autocompleted on
the shell. (#145)-e / --extCode and --extVar allow using std.extVar() in Tanka as well.
In general, -e is the flag to use, because it correctly handles all Jsonnet
types (string, int, bool). Strings need quoting!
(#178)spec.json are now accessible from Jsonnet using
(import "tk").env. (#163)[ ]) are now fully supported, at an arbitrary level of
nesting! (#166)nil values are ignored from the output. This allows to disable
objects using the if ... then {} pattern, which returns nil if false
(#162).-t / --target is now case-insensitive
(#130)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
First release of the new year! This one is a quick patch that lived on master for some time, fixing an issue with the recent "missing namespaces" enha
First release of the new year! This one is a quick patch that lived on master
for some time, fixing an issue with the recent "missing namespaces" enhancement
leading to apply being impossible when no namespace is included in Jsonnet.
More to come soon :D
It has been quite some time since the last release during which Tanka has become much more mature, especially regarding the code quality and structure
It has been quite some time since the last release during which Tanka has become much more mature, especially regarding the code quality and structure.
Furthermore, Tanka has just hit the 100 Stars :tada:
Notable changes include:
The most notable change is probably the Go API, available at
https://godoc.org/github.com/grafana/tanka/pkg/tanka, which allows to use all
features of Tanka directly from any other Golang application, without needing to
exec the binary. The API is inspired by the command line parameters and should
feel very similar.
It is now possible to import .yaml documents directly from Jsonnet. Just use
the familiar syntax import "foo.yaml" like you would with JSON.
Tanka now handles namespaces that are not yet created, in a more user friendly
way than `kubectl** does natively.
During diff, all objects of an in-existent namespace are shown as new and when
applying, namespaces are applied first to allow applying in a single step.
spec.json
(#108)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
This version adds a set of commands to manipulate environments (tk env add, rm, set, list) (#73). The commands are mostly ks env compatible, allowing
This version adds a set of commands to manipulate environments (tk env add, rm, set, list) (#73). The commands are
mostly ks env compatible, allowing tk env be used as a drop-in replacement
in scripts.
Furthermore, an error message has been improved, to make sure users can
differentiate between parse issues in .jsonnet and spec.json
(#71).
After nearly a month, the next feature packed release of Tanka is ready! Highlights include the new documentation website https://tanka.dev, regular e
After nearly a month, the next feature packed release of Tanka is ready! Highlights include the new documentation website https://tanka.dev, regular expression support for targets, diff histograms and several bug-fixes.
tk show now aborts by default, when invoked in a non-interactive
session. Use --dangerous-allow-redirect to disable this safe-guard
(#47).--target / -t. Use it to easily select
multiple objects at once: https://tanka.dev/targets/#regular-expressions
(#64).diffstat(1) utility. Gain a sneek peek at a change using tk diff -s .!
(#67)spec.json is missing from an Environment. While you cannot apply or diff,
the show operation works totally fine
(#56,
#63).kubectl are now correctly passed to the user
(#61).tk diff does not output useless empty lines (\n) anymore
(#62).cli: print deprecated warnings in verbose mode. (#39) (6de170d): Warnings about the deprecated configs are only printed in verbose mode
Tanka v0.3.0 is here!
This version includes lots of tiny fixes and detail improvements, to make it easier for everyone to configure their Kubernetes clusters.
Enjoy target support, enhancements to the diff UX and an improved CLI experience.
The most important feature is target support (#30) (caf205a): Using --target=kind/name, you can limit your working set to a subset of the objects, e.g. to do a staged rollout.
There where some other features added:
kubectl can now be invoked with --force.metadata.namespace as well.tk diff subcommand has been improved:
PAGER is invoked16.tk apply is invoked, the diff is shown again, to make sure you apply what you wantsubset was used, although native is already supported.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →