Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
a7f9ed7
docs(pages): language guide — web rendering of Norman's TUTORIAL.md +…
mparrett Jul 23, 2026
8f18937
docs: link the language guide from landing page, tour §7, and README
mparrett Jul 23, 2026
7d47225
feat(pages): REPL deep links — #code= prefill + run-it links on the g…
mparrett Jul 23, 2026
438267c
build(pages): size-tuned wasm — dedicated profile + wasm-opt (-36% wire)
mparrett Jul 23, 2026
230ed75
feat(wasm): ReplVm class — independent VM instances for the browser
mparrett Jul 23, 2026
456a3d7
feat(pages): run-in-place — the guide executes and verifies itself in…
mparrett Jul 23, 2026
2c43863
fix(pages): pin binaryen 129 — apt's wasm-opt rejects Rust's sign-ext…
mparrett Jul 23, 2026
74a3978
feat(pages): guide UX pass — live steppable hero, step-first blocks, …
mparrett Jul 23, 2026
aee45e2
fix(pages): hero hint persists as a session comment — no first-step jump
mparrett Jul 23, 2026
1d747ab
fix(pages): masthead reads intro-then-terminal; quick start stays on …
mparrett Jul 23, 2026
3062438
feat(pages): quick start recommends the page; REPL links open in new …
mparrett Jul 23, 2026
c383e7d
fix(pages): hero placeholder retires once the session starts
mparrett Jul 23, 2026
d89d63a
feat(pages): unify guide on a cursor model — hero + doc blocks share …
mparrett Jul 23, 2026
e317660
docs(pages): guide dek leads with the thing, not the byline
mparrett Jul 25, 2026
d120768
docs(pages): vary the deks; attribute once per page
mparrett Jul 25, 2026
612be4f
docs(pages): keep the meta strip on one line
mparrett Jul 25, 2026
30ab47d
docs(pages): say what is actually verified, and by what
mparrett Jul 25, 2026
4a94123
build(pages): correct the wasm size figures to measured values
mparrett Jul 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,28 @@ jobs:
FMPL_BOOTSTRAP_PHASE=1 cargo build -p fmpl-bootstrap
touch fmpl-core/build.rs

- name: Build fmpl-wasm (release)
run: cargo build -p fmpl-wasm --release --target wasm32-unknown-unknown
- name: Build fmpl-wasm (size-tuned wasm-release profile)
run: cargo build -p fmpl-wasm --profile wasm-release --target wasm32-unknown-unknown

# Must match the exact wasm-bindgen version pinned in fmpl-wasm/Cargo.toml.
- name: Install wasm-bindgen CLI
run: cargo install wasm-bindgen-cli --version 0.2.114 --locked

- name: Generate JS bindings into the site
run: |
wasm-bindgen target/wasm32-unknown-unknown/release/fmpl_wasm.wasm \
wasm-bindgen target/wasm32-unknown-unknown/wasm-release/fmpl_wasm.wasm \
--out-dir docs/repl --target web --no-typescript

# Pinned binaryen release — apt's is too old to accept the sign-ext
# ops Rust emits by default. 129 matches the locally verified build.
# Rust also emits bulk-memory ops by default; wasm-opt must be told.
- name: Shrink with wasm-opt
run: |
curl -sL https://github.com/WebAssembly/binaryen/releases/download/version_129/binaryen-version_129-x86_64-linux.tar.gz | tar xz
binaryen-version_129/bin/wasm-opt -Oz --enable-bulk-memory --enable-nontrapping-float-to-int \
--strip-producers docs/repl/fmpl_wasm_bg.wasm -o docs/repl/fmpl_wasm_bg.wasm
ls -l docs/repl/fmpl_wasm_bg.wasm

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
Expand Down
13 changes: 13 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -106,3 +106,16 @@ fmpl-persistence = { path = "fmpl-persistence" }
# centralizes the relative-path knowledge.
fmpl-core = { path = "fmpl-core" }
fmpl-scenario-runner = { path = "fmpl-scenario-runner" }

# Size-tuned profile for the browser wasm build only (pages.yml). Safe with
# panic="abort": VM errors are Results by design, and the one catch_unwind in
# the tree is in a test, which never builds under this profile — so unwinding
# machinery is pure weight here. With wasm-opt: 2.30MB -> 1.19MB raw,
# 553KB -> 374KB gzipped (measured against the bootstrapped build).
[profile.wasm-release]
inherits = "release"
opt-level = "z"
lto = "fat"
codegen-units = 1
panic = "abort"
strip = true
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ image is the source of truth; source files are a bootstrapping convenience.

New here? Read the **[engineering tour](https://nnunley.github.io/fmpl/fmpl-tour.html)** —
architecture, verified capabilities, and the honest gap ledger, in one page —
or try the **[browser REPL](https://nnunley.github.io/fmpl/repl.html)**
learn the language from the **[language guide](https://nnunley.github.io/fmpl/fmpl-guide.html)**
(the web rendering of [`TUTORIAL.md`](TUTORIAL.md)), or try the
**[browser REPL](https://nnunley.github.io/fmpl/repl.html)**
(fmpl-core compiled to WebAssembly, no install).

> **Status: experimental.** FMPL is a working prototype under active
Expand Down
Loading
Loading