LMCode Ecosystem & Cloud Emulators
Because every LMCode host exposes its contract via --lmcode-schema --json and can be auto-installed
via install="github:lmctl-ai/HOST@TAG", LMScript programs can compose cloud provisioning, 3D CAD,
vector diagrams, HTML verification, and HTTP mocking with full compile-time type safety.
1. Multi-Cloud Hosts & Local Simulators
| Host CLI | Local Simulator | GitHub Repository | Capabilities |
|---|---|---|---|
lmaws |
awssim |
lmctl-ai/lmaws |
AWS S3, CloudFront (OAC, distributions, invalidations), ACM certificates, Route 53 DNS zones & records, EC2, VPC, ALB, IAM policy compiler/linter, and web_stack lifecycle. |
lmgcp |
gcpsim |
lmctl-ai/lmgcp |
Google Cloud Storage, Compute Engine, Cloud DNS, and IAM automation with local simulator parity. |
lmazure |
azuresim |
lmctl-ai/lmazure |
Azure Resource Groups, Blob Storage, Virtual Networks, and App Services. |
lmoci |
ocisim |
lmctl-ai/lmoci |
Oracle Cloud Infrastructure Object Storage, VCN, and compute instances. |
2. Deep Dive: lmctl-ai/lmaws Static Site & CloudFront Stack
lmaws (built on lmcode-java and compiled to a standalone native binary) provides two complementary
APIs used to provision and publish lmscript.io:
-
cloud.web_stack(run_id, domain, private_state_path): Step-by-step idempotent state machine (bucket→certificate→distribution→dns_site→https→cache→invalidate) plusstatus(),leftovers(),down(), andcloud.web_find(run_id, domain). -
cloud.s3_bucket_create_exact/s3_bucket_attach+cloud.s3_put_file: Multi-file static site publisher with SHA-256 checksum verification, explicitcontent_typeandcache_controlheaders, and per-run ledger summaries (aws.s3_ledger_summary(run_id)).
prog = _lmcode_ cli="lmaws" install="github:lmctl-ai/lmaws@v0.1.34";
# Use aws.demo() for offline preview, or aws.region("us-east-1") for live/awssim
let cloud = aws.demo();
# 1. Generate and lint least-privilege IAM policy for lmscript.io
let pol = cloud.policy("lmaws_lmscript_io")
.static_site_stack("lmaws", "lmaws_test", "lmscript.io", "us-east-1");
let lint_res = pol.lint();
# 2. Provision S3 + ACM + CloudFront OAC + Route 53 Alias stack
let web = cloud.web_stack("a1b2c3d4", "lmscript.io", ".lmweblab-local/state.json");
web.step("bucket", "{\"force_destroy\":true}");
web.step("certificate", "{}");
web.step("distribution", "{}");
web.step("dns_site", "{}");
web.step("https", "{}");
web.step("cache", "{\"default_ttl\":300,\"max_ttl\":3600}");
web.step("invalidate", "{}");
lmcode_return_put("policy_lint", json_parse(lint_res.json()));
lmcode_return_put("web_status", json_parse(web.status().json()));
end _lmcode_
r = run_lmcode(prog);
require(r.ok, "LMCode failed: " + r.get("message", "host execution failed"));
println(json_stringify(r.result, 2));
3. CAD, Diagrams, Video, Plotting & HTML Hosts
lmcad (C++17)
Parametric 3D solid modeling (CSG primitives, extrusions, fillets, boolean unions/differences, STL/STEP export).
lmdraw
Declarative vector diagrams, architecture charts, and SVG/PNG rendering from typed LMCode scenes.
lmhtml
Typed HTML/DOM builder, accessibility auditor, and structural page verifier.
lmvideo
Timeline composition, transitions, audio tracks, and frame-accurate video rendering.
lmplot
Scientific and benchmark chart generation (line, bar, scatter, heatmaps) from typed series.
lmblender
Typed 3D scene, mesh, material, camera, and render automation host for Blender.
4. Browser Automation (lmwebtest), HTTP Mocking & Testing Hosts
lmwebtest & playwright
Headless Chromium Web DSL (context web: Web, context report: Report) plus full Playwright driver (cli="lmwebtest playwright", context pw: Playwright) for UI interactions, screenshots, and API checks.
lmok
Assertion and conformance verification host with full LMCODE_RETURN sink support.
lmmock & lmcurl
Programmable HTTP/REST mock server using @annotation route handlers, paired with lmcurl for typed API assertions.
Testing lmscript.io End-to-End with lmwebtest + lmhtml
We test every page, interactive tab switcher, theme toggle, live search filter, and DOM structure of
lmscript.io using scripts/test-lmwebtest.lms,
which combines three LMCode surfaces in a single script:
# 1. High-level Web DSL (cli="lmwebtest"): navigate pages, assert selectors, save DOM & PNGs
web_dsl = _lmcode_ cli="lmwebtest" install="github:lmctl-ai/lmwebtest@v0.1.23";
web.set_viewport(1280, 900);
let page = web.navigate("http://127.0.0.1:8765/");
if (page.status() != 200 || !page.has("h1")) {
report.add("bad_home", "/", page.status(), "Homepage check failed");
}
page.save_html("test-results/lmwebtest/rendered-home.html");
page.screenshot("test-results/lmwebtest/home.png");
report.fail_if_any();
web.close();
end _lmcode_
require(run_lmcode(web_dsl).ok, "lmwebtest Web DSL failed");
# 2. Interactive Playwright DSL (cli="lmwebtest playwright"): clicks, filters, console errors
pw_dsl = _lmcode_ cli="lmwebtest playwright" install="github:lmctl-ai/lmwebtest@v0.1.23";
let b = pw.launch("chromium");
let p = b.new_page();
p.goto("http://127.0.0.1:8765/lmscript/examples.html");
p.fill("[data-filter-input]", "resumepoint");
$return.badge = p.text_content("#ex-count");
$return.page_errors = p.page_errors();
b.close();
end _lmcode_
r2 = run_lmcode(pw_dsl, {command: ["lmwebtest", "playwright", "--lmcode", "$DSLFILE"]});
require(r2.ok, "lmwebtest Playwright DSL failed");
assert(r2.result.badge == "1 of 58 shown" && r2.result.page_errors == "[]");