mattn
anko
Go

Scriptable interpreter written in golang

Last updated Jul 10, 2026
1.6k
Stars
132
Forks
19
Issues
+2
Stars/day
Attention Score
78
Language breakdown
Go 94.5%
Yacc 3.3%
JavaScript 1.4%
Vim Script 0.6%
HTML 0.1%
Makefile 0.0%
Files click to expand
README

Anko

GoDoc Reference CI Financial Contributors on Open Collective Coverage Go Report Card

Anko is a scriptable interpreter written in Go.

(Picture licensed under CC BY-SA 3.0, photo by Ocdp)

Usage Example - Embedded

package main

import ( "fmt" "log"

"github.com/mattn/anko/env" "github.com/mattn/anko/vm" )

func main() { e := env.NewEnv()

err := e.Define("println", fmt.Println) if err != nil { log.Fatalf("Define error: %v\n", err) }

script := println("Hello World :)")

_, err = vm.Execute(e, nil, script) if err != nil { log.Fatalf("Execute error: %v\n", err) }

// output: Hello World :) }

More examples are located in the GoDoc:

https://godoc.org/github.com/mattn/anko/vm

Usage Example - Command Line

Building

go get github.com/mattn/anko
go install github.com/mattn/anko

Running an Anko script file named script.ank

./anko script.ank

Anko Script Quick Start

// declare variables
x = 1
y = x + 1

// print using outside the script defined println function println(x + y) // 3

// if else statement if x < 1 || y < 1 { println(x) } else if x < 1 && y < 1 { println(y) } else { println(x + y) }

// slice a = []interface{1, 2, 3} println(a) // [1 2 3] println(a[0]) // 1

// map a = map[interface]interface{"x": 1} println(a) // map[x:1] a.b = 2 a["c"] = 3 println(a["b"]) // 2 println(a.c) // 3

// struct a = make(struct { A int64, B float64 }) a.A = 4 a.B = 5.5 println(a.A) // 4 println(a.B) // 5.5

// function func a (x) { println(x + 1) } a(5) // 6

// defer runs a function call when the surrounding function returns, // in last-in first-out order func b () { defer println("world") defer println("hello") println("start") } b() // start, hello, world

Please note that the master branch is not stable

The master branch language and API may change at any time.

To mitigate breaking changes, please use tagged branches. New tagged branches will be created for breaking changes.

Author

Yasuhiro Matsumoto (a.k.a mattn)

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

🔗 More in this category

© 2026 GitRepoTrend · mattn/anko · Updated daily from GitHub