A drop of
JavaScript.
A strict subset of ECMAScript 2027+ECMAScript is the language specified by ECMA-262. GocciaScript implements a strict subset of that standard, plus selected TC39 proposals., implemented from scratch — with a sandbox-first runtime designed for tinkerers, embedding and AI agents.
curl -fsSL https://gocciascript.dev/install | shPre-1.0: the API is still in motion — expect breaking changes between any two releases until 1.0.
Modern JavaScript, without the quirks.#
What remains is a small, predictable language with a .
A subset, not a superset
Modern ECMAScript 2027+ — let/const, arrow functions, classes, modules, async/await.
Sandbox-first
No eval, no global mutable state, GET/HEAD-only fetch, timeouts, and explicit global injection via JSON/TOML/YAML.
Explicit over clever
Named imports only. Strict equality only. Descriptive names over shortcuts — even at the cost of verbosity.
A modern standard library, batteries included
Temporal for dates, and direct module imports of JSON, TOML, YAML, CSV, JSONL and Markdown.
What's left out — and why#
Dynamic code construction and scope-changing syntax are left out to keep execution predictable in embedded runtimes. Coercive or legacy forms such as ==, var, and arguments have explicit alternatives. See Language for the per-feature rationale.
Compatibility mode can opt back into selected syntax such as var, function, and ASI via CLI or config flags.
The runtime is also intentionally not Node.js-compatible — no process, no Buffer, no CommonJS, no ambient filesystem globals.
Beyond the language: the runtime itself#
Everything ECMAScript gives you, plus first-class structured-data formats — direct module imports of .json, .json5, .toml, .yaml, .csv, .tsv, .jsonl, and .md; runtime parsers for each (markdown imports return the raw text); a capability-gated fetch (GET/HEAD only, explicit allow-listed hosts); and a built-in test runner with a Vitest/Jest-compatible test/describe/expect API.
From source to result.#
One pipeline, five stages. Click a stage to jump into the matching docs chapter — start with Architecture.
Source
Every supported extension is the same language — TS/TSX type annotations are parsed and discarded, and JSX is rewritten to function calls in a preprocessing pass before the lexer ever sees it. There is no separate type-checker.
const price = 2.5;
const qty = 3;
const total = price * qty;
console.log("total:", total);