ascript.as Get started →
Gradually typed · Rust-powered · Vibe-coded

A focused language with
serious batteries.

AScript reads like JavaScript, adds gradual types and structured concurrency, and ships a Go-class standard library — HTTP, WebSockets, SQLite, crypto, a terminal UI — in a single Rust binary.

16core value kinds
54std modules
2,565tests passing
fetch_users.as
Why AScript

Simple to hold in your head. Hard to outgrow.

Four priorities, in strict order: simplicity, safety, familiarity, performance. The core stays tiny; the library does the heavy lifting.

{ }

Familiar syntax

Braces, fn, arrows, template strings, for…of. If you read JavaScript, you already read AScript.

Gradual contracts

Add type annotations where they pay off. They're checked at runtime as contracts — not erased, not in your way.

Errors as values

No exceptions. Fallible calls return [value, err]; the ? operator propagates. Bugs panic — loudly.

Async without colors fights

A single-threaded event loop. await any I/O; synchronous code pays nothing. No data races, ever.

Batteries included

JSON, regex, SQLite, crypto, compression, a modern HTTP client, WebSockets, a TUI — all in the box.

Real tooling

A runner, REPL, formatter, test runner, and a language server — one ascript binary, no toolchain to assemble.

The standard library

Twenty-eight modules, one import away.

Rust's crate ecosystem makes high-quality batteries cheap. Each std/* module is native Rust over AScript's value model.

A multi-paradigm core, a Go-class standard library.