Skip to content
Easily get custom go template based outputs to your command-line tool. Like in docker/kubernetes
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

teks : awesome outputs for your commands

Build Status Go Report Card

teks brings painless output formating for your commands. Docker/Kubernetes provides custom formatting via go-templates. teks brings the power into any application providing a smooth intergration as a library.

teks is hevily inspired by Docker CLI


teks is a go package. To use it execute

go get

Available formatting options

Name Usage
json Output is formatted as JSON
jsonPretty Outputs a human-readable JSON with indented by 2 spaces
upper Convert string to uppercase
lower Convert string to lowercase
split Splits strings given by string and sep
join Joins strings by given separator
title Convert the first letter to uppercase of a string


In this example we are going to printout details of few persons using teks.

package main

import (


// Person represents a human being or whatever
type Person struct {
	Name    string
	Age     int
	Address string

func main() {
	var format string
	// default one will printout Name and Age in tabular format
	flag.StringVar(&format, "format", "table {{.Name}}\t{{.Age}}", "format of output")

	// whatever data you have
	persons := []Person{
		{"Kasun", 24, "Earth"},
		{"John Doe", 34, "Somewhere on earth"},
		{"Spongebob", 30, "Under Sea"},
		{"Harry Potter", 30, "4 Privet Drive, Little Whinging, Surrey"},

	// create new context
	ctx := teks.NewContext(os.Stdout, format)

	// create a renderer function to match signature defined in teks.Renderer
	renderer := func(w io.Writer, t *template.Template) error {
		for _, p := range persons {examples git:(master) ✗ 
			if err := t.Execute(w, p); err != nil {
				return err
			_, _ = w.Write([]byte{'\n'})
		return nil

	// headers for table
	tableHeaders := map[string]string{
		"Age":     "Age",
		"Name":    "Name",
		"Address": "Address",

	//override header functions if you want
	//teks.HeaderFuncs = template.FuncMap{
	//	"split": strings.Split,

	// execute context and write to our output
	if err := ctx.Write(renderer, tableHeaders); err != nil {
		fmt.Println("Error executing template:", err.Error())

Now run program as follows

➜ go run simple.go 
Name                Age
Kasun               24
John Doe            34
Spongebob           30
Harry Potter        30

Let's pretty print Name and Address in tabular format

➜ go run simple.go --format "table {{.Name}}\t{{.Address}}"
Name                Address
Kasun               Earth
John Doe            Somewhere on earth
Spongebob           Under Sea
Harry Potter        4 Privet Drive, Little Whinging, Surrey

Let's make Name UPPERCASE

➜ go run simple.go --format "table {{upper .Name}}\t{{.Address}}"
NAME                Address
KASUN               Earth
JOHN DOE            Somewhere on earth
SPONGEBOB           Under Sea
HARRY POTTER        4 Privet Drive, Little Whinging, Surrey

You can change behavior of these headers by providing custom HeaderFuncs.



All contributions are welcome. Raise an Issue or a Pull Request

You can’t perform that action at this time.