跳到正文
Hacker News (official RSS)(github.com)·· 4 小時前精選AI 評分69

Lasm:利用 Lean 4 編譯 WebAssembly,支援 Node、Serverless 與 Edge 即時部署

Show HN: Lasm – Write formally verified webapps in Lean for Node/serverless/edge

AI 導讀

Lasm 讓 Lean 4 程式直接編譯成 WebAssembly,支援 Node、Serverless、Edge 與瀏覽器即時部署。

  • 編譯與部署:一份 Lean 程式碼可產生 Node 伺服器、Lambda、Cloudflare Workers、Bun、Deno、WASI、瀏覽器等多種平臺輸出。
推薦理由

瞭解如何用 Lean 4 直接編譯 WebAssembly,並在 Node、Serverless 與 Edge 即時部署,對開發者皆具參考價值。

正文 · AI 翻譯

Lean 4 為 JavaScript 與 WebAssembly 世界而設。 Lasm 事先將普通 Lean 4 程式編譯成 WebAssembly。 一個 Lean 程式碼庫可成為 Node 伺服器、無伺服器或邊緣函式、WASI/Fastly 模組或瀏覽器應用。 因為它是 Lean,您可以證明您部署程式碼的性質。 旗艦範例,Conduit,是 RealWorld 應用,擁有 117 個已證明的定理。 Lasm 以 npm 發行,並帶入 Lean、Lake 及其建置工具;您只需要 Node(或 Bun 或 Deno)。

npm create @lasm@latest my-app -- --template hono    # then: cd my-app && npm install && npm run dev

AI 代理:此 README 本身已完整。llms.txt 是簡短索引,docs/AI.md 列出能幫您避免錯誤選項的規則。

若 Lasm 對您有幫助,我會感謝您的 贊助(詳見下文)。

快速資訊

專案 數值
目前版本 @lasm/cli 0.3.5 (釋出說明); npm view @lasm/cli version
安裝 npm install -D @lasm/cli (bin: lasm),或不安裝:npx @lasm/cli …;新專案:npm create @lasm@latest
Lean 精確 4.35.0 (lean-toolchain: leanprover/lean4:v4.35.0); Lasm 會安裝它,且您不需要 elan 來建置
開發於 Linux x64/arm64 (glibc 2.34+)、macOS x64/arm64、Windows x64
編譯器執行於 Node ≥ 24(測試 24.0.0、24.22.1、26.12.1);Bun 1.4.4 與 Deno 2.9.6(測試,作為唯一執行環境)
輸出 dist/ 搭配 program.wasm + JS 啟動器(Node);或平臺套件(--target …)
Node 應用執行於 Node ≥ 24、Linux x64/arm64(glibc 2.28+ 或 musl)來自任何建置機器,並加上建置機器自身的作業系統;≥ 512 MB 記憶體
JS/npm 互通 import Lasm.JS;每呼叫一個函式就有一行 @[js "pkg" "export"];無預製繫結(指南)
Lean 中的框架 Lasm.Fetch(HTTP、所有伺服器目標)、Lasm.UI(瀏覽器、Elm 架構、已證明差異)、Lasm.RPC(型別化客戶端/伺服器 API)、Lasm.Web(DOM 與 Web API)、Lasm.KV
執行時不可用 elaboration、#eval-style 評估、載入 .olean、Lean 核心(完整清單);這些皆在建置時執行
授權 MIT(Lasm);範本、範例及 README 程式碼範例亦為 MIT-0
倉庫 / 問題 https://github.com/Millillion/lasm · 回報錯誤(包含 npx lasm --version)

平臺

每一行皆在 CI 中以該平臺自身的本機執行環境、映像或模擬器進行測試。\n依照專案政策,CI 永遠不會部署至真實雲端帳戶(每項測試方式)。

部署至 lasm build Main.lean --target … 輸出 自從
Node 伺服器或程式(任何主機、Docker/Kubernetes、Cloud Run、Fly.io、Railway、Render、Heroku、DigitalOcean) node(預設) dist/ → node dist/main.mjs 0.1.0
AWS Lambda(.zip,nodejs24.x) lambda lambda.zip 0.1.0
AWS Lambda(容器映像) lasm init … --deploy lambda Dockerfile.lambda 0.1.0
Lambda@Edge lambda-edge lambda-edge.zip 0.1.0
Vercel Functions vercel .vercel/output 0.1.0
Netlify Functions netlify netlify/functions/lasm 0.1.0
Azure Functions azure azure-functions/ 0.1.0
Google Cloud Functions(gen2) gcf gcf/ 0.1.0
Cloudflare Workers workers workers/ 0.2.0
Vercel Edge vercel-edge api/lasm.mjs、api/_lasm/ 0.2.0
Netlify Edge netlify-edge netlify/edge-functions/lasm.mjs 0.2.0
Deno Deploy deno-deploy deno/main.mjs 0.2.0
Supabase Edge Functions supabase-edge supabase/functions/<name>/ 0.2.0
Bun(≥ 1.3.14)/ Deno(2.x) bun / deno bun/main.mjs / deno/main.mjs 0.2.0
Fastly Compute fastly bin/main.wasm、pkg/<name>.tar.gz 0.3.0
WASI(wasmtime、wasmer、node:wasi) wasi wasi/main.wasm 0.3.0
wasi-http(wasmtime serve、Spin) wasi-http wasi-http/main.wasm 0.3.0
瀏覽器(Chrome、Edge、Firefox、Safari) browser(或 Vite 外掛 @lasm/cli/vite) dist/ 靜態網站 0.3.0

Node 建置包含 Lean 的完整執行環境(執行緒、檔案、程序、套接字)。\n邊緣、Bun/Deno、WASI 與瀏覽器建置則以單執行緒執行 Lean,沒有套接字或程序(檔案亦除外,僅 WASI 例外);其餘 Lean 功能仍可使用。

從此開始

