Skip to content

Latest ยท 0.8.8

Echo

A typed scripting language for automation, testing, and workflows you can watch.

See it

Short programs. Open any one in the playground.

Greet Try
name: str = "Echo";

fn greet(user: str) {
    say("Hello, ${user}!");
}

greet(name);
Lists Try
nums: list = [1, 2, 3];

foreach n: int in nums {
    say(n * 2);
}
Classes Try
class Point {
    new {
        x: int;
        y: int;
    }

    fn describe(this) {
        say("(", this.x, ",", this.y, ")");
    }
}

p: Point = Point { x: 3, y: 4 };
p.describe();

Why Echo?

Built for scripts that need structure โ€” not another systems language.

Typed

Declarations and parameters carry types. Echo checks them when values are bound โ€” no separate static checker.

Observable

watch, clear failures, and a CLI built for scripts you can see: run, check, test, fmt, lint.

Honest limits

What ships and what is held are written down. Do not assume a pattern works until the docs say so.

Start here

Ships today: types, modules, classes and interfaces (no inheritance), CLI tooling. Held: generics, try/catch, packages. See Known Limitations.

Echo is in active development. The docs reflect the current implementation.