Skip to content

Installation

Tako is a Go module. There's no CLI tool to install, no daemon to run, no config file to set up before you start. You just go get it.

Requirements

  • Go 1.26 or later — Tako uses max() builtin and other features from recent Go versions.
  • A terminal that supports ANSI escape codes (basically every modern terminal on macOS, Linux, and Windows Terminal).

Adding Tako to Your Project

bash
go get github.com/takoterm/tako

That pulls the framework and its dependencies (Bubble Tea, Lipgloss, Bubbles, fsnotify, and the WebSocket library for the dev inspector).

Project Layout

There's no enforced project structure. The simplest possible Tako app is just a main.go:

myapp/
├── go.mod
├── go.sum
└── main.go

If you decide to use the plugin system later, plugins live alongside or next to your main package:

myapp/
├── go.mod
├── go.sum
├── main.go
└── plugins/
    └── myplugin/
        ├── plugin.go     ← Manifest declaration
        ├── init.go       ← Auto-registration via init()
        └── lifecycle.go  ← Business logic

Plugins can also live in their own Go modules (with go.mod) and be imported as dependencies — the same pattern used by the example/plugins/ in this repo. This is useful if you want a truly external plugin ecosystem where third parties publish and version their plugins independently.

Verifying the Installation

Create a minimal main.go:

go
package main

import (
    "log"
    "github.com/takoterm/tako"
)

func main() {
    app := tako.NewApp()
    if err := tako.Run(app); err != nil {
        log.Fatal(err)
    }
}

Run it:

bash
go run main.go

You should see the default fallback screen:

Tako Framework: No base UI bound. Press ctrl+c to exit.

That means the framework booted correctly. No renderer was registered, so it showed the fallback. In the next section we'll hook up an actual UI.

What Gets Created on First Run

On first run, Tako creates a .tako/ directory next to your main.go (when running via go run) or next to the binary. This is the app's home directory:

.tako/
├── tako.log    ← All framework + plugin log output
├── kv.json     ← Persistent key-value store
└── run/        ← PID files for the dev inspector

You'll want to add .tako/ to your .gitignore.

.gitignore Snippet

gitignore
.tako/

Up next: 02.02 — App Initialization — we'll look at tako.NewApp(), app.Boot(), and what each step actually does so you know exactly what's happening before your plugins load.