我想要建置… 執行 接著檢視
命令列程式 npm create @lasm@latest my-tool examples/hello、examples/wasi-cli
使用 npm 框架於 Node 的 REST API npm create @lasm@latest my-api -- --template hono(或 express、fastify) examples/js-crud(Postgres + JWT、Express 與 Hono)
純 Lean 伺服器(無 npm) npm create @lasm@latest my-api -- --template fetch(任何目標)或 --template std-http(Node,亦可為原生 Lean) examples/fetch;std-http 範本
無伺服器函式(Lambda、Vercel、Netlify、Azure、GCF) npm create @lasm@latest my-fn -- --template hono --deploy lambda-zip (或 vercel、netlify、azure、gcf、lambda-edge) docs/deploy
邊緣函式(Workers、Vercel/Netlify Edge、Deno Deploy、Supabase) npm create @lasm@latest my-edge -- --template hono --deploy workers (或 fetch) examples/edge-pure, docs/EDGE.md
Fastly、WASI 或 Spin 服務 npm create @lasm@latest my-svc -- --template fetch --deploy fastly (或 wasi-http、spin、wasi) examples/fetch, docs/WASI.md
瀏覽器應用程式 npm create @lasm@latest my-web -- --template web examples/ui (counter, TodoMVC with proofs, feature demo, benchmark)
完整的實際應用程式(API、瀏覽器前端、SQL、auth)包含證明,執行於 Node、Workers 或 Bun cd examples/conduit && npm install && npm run build && npm start examples/conduit, 旗艦產品(以下)
完整堆疊應用程式,帶有已驗證的 API npm create @lasm@latest my-app -- --template fullstack templates/fullstack
在 Lean 中呼叫 npm 套件或 fetch 加入 import Lasm.JS 以及每個函式一行 @[js] examples/js-fetch, JS bindings
在 Bun 或 Deno 上執行 bun create @lasm my-app --template hono / deno run -A npm:@lasm/create my-app --template hono docs/BUN_DENO.md

每個範例都有一個 README,提供一行指令即可執行;examples/README.md 列出全部範例。

旗艦範例:Conduit,擁有 117 個已證明的定理

examples/conduit 是 Conduit, RealWorld 應用(類似 Medium 的雜誌平臺),完全使用 Lean 撰寫:REST API、伺服器端渲染的瀏覽器應用程式以及相關證明。

  • 117 個定理 關於實際執行的程式碼,已在沒有 sorry 的情況下檢查,僅使用 Lean 的標準公理 (npm run proofs;PROOFS.md) 以純英文列出每一個。它們涵蓋授權(僅作者能修改自己的文章與評論)、關注與收藏、永不衝突的 slug、永不跳脫或重複的分頁、客端與伺服器共用的驗證(應用程式永不傳送伺服器會拒絕的資料)、JSON 迴圈傳遞以及 Markdown 連結安全性。端點是針對一組 Store 函式編寫,證明則在表格模型上執行相同程式碼。
  • 可信但未證明的內容:每個 SQL 語句是否按其模型執行、JSON 文本層、請求間的併發,以及 Lean、Lasm 和 JavaScript 執行環境。整個 RealWorld 規格的符合性是經測試而非證明。
  • API:官方 RealWorld API 套件在 Node (node:sqlite)、Cloudflare Workers (D1) 與 Bun (bun:sqlite) 上未作任何修改即可通過(13/13 檔案,154 個請求)。每個目標都擁有一個手寫的 @[js] 繫結模組。
  • 前端:Lasm.UI 執行於 RealWorld 官方模板,具備伺服器端渲染、載入與在 Lean 中解析 Markdown。官方 Playwright 端到端測試在 Node (Chromium、Firefox、WebKit) 與 Workers、Bun (Chromium) 上皆能一次通過。

所有這些在 CI 中執行(conduit.yml,執行編號 40615274657,使用 @lasm/cli 0.3.4)。

cd examples/conduit
npm install                                   # @lasm/cli, Hurl and Playwright (the official suites' runners)
npm run build && npm start                    # http://localhost:3000: the app and its API on Node
npm run proofs                                # check all 117 theorems
npm test                                      # the official API suite (also test:workers, test:bun)
npx playwright install chromium && npm run test:e2e   # the official end-to-end suite
npm run build:workers && npx wrangler dev     # Cloudflare Workers with local D1
npm run build:bun && npm run start:bun        # Bun with bun:sqlite

60 秒啟動

單一檔案不需要專案。將此完整程式儲存為 Main.lean:

def main : IO Unit := do
  IO.println s!"Hello from Lean! 2 + 3 = {2 + 3}"
npx @lasm/cli Main.lean          # builds and runs: Hello from Lean! 2 + 3 = 5
npx @lasm/cli build Main.lean    # writes dist/; run it with: node dist/main.mjs

在新機器上第一次建置會下載 Lean 與建置工具一次(約 250–275 MB;Linux CI 執行器上首次建置耗時 19 秒)。之後一次行程變更的開發建置大約 1–2 秒。

範例

每個範例皆完整:建立、開發、建置、部署。Lasm 從不安裝或啟動平臺自己的 CLI(wrangler、vercel、fastly 等);這些由你自行執行。 npm run dev 是 lasm dev:每次儲存後約 2 秒重新建置並重啟伺服器,並在發生型別錯誤時保留上一次成功建置。

Node 伺服器(Hono;亦可使用 express、fastify、std-http、fetch)。

npm create @lasm@latest my-api -- --template hono
cd my-api && npm install
npm run dev                                   # http://localhost:3000/hello/Ada
npm run build && npm start                    # dist/ needs only Node 24+
docker build -t my-api . && docker run -p 8080:8080 my-api   # the generated Dockerfile

AWS Lambda / Vercel / Netlify / Azure / Google Cloud Functions。

npm create @lasm@latest my-fn -- --template hono --deploy lambda-zip   # or vercel, netlify, azure, gcf, lambda-edge
cd my-fn && npm install
npm run build:lambda                          # dist/ and lambda.zip (handler lasm-lambda.handler)
# deploy lambda.zip with the AWS console, aws CLI or SAM; recipes: docs/deploy/lambda.md

Cloudflare Workers(以及 Vercel Edge、Netlify Edge、Deno Deploy、Supabase)。

npm create @lasm@latest my-edge -- --template hono --deploy workers
cd my-edge && npm install
npm run build:workers                         # workers/ (wrangler.toml came from lasm init)
npx wrangler dev                              # local workerd; npx wrangler deploy to publish

Fastly Compute、WASI、Spin。

npm create @lasm@latest my-svc -- --template fetch --deploy fastly --deploy spin
cd my-svc && npm install
npm run build:fastly && fastly compute serve  # Viceroy on http://127.0.0.1:7676
npm run build:wasi-http && spin up            # or: wasmtime serve wasi-http/main.wasm

瀏覽器應用程式。

