Repository navigation
Releases: deekshith-poojary98/echo
Release list
Echo v2.2.1
Crash hardening and path safety. Second 2.2 slice. Failure model unchanged. No new language syntax.
Host / builtins:
- Reject oversized integers so parse, print, diagnostics,
ask,exit,repeat/pad,rangeList, and regex{n}counts cannot crash the interpreter - Reject unbounded recursion on deeply nested expressions and function calls (
RecursionError→ Echo abort) - Reject NUL bytes and non-HTTP URLs so host builtins /
httpGetcannot crash - Reject cyclic symlinks so file builtins cannot crash with Python traceback
removeFile/removeTreeno longer delete through symlinks;removeTree("")andremoveTree("..")cannot wipe the working directory or parentexit()rejects status values that do not fit in a Clongorder()stays safe when the comparator mutates the list; string allocation failures inrepeat/padabort cleanly
Language / tooling correctness:
- Unescape
switchstring arms and hash-literal keys so escaped literals match andelang fmtstay consistent - Keep
elang fmtfrom rewriting overflowed floats asinf, or breaking strings that contain quotes - Lexer rejects deeply nested interpolations and interpolation quotes that end with a backslash instead of crashing
- CLI rejects unreadable source files instead of crashing
- Formatter string-wrap path is valid on Python 3.10 / 3.11 (no backslash inside f-string expressions)
Echo v2.2.0
Echo 2.2.0 — Desktop IDE
Run Echo without a terminal. Opens the 2.2.x series. No new language syntax; the failure model is unchanged.
elang ide
elang ide # empty buffer
elang ide hello.echo # open a fileA native desktop window: type a program, click Run, read the output. Built on stdlib Tkinter, so there is no new PyPI dependency.
- Editor with line numbers, Echo syntax highlighting, current-line highlight, two-space indent, and auto-indent after
{ - Output pane that separates stdout from stderr, with a run-status pill and elapsed time
- Open / Save / Save As, unsaved-change marker, and Cmd/Ctrl shortcuts (
N,O,S,R,Q) plus F5 to run - Runs the unsaved buffer in-process, so you can type and Run without saving first; programs that
importare saved first so the module loader reads the same text - Missing Tkinter prints an install hint (
brew install python-tk@3.13) and exits 1 instead of a traceback
Fixes
httpGetdecodes responses that declare an unknown charset instead of abortingyamlParserejects cyclic YAML aliases instead of recursing until the interpreter dies
Docs
- New beginner path: nine
learn/lessons, threepractice/pages, andstart/choose-your-path - Playground page and UI refactor; the obsolete
echo_documentation.mdmoved underarchive/
Install: pip install --upgrade echolang · Verify: elang --version → Echo 2.2.0
Echo v2.1.9
Echo 2.1.9
Two closed series on the same failure model (abort + *Or; no try/catch) and no package registry.
| Series | Message |
|---|---|
| 2.0.x | Path resolution + std/… modules — not a package manager |
| 2.1.x | YAML + thin LSP stub + std maturity on that 2.0 surface |
2.0.x — Modules beyond siblings + std peel
Highlights
- Nested / relative imports:
"./math","../shared","lib/math" - Reserved
import … from "std/…"from the Echo install tree (ECHO_STD_ROOToverridable) - Builtin families peeled into std modules with a dual-path prelude (still importable from prelude by default)
- Optional
--require-std/Host.require_stdto hide peeled names from the prelude - Clearer module diagnostics (E3001–E3005)
By version
| Version | What shipped |
|---|---|
| 2.0.0 | Relative / nested import paths |
| 2.0.1 | Cycle / not-found / invalid-specifier diagnostics polish |
| 2.0.2 | std/… install-tree path; seed std/meta |
| 2.0.3 | std/http — HTTP family |
| 2.0.4 | std/url, std/base64 |
| 2.0.5 | std/fs, std/json, std/os |
| 2.0.6 | std/re, std/time |
| 2.0.7 | Core vs peeled prelude; --require-std |
| 2.0.8 | Docs / examples / playground for multi-file + std/… |
| 2.0.9 | Series close |
Std modules after 2.0
std/meta, std/http, std/url, std/base64, std/fs, std/json, std/os, std/re, std/time
2.1.x — YAML + LSP + std maturity
Highlights
- YAML helpers via PyYAML (
yamlParse/yamlParseOr/yamlWrite,std/yaml, E2855) - Thin
elang lsp(diagnostics, builtin hover, goto-def) + VS Code/Cursor client - Abort
Stack:dumps +trace/.trace()(not a stepper) - Further peels:
std/math,std/random;now/waitonstd/time;runonstd/os elang std(+--exports/--count/--path)- Generated Std Inventory docs page (
tools/sync_builtins.py)
By version
| Version | What shipped |
|---|---|
| 2.1.0 | yamlParse / yamlWrite + std/yaml |
| 2.1.1 | yamlParseOr + docs |
| 2.1.2 | elang lsp stub (diagnostics + hover) |
| 2.1.3 | LSP goto-definition (local + imports) |
| 2.1.4 | Editor LSP client (vscode-languageclient; tasks remain fallback) |
| 2.1.5 | Abort Stack: + trace |
| 2.1.6 | std/math, std/random; extend std/time / std/os |
| 2.1.7 | elang std inventory CLI |
| 2.1.8 | Generated docs/reference/std-inventory.md |
| 2.1.9 | Series close (README / matrix / yaml_and_math example + playground) |
Std modules after 2.1
All of 2.0, plus std/yaml, std/math, std/random. List anytime with:
elang std
elang std --exportsCLI surface (end of 2.1.9)
elang / echolang: run file, REPL, check, test, fmt, lint, builtins, std, lsp
Editor: TextMate highlighting, tasks/matchers, optional live LSP.
Still held (not in 2.0–2.1)
Package registry / lockfiles / elang add · full LSP-as-product · generics · inheritance · async / VM · try/catch · Result/Option · overloading · Point.new
Try it
pipx install echolang # or pip install .
elang --version
elang std
elang examples/yaml_and_math.echo
elang examples/std_imports.echo
elang lsp # editor starts this when echo.lsp.enabled is onEcho v1.1.9
Echo 1.1.9
Versions: 1.1.0 → 1.1.9 (series complete)
Theme: HTTP + post-1.0 scripting polish
Package: echolang on PyPI · preferred CLI: elang
Failure model: unchanged — abort by default; recovery is inquiry and *Or twins
1.1 adds thin, host-gated networking and related scripting helpers on top of the 1.0 language surface. No new language syntax. No packages, generics, inheritance, or try / catch.
Highlights
HTTP (1.1.0–1.1.1)
httpGet/httpPost→{ status, body, headers }- Optional request headers;
httpOk/httpRedirect httpGetOr/httpPostOr— network failures return a fallback; type errors and host deny still abortHost.allow_http(CLI default on; playground off → E2801)- Network / bad URL → E2852; non-2xx still returns the response hash
URL & Base64 (1.1.2, 1.1.7)
urlEncode/urlDecode/urlJoin/urlQuery(E2853)base64Encode/base64Decode(E2854)- YAML deferred (would need a dependency)
Diagnostics & tooling (1.1.3–1.1.6, 1.1.8)
watchlines include source location; abort dumpsWatched:bindings- Documented E2801, E2850–E2854 and
http*Orin the failure model tools/sync_builtins.py+ builtin inventoryelang builtins/--count;-Vand clearer-h
Playground & docs close (1.1.5, 1.1.9)
- Playground host policy documented (no files /
run/ HTTP) - Series docs/examples pass: README, tour,
examples/url_and_base64.echo
Slice index
| Version | Focus |
|---|---|
| 1.1.0 | httpGet / httpPost + allow_http |
| 1.1.1 | Headers, status helpers, *Or twins |
| 1.1.2 | URL helpers |
| 1.1.3 | watch / abort diagnostics |
| 1.1.4 | Error-message / code pass |
| 1.1.5 | Playground HTTP / host-policy docs |
| 1.1.6 | Builtin sync / inventory generator |
| 1.1.7 | Base64 helpers |
| 1.1.8 | elang builtins CLI polish |
| 1.1.9 | Series close (docs / examples) |
Install
pipx install echolang
elang --version # Echo 1.1.9
elang builtins --countDocs: https://deekshith-poojary98.github.io/echo/
Playground: https://deekshith-poojary98.github.io/echo/playground
Still held (not in 1.1)
Packages / non-sibling imports, YAML, full LSP, inheritance, generics, async, VM, try / catch, Result / Option.
Upgrade notes
- From 1.0.0: additive only — existing programs keep working.
- Playground still denies HTTP/files/
run; use the CLI for livehttpGet/httpPost. - Prefer
elangoverecho/echolangfor the CLI name.
Echo v1.0.0
Echo 1.0.0
Stable release of Echo. Same language surface as 0.9.9 — no new syntax. Marks the completed 0.8 OOP spine and 0.9 ergonomics / stdlib series as the public 1.0 line.
Install: pipx install echolang (or pip install echolang)
CLI: prefer elang (also echolang, echo)
Docs: https://deekshith-poojary98.github.io/echo/
What’s in 1.0
- Typed scripting with runtime checks; abort +
*Orfailure model (notry/catch) - Modules, first-class functions,
const, destructuring, unions,switch - Nominal
class/interface(no inheritance):new { … }, methods, type methods, unbound methods, optionalimplements - Ergonomics: compound assign on fields,
priv, positionalPoint(3, 4), deepclone(), namedformatplaceholders,get/setproperties - Scripting stdlib:
mkdirAll/removeTree, regex builtins, UTCformatTime/parseTime,days/hours/minutes - Analyzer: union narrowing in
if type(x) == "…" - CLI: run, REPL,
check,test,fmt,lint+ editor tasks
Still held
Inheritance, generics, packages, async, try / catch / Result / Option, HTTP builtins, LSP-as-product.
Tag
v1.0.0 · commit dd0ef90
Echo v0.8.9
Echo 0.8.9
Install
pipx install echolang
elang --versionOr:
pip install echolang
Preferred CLI: elang (also echolang, echo).
What’s included
- Typed scripting with modules, REPL, and
elang check/test/fmt/lint - Nominal
class+new { … }fields (with defaults), methods (this), unbound/type methods interfacewith optionalimplements(no class inheritance)- Abort-by-default failure model; recovery via inquiry and
*Ortwins
Docs
Not in this release
No extends, generics, or try / catch. See Known Limitations.