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.