npm create @lasm@latest my-web -- --template web
cd my-web && npm install
npm run dev                                   # http://127.0.0.1:5173, live reload
npm run build                                 # dist/: a static site for any host or CDN

全端 (伺服器 + 瀏覽器 + 已驗證 API)。

npm create @lasm@latest my-app -- --template fullstack
cd my-app && npm install
npm run dev                                   # one URL: http://127.0.0.1:3000
npm run build && npm start                    # Node; also build:workers, build:bun, build:deno

編輯器。 每個專案執行一次 npx lasm editor;lasm init、lasm dev 和 lasm build 也同樣執行。Lean 編輯器 (VS Code 的 Lean 4 擴充套件) 接著解析 import Lasm.* (詳細資訊).

整個堆疊使用 Lean,已驗證

fullstack 範本是一個 Lean 專案,包含伺服器 (Lasm.Fetch)、瀏覽器應用程式 (Lasm.UI) 與它們之間的 API (Lasm.RPC)。請求必須滿足的規則在 Shared.lean 中一次性撰寫並證明,雙方皆匯入此規則 (templates/fullstack):

-- Shared.lean
@[irreducible] def checkTitle (title : String) : Except String Unit :=
  let n := (clean title).length
  if n = 0 then .error "Write something first."
  else if n > maxTitle then .error s!"Keep it under {maxTitle} characters."
  else .ok ()

/-- Proved once, holds in the browser and on the server. -/
theorem checkTitle_ok {title : String} (h : checkTitle title = .ok ()) :
    0 < (clean title).length ∧ (clean title).length ≤ maxTitle := by
  unfold checkTitle at h
  by_cases h0 : (clean title).length = 0
  · simp [h0] at h
  · by_cases h1 : (clean title).length > maxTitle
    · simp [h0, h1] at h
    · omega

def addTodo : Endpoint NewTodo Todo := { name := "addTodo", validate := fun r => checkTitle r.title }
-- Server.lean: storing a todo demands the proof that its title passed the check,
-- and `addTodo.serve` hands the handler that proof (`ok`) after re-validating.
def Store.add (s : Store) (title : String) (_ : checkTitle title = .ok ()) : Store × Todo :=
  let t := { id := s.next, title := clean title, done := false }
  ({ todos := s.todos.push t, next := s.next + 1 }, t)

  addTodo.serve fun req ok => do
    let (s, t) := (← load kv).add req.title ok
    save kv s
    return .ok t
-- Client.lean: a theorem about the browser app: it never sends an invalid title.
theorem add_invalid (m : Model) (e : String) (h : checkTitle m.draft = .error e) :
    (update .add m).2.effects = [.msg (.added (.error (.invalid e)))] :=
  addTodo.call_invalid { title := m.draft } Msg.added "" e h

證明所在位置及其檢查方式。

證明 位置 檢查者
您的定理 (如 checkTitle_ok、add_invalid) 您的 .lean 檔案 每個 lasm build/lasm dev(Lean 會展開它們;若證明失敗即為建置錯誤);純模組亦包含 lake build
Lasm.RPC:處理程式僅在請求通過 validate(Endpoint.decodeRequest_valid)時執行;客戶端永不傳送失敗的請求 (Endpoint.call_invalid)。 library/Lasm/RPC 編譯進 Lasm 的庫中,於每次建置時。
Lasm.UI:DOM 差異相對於 DOM 模型正確,包含鍵值移動 (diff_correct、mount_correct、session_correct)。 library/Lasm/UI/Proofs (約 1,260 行,無 sorry,僅使用標準公理) node scripts/ui/lean-tests.mjs 在檢出 (CI: ui.yml)
Conduit:117 條有關授權、追蹤、收藏、斜線、分頁、共享驗證、JSON 迴圈傳輸和 Markdown 連結安全性的定理 examples/conduit/Proofs, 列於 PROOFS.md npm run proofs 在 examples/conduit (無 sorry,僅使用標準公理;CI conduit.yml)
TodoMVC:每個可達模型皆有效 examples/ui/todomvc/Todo.lean lasm build;CI ui.yml

未證明,改在 CI 中測試:客戶端與伺服器之間的 JSON/HTTP 傳輸、將修補程式套用至真實 DOM 的 JavaScript、Lasm 編譯器與執行時,以及瀏覽器。Lean 本身的編譯器仍被信任,與任何 Lean 程式相同 (UI.md, RPC.md)。

從 Lean 呼叫 JavaScript 與 npm

以一行宣告每個你呼叫的 JavaScript 函式;Lean 型別說明值如何轉換。完整程式 (Node 的全域 fetch):

import Lasm.JS
open Lasm.JS

