Releases: abneeshsingh21/EPL
Release list
v10.2.0
See CHANGELOG.md [10.2.0]. Highlights: compiler-verified Kotlin/Android APK export (bundled EPLRuntime with SQLite db_* + sandboxed file_*), console/JVM self-contained transpile target, reliability hardening (no silent error swallowing), JS/Python correct-or-loud transpilation, and VM<->interpreter parity gate. PyPI: https://pypi.org/project/eplang/10.2.0/
v10.1.2
What's Changed
- fix(mcp): expose node transpile target, run on VM, resolve syntax aliases by @abneeshsingh21 in #82
- ci: auto-deploy MCP server to Azure on release (kills silent drift) by @abneeshsingh21 in #83
- Security audit 2026-07: 14 findings fixed (2 Critical, 3 High, 8 Medium, Lows) + docs by @abneeshsingh21 in #84
- release: v10.1.2 — security patch by @abneeshsingh21 in #85
Full Changelog: v10.1.1...v10.1.2
v10.1.1
What's Changed
- Fix native export to follow the project's Import graph (10.1.1) by @abneeshsingh21 in #81
Full Changelog: v10.1.0...v10.1.1
v10.1.0
What's Changed
- Fix VM loop control flow + make native build honest (no more shipped crashes) by @abneeshsingh21 in #61
- Fix parser: soft-keyword variables + omitted-bound step slices; close 4 example bugs by @abneeshsingh21 in #62
- Fix VM: module imports, top-level constants in functions, first-class functions by @abneeshsingh21 in #64
- Fix VM parity: ternary, Match, file I/O, float division, Use-python guard by @abneeshsingh21 in #65
- chore(gitignore): ignore _audit/ parity-probe scratch dir by @abneeshsingh21 in #66
- Rewrite 7 corrupted starter examples + add runtime gate that catches it by @abneeshsingh21 in #67
- Fix indexed Set, Match multi-value When, add epl build -o flag by @abneeshsingh21 in #68
- Harden all deployable servers: secure defaults + deploy-anywhere config by @abneeshsingh21 in #69
- Add .env auto-loading + fix VM source-relative import resolution by @abneeshsingh21 in #70
- Native Android/Kotlin compilation: db_* bridge (H1) + type-correct transpile (H3) by @abneeshsingh21 in #71
- Revive official packages: bind python_call, empty-Map literal, list +, and more by @abneeshsingh21 in #72
- Make transpile commands honor -o/--output by @abneeshsingh21 in #73
- Optimize VM function/method bodies; correct false VM speed claim by @abneeshsingh21 in #74
- Unify bare constants across engines; reconcile platform claims (Phase 0) by @abneeshsingh21 in #75
- Implement closures (capturing lambdas) in the bytecode VM (Phase 1) by @abneeshsingh21 in #76
- Add conservative monomorphic type inference to the native build (Phase 2) by @abneeshsingh21 in #77
- Harden CI/release/supply-chain; consolidate workflows (Phase 3) by @abneeshsingh21 in #78
- Release v10.1.0: VM closures, native type inference, CI hardening by @abneeshsingh21 in #79
- Refresh README for 10.1.0; make release publish idempotent by @abneeshsingh21 in #80
Full Changelog: v10.0.0...v10.1.0
v10.0.0 — Honest native export + WebView target
Install/upgrade: pip install --upgrade eplang · PyPI
[10.0.0] — 2026-06-25
The "one codebase → web + Android + iOS + desktop" claim is now genuinely
true — and honest about how. EPL web apps rely on HTTP routing, a server-side
backend, and the web escape hatches Raw HTML / Script / Stylesheet, none
of which have a native-widget equivalent. The transliterating native targets
used to drop all of that silently, exit 0, and print "✓ generated" — so an app
whose UI is built from Raw HTML (the omniapp stress test, finding H2) looked
fully ported when ~90 % of it had been discarded. This release does two things:
it tells the truth about what transliteration can carry, and it adds a
WebView target that ships the real web app with nothing dropped.
Added
- WebView target (
--webview) forandroid/ios/desktop— ships the
real EPL web app instead of transliterating it:- android — a native
WebViewshell (epl/webview_gen.py) that loads the
running EPL web server; default URL targets the emulator-to-host loopback
(10.0.2.2) on the app's declared port, overridable with--url. - ios — a SwiftUI
WKWebViewshell (sources +Info.plistwith local
networking enabled). - desktop — a Python
pywebviewlauncher that starts the EPL app and opens
it in a native window. Because EPL is itself Python, this runs the whole
app — UI and backend — with zero transliteration. - Nothing is dropped: routes,
Raw HTML,Script,Stylesheet, and the
db_*backend are exactly what you built for the web.
- android — a native
- Portability analysis (
epl/native_portability.py): a single AST walk that
produces an honestPortabilityReportof every construct that cannot be ported
by the transliterating target — web routing/serving (Route,WebApp,
Start ... on port,Send ...), web-only markup (Raw HTML,Script,
Stylesheet), server-side storage (Store/Fetch), and web/db_*builtins —
each with its line number and the reason it was dropped. - Loud reporting on every transliterating build:
epl android|ios|desktop
prints a summary of unportable constructs to stderr and writes a full
PORTING_REPORT.mdinto the output directory, including what did port and how
to ship the real app via--webview. --strictflag forandroid/ios/desktop: exit non-zero (code2)
when any construct could not be ported, so CI no longer treats a lossy
transliteration as success.
Notes
- The transliterating path changes no codegen output — it only reports the
truth about coverage. Pure-logic EPL (functions, math, data) still ports
cleanly with an empty report; for a real web app, use--webview. db_*calls are reported as unportable by the transliterating target until the
native db bridge ships (H1); the WebView target runs them unchanged.- Major version bump: native-export CLIs gain new behavior (loud reporting,
--strictexit codes,--webview/--url), so this is 10.0.0.
v9.9.0 — core de-bloat: website cosmetics removed
Removes four website-only web-DSL cosmetics (WordsPullUp, WordsPullUpMultiStyle, NoiseOverlay, BgNoise) plus their default CSS and an always-on IntersectionObserver that were shipping to every PyPI user. store_list is deliberately kept. The flagship site reproduces the removed effects in its own layer (verified byte-identical).
Breaking (web DSL): pages using the removed elements must switch to Raw HTML or a userland Component. No other syntax affected.
Tests: 1921 passed, 5 skipped. Interpreter↔VM parity: 0 divergences.
See CHANGELOG.md for full details.
v9.8.0 — Backend parity
EPL v9.8.0 — now on PyPI: pip install -U eplang
Highlights
epl run defaults to the bytecode VM, which had silently drifted from the reference interpreter — producing different output for 22 of 66 example programs. This release drives that to 0 divergences, guarded by a new parity harness (tests/parity_check.py), with ~70 new regression tests.
Fixed in the VM (the default runner): string interpolation, object fields inside methods, Try/Catch + exceptions across call frames, operand-stack hygiene on early Return, stdlib maps (csv_read/JSON), sort/reverse mutation, EPL value formatting (true, [a, b], 4.0), random(min,max), slice steps, default parameters, top-level variable scoping, undefined-variable detection, and error categories. Stopped a silent fallback that masked the drift and double-printed output.
Language: to_string + random_integer added to the interpreter; dropped an over-strict inferred-type lock.
Verification: 271 + 1906 tests green; full CI matrix (Linux/Windows/macOS × 3.9–3.12) green.
See CHANGELOG.md for the complete list.
epl-auth v1.0.0
First-party authentication and JWT library for EPL.