/-- `await fetch(url, init)` (Node's global fetch) -/
@[js "globalThis" "fetch"] opaque fetch : String → Data → IO Value

def main : IO Unit := do
  let response ← fetch "https://example.com" (obj [])
  IO.println s!"{← response.get "status" Nat}: {(← response.callMethodAwait "text" #[] String).length} characters"

編寫繫結的規則:

  • @[js "module" "export"] opaque name : A → B → IO R 繫結 module.export。模組為 npm 套件 ("marked")、Node 內建 ("node:fs"),或 "globalThis" 用於全域。"new Hono" 呼叫構造函式,"" 為模組自身的值。
  • 在 IO R 結束型別以一次性返回值,在 Async R 結束型別以回傳 promise。Async 繫結會被 await 而不佔用 Lean 執行緒。
  • 使用 String、Nat、Int、Float、Bool、ByteArray、Array、List、Option、 元組、Data(任何 JS 資料)或 Value(JS 物件參考:get、callMethod、callMethodAwait)。 你自己的結構可用 deriving ToJS, FromJS 轉換。
  • Function.ofFn / Function.ofFnReply 將 Lean 函式轉為 JS 回呼。 框架處理程式使用它們(見 hono、express 與 fastify 範本)。
  • npm install 為位於 lakefile 旁的套件。lasm build 檢查每個繫結是否符合已安裝的套件 (Lasm.JS binding check failed: … export "x" is missing),並將正式依賴複製至 dist/node_modules。
  • 每次呼叫都從 Lean 執行緒跨到 Node 主執行緒(約 24 µs),因此 建議使用一次較大的呼叫而非多次小的呼叫。

完整指南,包含 Express、Hono、pg、jose 與 fetch 範例及代理人清單:docs/JS_BINDINGS.md。

測量數值

所有數值皆來自於免費 GitHub 執行器 (4 核 AMD EPYC, Linux x64) 的 CI,候選版本 0.1.0-experimental.40494203854 (2026-10-27),除非另有命名。 完整表格、方法與注意事項:BENCHMARKS.md。

什麼 數值
Node: Hono + Lean 處理程式,冷啟動至首次 HTTP 響應 159 毫秒(純 Node http:快 4.1 倍)
Node: Hono + Lean 處理程式,吞吐量 / p99 延遲 24,911 需求/秒 / 4.2 毫秒(純 Node http:103,134 需求/秒,即 0.24 倍)
Node: Express + Lean 處理程式,吞吐量 18,678 需求/秒
Node: Hono 應用程式 program.wasm(brotli)/ dist/ 166 KiB / 8.5 MiB 加 1.4 MiB node_modules
Node:記憶體,Hono 應用程式閒置 / 負載中 148 MiB / 329 MiB RSS
Lean → JS 呼叫往返 (p50) 24 µs
Cloudflare Workers:Hono 應用程式包 1.40 MiB, 245 KiB gzip (限制 64 MiB; workers 執行 40128600109)
Browser:counter app 總傳輸 / 第一幀 (Chromium) 152 KiB brotli / 30 ms (browser 執行 40288509500)
Browser:js-framework-benchmark vs 手寫 JS 每項操作在 1.7× 之內,大多在 1.2× 之內 (browser 執行 40302274897)
WASI:Lasm.Fetch 模組 / 每個請求在 Fastly 的 Viceroy 0.90 MiB / 1.17 ms 每個請求使用新例項 (wasi 執行 40293231963)
Build:clean Hono build / dev rebuild 在一行更改後 4.7 s / 2.0 s
npm install @lasm/cli:下載 / 已安裝;工具快取在第一次建構後 71 MiB / 403 MiB; 2.5 GB

Lean 在 Node 上支付 WebAssembly 及其執行緒的成本。冷啟動是 CPU 限制的,因此它在小型 serverless CPU 分配上成長,每一次 JavaScript 呼叫都跨執行緒。 Pure‑Lean Std.Http 在 Node 上很慢 (1,290 req/s),因此請使用 Hono、Express、Fastify 或 Lasm.Fetch 作為生產 HTTP。對於千位數的數字進行算術運算 比本機 Lean 更慢(沒有 GMP)。

已知限制

  • 僅限預編譯。 已部署程式無法擴充、評估或編譯 Lean、載入模組資料或外掛,或在執行時使用 Lean 的 C++ 編譯器/核心 (exact list)。證明、策略、巨集與 #eval 於編譯時執行,照常。
  • Lean 4.35.0 必須完全相同。 其他 lean-toolchain 版本會被拒絕,並顯示 訊息。
  • Node: 為應用程式至少提供 512 MB;它會保留約 22 GB 的虛擬位址 空間。預編譯的原生函式庫(-l、共享函式庫)無法連結;套件 的捆綁 C 原始碼會為你編譯。
  • Edge、Bun/Deno、瀏覽器、WASI:單執行緒 Lean;沒有 sockets、processes 或 signals;除 WASI 外沒有檔案。在瀏覽器中,阻塞等待會停止應用程式 除非它使用 --suspend jspi 為帶 JSPI 的瀏覽器構建;請使用 Async。
  • 沒有預製繫結 用於 npm 套件;Lasm.Web 覆蓋核心網路平臺。
  • 編輯器: Lasm.* 匯入在編輯器中於 npx lasm editor (上方) 之後解析。
  • 平臺:不支援 Windows ARM64 以及 Alpine/musl 建構機器(已建構的應用程式在 Alpine 上執行)。託管平臺以其本機工具測試,從不使用真實帳戶。

檔案


支援 Lasm

如果 Lasm 對你有用,或你想看到它成功,我會感謝你的 贊助:github.com/sponsors/lastmjs。 它支援我和對 Lasm 以及其他 Millillion 專案的工作。我的首要目標是每月 250 美元,足以維持一個專用的 Claude Code 帳號 供 Lasm 使用。你也可以透過星標倉庫、嘗試它,並 回報什麼地方出錯。

參考

以下所有內容即為精確合約:所有指令與選項、支援的 機器與平臺,以及已部署 Lean 程式無法執行的具體事項。

CLI 參考

使用 npm install -D @lasm/cli 安裝至專案中(bin 是 lasm),或直接執行而不需安裝:npx @lasm/cli Main.lean。npm create @lasm 會執行相同 lasm init 版本的 @lasm/cli,且引數保持不變。搭配來自 快速入門 的 Main.lean:

npx lasm Main.lean                          # build (dev profile) and run: Hello from Lean! 2 + 3 = 5
npx lasm build Main.lean                    # write dist/ (release profile)
npx lasm --version                          # version, Lean, runtime and platform (for bug reports)
node dist/main.mjs                          # run the deployment: only Node is needed
npx lasm build Main.lean --target lambda    # dist/ and an AWS Lambda zip
指令或選項 範例 效果
執行(預設) npx lasm Main.lean 建置(開發設定檔)並執行 Lean main。npm run dev 專案中的 plain 會執行此操作。
明確執行 npx lasm run Main.lean 與預設指令相同。
執行正式版(Release)建置 npx lasm Main.lean --release 建置並執行 lasm build 所部署的內容。
程式引數 npx lasm Main.lean -- hello "two words" 將引數傳遞給 main (args : List String)。
監控、重新建置、重新啟動 (0.3.0) npx lasm dev、npx lasm dev Main.lean --target workers -- arg 監控 Lean 原始碼與 Lake/npm 設定,在每次變更後重新建置(開發設定檔,一個常駐的建置背景工作程式)並重新啟動程式(--target node、bun、deno;預設:執行 Lasm 的執行環境)。建置錯誤會連同其檔案、行號與來源行一同列印;最後一個正常的程式會繼續執行。Edge 目標只會重新建置其輸出目錄,並由平臺自身的本機伺服器提供服務(Lasm 從不啟動平臺工具或瀏覽器)。--target browser 會以即時重整(--port、--host、--no-watch)提供應用程式服務;多個輸出會一同建置:--target node=Server.lean,browser=Client.lean。--release 會建置正式版設定檔,--no-run 僅會重新建置,rs + Enter 則會重新建置並重新啟動。詳細資訊。
建置 npx lasm build Main.lean 寫入 dist/(正式版設定檔);不執行應用程式。
開發建置 npx lasm build Main.lean --dev 更快寫入 dist/,但不進行大小最佳化。
輸出目錄 npx lasm build Main.lean --output "app dist" 選擇部署目錄。lasm build Main.lean "app dist" 是一個別名。
函式平臺 npx lasm build Main.lean --target lambda 建置 dist/,然後進行封裝:node(預設;僅限 dist/)、lambda(lambda.zip)、lambda-edge(lambda-edge.zip)、vercel(.vercel/output)、netlify(netlify/functions/lasm)、azure(azure-functions/)、gcf(gcf/)。--target=vercel 亦可運作。Lasm 絕不會安裝或啟動平臺的 CLI。操作說明。
Edge 隔離執行環境 (0.2.0) npx lasm build Main.lean --target workers 使用純 JS 主機進行單執行緒重新連結:workers(workers/)、vercel-edge(api/lasm.mjs、api/_lasm/)、netlify-edge(netlify/edge-functions/lasm.mjs、netlify/lasm/)、deno-deploy(deno/main.mjs)、supabase-edge(supabase/functions/<name>/;Asyncify,由於 Supabase 的執行環境沒有 JSPI)。Edge 執行環境內嵌於 @lasm/cli 中。指南:Workers、Vercel Edge、Netlify Edge、Deno Deploy、Supabase;設計與限制。
Bun 與 Deno (0.2.0) bunx --bun @lasm/cli Main.lean、deno run -A npm:@lasm/cli Main.lean、bun create @lasm my-app --template hono 編譯器以 Bun 或 Deno 作為唯一的 JavaScript 執行環境執行,並產生相同的位元組碼。在 Bun 或 Deno 下,預設目標即為該執行環境:--target bun 寫入 bun/main.mjs,--target deno 寫入 deno/main.mjs(可攜式設定檔)。Deno 會略過發布未滿 24 小時的 npm 版本:剛發布後,請傳遞 --minimum-dependency-age=0。Bun 與 Deno。
瀏覽器 (0.3.0) npx lasm build Main.lean --target browser 將 dist/ 寫入為靜態網站:app.<hash>.js(載入器:mount(element, { flags, hydrate })、自動掛載 <div data-lasm-app>)、app.<hash>.wasm、brotli 與 gzip 複本、app.js、index.html(注入載入器的你的檔案,或產生的頁面)、你的 public/ 檔案與 lasm-manifest.json。--suspend jspi 允許封鎖等待在瀏覽器具備 JSPI 時暫停。--bundler 將 npm 匯入留給打包工具(Bundler);在 Vite 中:import lasm from '@lasm/cli/vite',然後 import app from './Main.lean?lasm'。來自 Lean 的網頁 API:import Lasm.Web。指南:BROWSER.md、UI.md、部署。
WASI、wasi-http、Fastly (0.3.0) npx lasm build Main.lean --target wasi(或 wasi-http、fastly) 無 JavaScript。wasi 寫入 wasi/main.wasm(wasi_snapshot_preview1:wasmtime run --dir . wasi/main.wasm、wasmer、node:wasi);wasi-http 寫入 wasi-http/main.wasm,一個 wasi:http/proxy@0.2 元件(wasmtime serve、Spin);fastly 寫入 bin/main.wasm 與 pkg/<name>.tar.gz(fastly compute serve/deploy)。無通訊端、處理程序或訊號。WASI.md、Fastly。
純 Lean 中的 HTTP (0.3.0) import Lasm.Fetch … def main := Lasm.Fetch.serve handle 單一 Request → Async Response 處理常式可提供 Node($HOST:$PORT)、Edge 目標、Bun、Deno、Fastly、wasi-http 以及作為 CGI 的 WASI 服務;Lasm.Fetch.fetch 傳送請求;Response.streaming 進行串流。FETCH.md。
強制重新建置 npx lasm build Main.lean --rebuild 忽略快取的應用程式建置。
詳細診斷 npx lasm Main.lean --verbose 顯示編譯器與連結器詳細資訊。
說明 npx lasm --help、npx lasm init --help 顯示用法;-h 是一個別名。
版本 npx lasm --version 列印 lasm 0.3.5 (@lasm/cli; Lean 4.35.0; Node 26.12.1; linux-x64);-v 是一個別名。
新專案 npm create @lasm@latest my-app -- --template hono 或 npx @lasm/cli init my-app --template hono 在新的或空白目錄中建立一個 Lake 專案(Main.lean、App.lean、lakefile、lean-toolchain、package.json、README.md、.gitignore,伺服器則包含 Dockerfile 與 .dockerignore)。範本:請參閱 在此開始。--deploy(可重複)會新增平臺的檔案與 npm run build:<target>:lambda(Dockerfile.lambda,一個容器映像檔)、lambda-zip、lambda-edge、vercel、netlify、azure、gcf;workers、vercel-edge、netlify-edge、deno-deploy(範本 hono、fetch、fullstack)、supabase-edge(hono);fastly、wasi-http、spin(fetch、fullstack)、wasi(fetch、plain)。fetch 與 fullstack 範本及其目標為 0.3.0 版本。僅會寫入檔案;接著請執行 npm install。-t 是 --template 的別名;--template=hono 亦可使用。
封裝現有組建 npx lasm package --target lambda 封裝已建置的伺服器(預設為 dist/),用於函式平臺而不需重新建置:目標與輸出與 lasm build --target 相同,但 node 除外。--output PATH 用於選擇輸出。會檢查平臺的容量限制。除非有 --allow-dev,否則拒絕開發組建。對於瀏覽器組建,npx lasm package dist --target browser 會針對 lasm-manifest.json 檢查每個檔案並寫入 _headers。
編輯器支援 (0.3.0) npx lasm editor 讓 Lean 編輯器(VS Code 的 Lean 4 擴充功能、任何 Lean 語言伺服器客戶端)解析此 Lake 專案中的 import Lasm.*:將 Lasm 的 Lean 4.35.0 與其函式庫連結為 elan 工具鏈 lasm-4.35.0-…,並將其設定為該目錄的 elan 覆寫(elan override unset 可復原)。lasm init(當 Lasm 的 Lean 已安裝時)、lasm dev 與 lasm build 會執行相同操作,每個專案列印一行,但在 CI 中或使用 LASM_EDITOR=0 時除外。編輯器設定。
快取修復 npx lasm cache repair 離線驗證並移除無效的工具與放棄的暫存。拒絕作用中的組建。

--rebuild 與 --verbose 適用於 run 與 build。--output 與 --target 僅適用於 build;-- 之後的引數僅適用於 run。應用程式的結束狀態會被保留。npx lasm --version (-v) 會列印版本、Lean 發行版本、JavaScript 執行環境與平臺(請將其包含在錯誤回報中)。沒有 install、clean 或 uninstall 子指令。

組建設定檔 (Build profiles)。兩者都會使用相同的函式庫連結同一個程式且具備決定性。release(lasm build、lasm Main.lean --release):完整的 Binaryen 最佳化;位元組可重現;適用於部署。dev(lasm Main.lean、lasm dev、lasm build --dev):略過這些處理程序,並以 -O1 編譯您的模組;其行為相同,建置速度快上幾秒鐘,且其 program.wasm 大約大 15–20 %。開發重新組建會從專案先前的組建開始,因此其位元組可能取決於該組建。build-info.json 會記錄 "profile"。除非您傳入 lasm package,否則 lasm build --dev --target <platform> 與 --allow-dev 會拒絕開發組建。

環境變數(皆為選填):

變數 範例 效果
LASM_TOOLCHAIN_CACHE LASM_TOOLCHAIN_CACHE=/data/lasm-cache npx lasm Main.lean 移動管理的工具快取(預設位置)。
LASM_BUILD_JOBS LASM_BUILD_JOBS=2 npx lasm build Main.lean Binaryen 最佳化工具的執行緒(預設:CPU 數量,最多 8 個)。任何值的輸出都相同。
LASM_EDITOR LASM_EDITOR=0 npx lasm build Main.lean 0:lasm init、lasm dev 與 lasm build 不會更動編輯器設定(編輯器設定)。
LASM_THREAD_POOL(已建置的應用程式;0.3.0) LASM_THREAD_POOL=0 node dist/main.mjs 在 main 之前啟動的 Lean 執行緒背景工作執行緒(0–64,預設 1)。測量資料。
LASM_ARTIFACT_SOURCE LASM_ARTIFACT_SOURCE=npm npx lasm Main.lean auto(預設):存在時使用 @lasm/… npm 工具套件,否則使用 HTTPS;npm:絕不直接下載;https:忽略 npm 套件。
LASM_DOWNLOAD_ATTEMPTS、LASM_DOWNLOAD_CONNECT_MS、LASM_DOWNLOAD_IDLE_MS、LASM_DOWNLOAD_TOTAL_MS LASM_DOWNLOAD_TOTAL_MS=14400000 npx lasm Main.lean 下載重試與逾時(預設值與範圍)。
NODE_USE_ENV_PROXY、HTTPS_PROXY、NO_PROXY、NODE_EXTRA_CA_CERTS(Node 自身的) NODE_USE_ENV_PROXY=1 HTTPS_PROXY=http://proxy:8080 npx lasm Main.lean 代理伺服器與私有 CA(企業網路)。

原始程式碼中的其他 LASM_* 變數是維護人員的診斷工具,並非受支援的介面。

安裝。 npm install @lasm/cli 透過您自己的 registry、proxy 與 cache,將 Lean 與建置工具以精確鎖定版本(exact-pinned)的 @lasm/… npm 套件形式提供給您的平臺。Lake/Lean-import 資料,以及僅針對含有 C 程式碼之 Lake 專案的 C 層級(@lasm/lean-c-<platform>),會在首次使用時透過您的 npm 進行抓取。 終端機會顯示進度;後續的建置會重複使用已驗證的工具與未變更的輸出。在一部沒有下載過的新機器上,首次 Hono 建置在 CI 執行器上花費了 25.7 秒(Linux x64)、27.8 秒(Linux arm64)、44.4 秒(Windows)、58.7 秒(Apple Silicon)以及 141.9 秒(Intel Mac) (建置時間,執行編號 40131930601)。 快取位置與復原:NODE_SUPPORT.md、 INSTALLATION_HARDENING.md。 僅有當 Lake 專案具有 Git 或 Reservoir 相依性時才需要 Git;Lasm 會使用您 PATH 上的 git,並在遺失時提示如何安裝。

現有的 Lake專案 可直接從專案目錄使用 npx lasm build Main.lean 進行建置。請在 lean-toolchain 中釘選 leanprover/lean4:v4.35.0;其他版本將會被 Unsupported Lean toolchain … Lasm supports Lean v4.35.0 拒絕。 各套件相容性列表 涵蓋 Batteries、Cli、LSpec、Plausible、Aesop、Qq、leansqlite、UnicodeBasic、MD4Lean、lean-zip、lean4-parser、lean-redis 與其他套件;未列在其中的套件尚未經過測試。

支援的環境

使用 Lasm(編譯器)進行建置的機器:

環境 架構 狀態
Ubuntu 24.04 LTS x86-64、ARM64 CI 中的已安裝套件與複製部署驗證;參考平臺。
其他 Linux 發行版本 x86-64、ARM64 未作為建置機器驗證;工具需要 glibc 2.34。Alpine/musl 不是建置機器(建置好的應用程式可在其上執行)。
macOS 15 x86-64、ARM64 CI 中的已安裝套件與複製部署驗證。含有 C 程式碼的 Lake 專案需要 Xcode Command Line Tools SDK。
Windows Server 2025 / Windows x64 x86-64 CI 中的已安裝套件與複製部署驗證。
Windows ARM64 ARM64 不支援:Lean 與 Emscripten 皆未發布 Windows ARM64 預先建置版本。
Bun 1.4.4 與 Deno 2.9.6 作為編譯器的執行階段(0.2.0) 上述全部 在 CI 中於所有五個平臺上進行測試,亦可在 PATH 上無 Node 或 npm 的情況下執行(BUN_DENO.md)。

Node 24 或更新版本(已測試:24.0.0、24.22.1、26.12.1)。無引擎旗標。確切測試的成品:NODE_ACCEPTANCE.md。

支援的平臺

Node dist/ 需要 Node 24 或更新版本(Node 22 及更舊版本會以 This application requires Node 24.0.0 or newer 終止)以及至少 512 MB 記憶體。它可以從任何支援平臺上的建置執行於 Linux x64 與 arm64(glibc 2.28+ 或 musl/Alpine),並可在建置機器自身的平臺上執行。請複製 dist/ 的全部內容;該處不需要 Lean 原始碼、npm install 或建置工具。下方各平臺皆已在 CI 中使用指定的本地執行階段、映像檔或模擬器進行測試;均未使用真實的雲端帳戶。完整矩陣:DEPLOYMENT.md。

平臺 在 CI 中測試使用的專案
Linux x64 與 arm64(glibc 2.28+)、Node 24+ ubuntu-24.04 與 ubuntu-24.04-arm 上的 Node 24.0.0、24.22.1 與 26.12.1
macOS (x64、arm64) macos-15-intel 上的 Node 24.0.0 與 24.22.1;macos-15 上的 Node 24.22.1;使用 Node 26.12.1 進行已安裝驗證
Windows x64 windows-2025 上的 Node 24.0.0 與 24.22.1;使用 Node 26.12.1 進行已安裝驗證
Docker / Kubernetes node:24-bookworm-slim、node:26-bookworm-slim、node:24-bullseye-slim、Ubuntu 22.04/24.04;唯讀、512 MB、x64 與 arm64(Kubernetes 資訊清單未在 CI 中套用)
Google Cloud Run、Fly.io、Railway、Render、Heroku 相同的容器映像檔與 Dockerfile;平臺本身絕不會被部署至其上
AWS Lambda(容器映像檔) 透過 Runtime Interface Emulator 的 public.ecr.aws/lambda/nodejs:24 + AWS Lambda Web Adapter,x86_64 與 arm64;amazonlinux:2023
AWS Lambda (.zip, nodejs24.x) 透過 Runtime Interface Emulator 在 public.ecr.aws/lambda/nodejs:24 中執行每個伺服器範本的 --target lambda zip,支援 x86_64 與 arm64,以及 API Gateway REST/HTTP、函式 URL 與 ALB 事件;sam local invoke 與 sam local start-api
Lambda@Edge (origin request, x86_64) 使用相同的映像檔與模擬器並結合 CloudFront origin-request 事件
Vercel Functions (Node.js 24) vercel build 離線;位於 public.ecr.aws/lambda/nodejs:24 中 @vercel/node 下方的函式
Netlify Functions (v2) netlify build --offline 與 netlify dev --offline;在 public.ecr.aws/lambda/nodejs:24 中的部署 zip
Azure Functions (Node.js v4 model, Linux) Azure Functions Core Tools func start
Google Cloud Functions (gen2, nodejs24) 基於 Ubuntu 24.04 的 Functions Framework;Google Cloud 的 buildpacks 映像檔
Alpine/musl 容器 node:24-alpine、node:26-alpine、x64 與 arm64,唯讀,512 MB
DigitalOcean App Platform (gVisor) gVisor 的 runsc 下方的容器映像檔,x64
Cloudflare Workers (0.2.0) wrangler dev 4.152.0 (workerd),並受 Free 方案的預算限制
Vercel Edge (0.2.0) vercel build 離線與 Vercel 的 edge-runtime
Netlify Edge (0.2.0) netlify build --offline 與 netlify dev --offline
Deno Deploy (0.2.0) 執行 deno/main.mjs 的 Deno 2.9.6
Supabase Edge Functions (0.2.0) Docker 中的 Supabase edge-runtime v1.77.8 映像檔
Bun 與 Deno 程式 (0.2.0) 在所有五個平臺上的 Bun 1.4.4 與 Deno 2.9.6
WASI, wasi-http, Spin, Fastly (0.3.0) wasmtime 49.0.4 (run, serve)、wasmer 7.4.2、Node 的 node:wasi、Spin 4.2.2、Viceroy 0.21.1 (wasi.yml)
瀏覽器 (0.3.0) Playwright 1.63.0:ubuntu-24.04 上的 Chromium 153 與 Firefox 155;ubuntu-24.04 與 macos-15 上的 WebKit 26.6 (browser.yml)

在 Windows 上建置並複製到 Linux(非透過 docker build)的 dist/ 需要 chmod 755 dist/host/native/process/linux-*。Node 的 --jitless 無法運作(它會停用 WebAssembly)。對虛擬記憶體設限的主機(ulimit -v、vm.overcommit_memory=2)會拒絕該 Node 建置,因為它預留了大約 22 GB 的位址空間。Node 26 的官方二進位檔在自行安裝 tarball 的極簡映像檔上需要 libatomic1。

精簡支援與限制

建置強制執行超前執行(ahead-of-time execution)。 支援一般函式、遞迴、閉包、歸納型別、模式比對、型別類別、相依型別與編譯好的 IO。匯入、巨集、精緻化(elaboration)、策略(tactics)、衍生(deriving)、證明與 #eval 會在託管的原生 Lean 中於編譯期間執行。初始設定式算作執行階段相依性:廣泛的 import Lean 可能會保留編譯器;當只有巨集或策略需要時請使用 meta import Lean,而執行階段資料庫則使用較窄的匯入(帶有 Lean.Json 的 import Lean,以及 deriving ToJson, FromJson,建置並執行)。每次拒絕都會詳細說明:Lasm 會列印從你的程式碼到編譯器程式碼的相依鏈,當廣泛匯入是原因時,則會列印你的程式碼所使用的較窄模組。部署的程式碼會如原生 Lean 一樣遵守 LEAN_ABORT_ON_NONLINEAR=1。各平臺的結果:語言涵蓋範圍。

部署的應用程式無法使用:

執行階段無法使用 範例與確切邊界
載入 Lean 模組資料或尋找編譯器安裝 Lean.importModules、Lean.withImportModules、模組資料讀寫器、Lean.findSysroot、Lean.initSearchPath;部署的 .olean/IR 載入。
評估或編譯新的 Lean code Lean.Environment.evalConst、直譯器評估、Lean REPL、執行階段精緻化/編譯、評估依名稱載入的宣告。允許呼叫一般已編譯的函式。
使用 Lean 的編譯器/核心執行階段狀態 執行階段精緻化、核心證明檢查、編譯器環境、需要 Lean C++ 編譯器/核心的語言伺服器機制。如果其可達相依性通過檢查,則允許純 Lean 資料操作。LeanExport.parseStream 會透過核心建置 Lean.Expr 值並遭到拒絕。
動態載入可執行外掛程式 Lean/Wasm 外掛程式載入、dlopen/dlsym(呼叫 dlopen 的 C 程式碼會獲得一個永遠失敗的實作)、執行階段 Lean 符號查詢。

建置會檢查可達成的執行階段相依性,包含匯入的函式庫與間接呼叫;即使您的輸入不會執行該分支,可達成的禁止呼叫仍會遭到拒絕,且連結器移除的死碼不在此限。啟動器也會在載入應用程式之前,拒絕遺失、過時或不相容的功能記錄(這是一致性檢查,而非安全性沙箱)。這裡沒有大型相容性備援機制。

Lake 套件。僅為編譯而匯入的模組(例如戰術、展開器,例如 Aesop、Qq 或 import Lean 用於巨集)不會將 Lean 的編譯器留在部署中。Lasm 僅在程式使用其定義或註冊的東西時,或者當它們是程式執行 I/O 或呼叫 C 的自有程式碼時,才會執行模組的初始化函式(--verbose 顯示略過了多少個)。套件所綑綁的 C 原始程式碼(extern_lib、moreLinkObjs,例如 leansqlite 的 SQLite)會使用 Lean 自家的 clang 進行編譯,作為 C 層級取得一次(39–52 MB);不需要系統 C 編譯器(macOS 需具備適用於 C 函式庫標頭檔的 Xcode Command Line Tools SDK)。無法連結預先建置的原生函式庫(共用函式庫、-l 選項:libcurl、OpenSSL、libpq、BLAS);建置會列出函式庫與套件名稱。

非版本釋出保證。主控臺輸出、引數、結束程式碼、本機 Lake 匯入以及選定的語言/檔案系統測試具備原生與 Node 的對照測試,且在 0.1.0 之前,Lean 支援執行階段的上游套件與 19 個生態系統專案在所有五個平臺上執行,與前一個接受的候選版本相比零迴歸(0.1.0 閘道)。不保證完整的 IO.FS、並行處理、子處理序/訊號/終端機一致性、每個第三方函式庫以及完整的上游套件(I/O 差距)。大數字(超過 63 位元的 Nat/Int)使用 Lean 自家的任意精度程式碼來取代 GNU MP,因此應用程式不包含任何 LGPL 程式碼;結果與原生 Lean 相同,但在 Wasm 中,10,000 位數的乘法大約比使用 GMP 慢 5 倍,而 Nat.gcd 大約慢 60 倍(數字)。Lake 相依性會使用您的系統 Git(系統 Git)。

版本釋出與來源追溯

0.1.0 是第一個 npm 版本(注意事項);0.2.0 新增邊緣目標與 Bun/Deno(注意事項);0.3.0 新增瀏覽器、Lasm.UI、全端應用程式、WASI/Fastly 與編輯器支援(注意事項);0.3.1 將入門程式碼納入 MIT-0 授權並新增錯誤回報指標(注意事項);0.3.2 修復 Std.Internal.UV 通訊端、計時器與訊號(注意事項);0.3.3 從未發布,其變更已在 0.3.4 中隨附(注意事項);0.3.5 更新 README 與 Conduit 範例(注意事項)。Lasm 的 npm 套件(@lasm/cli、@lasm/create 以及 @lasm/… 工具套件)僅透過 release.yml 工作流程發布,並透過具備來源追溯功能的 npm 受信任發布機制進行:沒有任何 npm 權杖存在。版本釋出是一個會提升 package.json 版本的 Pull Request,且僅在釋出的 Commit 通過 release-checks 狀態(五平臺候選檢查;邊緣、Bun/Deno、瀏覽器、Lasm.UI、WASI/Fastly、全端、單元與開發迴圈檢查;以及確切套件的 npm 排練)後才會發布。發現錯誤?npx lasm --version 會提供錯誤回報表單要求的版本行。npm view @lasm/cli@<version> 顯示來源追溯,而專案中的 npm audit signatures 則可進行驗證。詳細資訊:RELEASING.md。

授權條款

Lasm 的原始碼採用 MIT License(版權所有為 Jordan Last)。 入門程式碼——lasm init 與 npm create @lasm 放到新專案中的所有內容、templates/、examples/ 以及本 README 和 docs/ 中的程式碼範例——在所有版本中也採用 MIT No Attribution (MIT-0):它是你的,無需署名。@lasm/create 採用 MIT,而 @lasm/cli 的 license 欄位是 Lasm 的 MIT、MIT-0 及其捆綁的所有元件的 SPDX 表示式,其文字位於 licenses/ 中。授權審計列出了每個分發的元件、其授權以及如何滿足各項義務。

  • 建置 dist/。 THIRD_PARTY_NOTICES.txt 從 Lasm 的 MIT 宣告與 Lasm 修改過的 Lean 檔案清單開始,接著是建置內容的授權:Lean 的執行環境與標準程式庫 (Apache-2.0)、Emscripten (MIT OR NCSA)、musl、LLVM libc++、libc++abi、libunwind 與 compiler-rt、mimalloc、libuv、koffi 以及 Lasm 的主機 (MIT)。應用程式不包含任何 copyleft 程式碼。licenses/<package>/ 存放編譯進 program.wasm 的所有 Lake 相依性的授權檔案;透過 npm 互通性,node_modules/ 存放各自帶有授權的每個套件。當你分發 dist/ 時,請保留這些檔案。
  • Edge、瀏覽器、WASI、Fastly 與 wasi-http 輸出會獲得相同的宣告,並經重寫以說明其檔案包含的內容,且為自動產生:每個輸出目錄中的一個 THIRD_PARTY_NOTICES.txt、平臺上綑綁的 JavaScript 上的簡短 /*! … */ 授權橫幅(edge 黏合程式碼、瀏覽器載入器)、伺服器端輸出之 Wasm 內部完整的宣告檔案(一個 lasm.notices 自訂區段,因此它會隨著每次部署一起傳輸)、Fastly 套件中的檔案,以及 Vite 建置中的 THIRD_PARTY_NOTICES.lasm.txt。這對你的應用程式意味著什麼:docs/LICENSING.md。
  • 工具套件與發布封存檔。 每個 @lasm/… 工具套件都有一個 SPDX license 欄位與封存檔的授權檔案。Lean 封存檔所包含的 (L)GPL 部分(GNU MP、GNU C Library、GCC 的執行環境程式庫、Linux UAPI 標頭檔、MinGW-w64)的確切原始碼以及 Lasm 自己的原始碼,都作為發布它們的發布版本的資產進行映象備份(lean-4.35.0-tiers-v2)。 Lasm 不隨附 Git 與 Apple SDK 檔案。
  • Lean 名稱與標誌是 Lean FRO 的商標。Lasm 未附屬於 Lean FRO,也未得到其背書。