Skip to content

Wyn site review — 2026-07-28 (v1.20.0)

Review-first pass against compiler repos/wyn/wyn = v1.20.0. Snippet gate was green before and after edits (see totals at bottom). Legend: [FIXED] applied in this pass · [REC] recommended, left for owner.


1. Messaging — does it sell 1.20?

The homepage is strong and already leads with the real strengths: Python-feel/C-speed, one binary, no VM/GC, fast built-in concurrency, git-URL packages, C FFI, experimental GPU. The numbers strip (build time, spawn+await, 49KB binary, req/s) is concrete and honest. The "Where Wyn stands" table honestly shows the rows Wyn loses.

  • [FIXED] Buried lede: the v1.20 blog post was not surfaced anywhere on the homepage. A fresh, well-written release post existed (blog/v120-release.md) but the homepage had zero link to /blog. Added a small release pill in the hero linking to the v1.20 post — the single highest-value messaging fix.
  • The concurrency pillar already carries the 1.20 story ("~18x faster … 1M tasks in ~0.66s") and the GPU pillar is appropriately hedged (experimental/opt-in/float32/ single-op). No stale hero claims found.

2. Version freshness

  • [FIXED] Footer MIT License - v1.19.1v1.20.0 (.vitepress/config.js).
  • [FIXED] docs/faq.md — two "Wyn v1.19.1 ships with…" → v1.20.0 (JSON-LD + prose).
  • [FIXED] docs/guides/version-compat.md — added a v1.20.0 (Current) section, demoted v1.19.1, and updated the frontmatter description ("v1.0 to v1.19" → v1.20).
  • [FIXED] docs/guides/tour.md — "current compiler (v1.19)" → (v1.20).
  • [FIXED] playground.md — footer label "runs Wyn v1.19.1" → v1.20.0; the demo snippet's m.set("version", "1.19") bumped to 1.20 for consistency (it's example data, not a claim, but harmless to keep current).
  • Install instructions match the actual release artifacts: install.sh pulls wyn-<platform>.tar.gz and release.yml publishes exactly those names (wyn-linux-x64/arm64, wyn-macos-arm64/x64 tar.gz, wyn-windows-x64.zip). Good.

3. Snippet integrity

WYN=…/wyn python3 scripts/check_snippets.py393 snippets, 349 passed, 44 skipped, 0 failed, both before and after edits. Newly-added doc snippets were run against the compiler (await_all → [4, 9, 16], parallel → 42 200, try_recv → got 42) and carry wyn-check: run out=… assertions.

  • No broken nav/sidebar links found; blog auto-discovers via blog.data.js (createContentLoader) and correctly lists the v1.20 post at the top (dated 2026-07-28, sorted newest-first).
  • [REC] Sidebar "Release Notes" section stops at What's New in v1.16 — there are no whats-new-v117/18/19/20 docs pages (those releases live only as blog posts). Not broken (version-compat.md is the canonical history + blog carries the narratives), but the section reads stale. Consider either dropping the section in favor of version-compat + blog, or backfilling. Left as-is (low risk to leave, churny to fix).

5. Docs completeness for 1.20 capabilities

  • [FIXED] GPU had NO docs page at all. Created docs/guides/gpu.md (concise, accurate, mirrors the verified blog content: opt-in [gpu] wyn.toml keys, [float].map single-op, Metal/OpenCL runtime-loaded, CPU fallback, float32 caveat, experimental). Added to nav sidebar under Guides.
  • [FIXED] spawn-await doc referenced await_all/parallel/try_recv but never showed them. Added short, run-verified sections for await_all, parallel { }, and Task.try_recv (int? / Some/none) to docs/concurrency/spawn-await.md.
  • Concurrency (spawn/await/channels/Shared/select) and the memory model are otherwise well documented (docs/concurrency/*, docs/guides/memory.md).

6. Polish

  • Mobile: hero grid collapses to one column at ≤960px; numbers strip reflows 5→3→2 columns; pillars 3→2→1; tables scroll. Responsive story is solid.
  • [FIXED] Removed stray empty working-dir file wyn_cc_err.txt (compiler residue; gitignored, not tracked, but sitting in the tree).
  • Minor, not fixed (churn > value): binary size is quoted as 49KB (hero/numbers), 50KB (blog), 53KB (zero-to-running) — all plausible for different programs; terminology is otherwise consistent.

7. Honesty

  • GPU claims are appropriately hedged everywhere (experimental, opt-in, float32, single-op, CPU fallback). Good.
  • Spawn is correctly described as "close to Go, not ahead of it" in the blog and the homepage doesn't claim otherwise. Good.
  • [REC] docs/guides/aws.md overstates / is stale. Its warning says the crypto the SigV4 signer needs is "on main but not yet in v1.19.1 — build from source or wait for the next release." We're now past that release, but I verified against v1.20.0 that the crypto path is still broken: Crypto.hmac_sha256_hex(...) returns an empty string and Crypto.sha256_hex(...) mis-types (checker: "Cannot compare int with string"). This is a compiler bug, out of scope for a site pass. Left the protective warning in place but it should be re-verified/rewritten once the crypto codegen is fixed — do not advertise the aws package as working until then.
  • [REC] docs/known-limitations.md may be stale vs the 1.20 concurrency rework. It states "Recursive spawn … the thread pool can deadlock" and "closures can't be spawned"; 1.20 made the coroutine scheduler the default and fixed a channel livelock. Worth re-validating each bullet against v1.20 (out of scope to verify all here).

Snippet-check totals (final)

Wyn snippet check: 393 snippet(s), 349 passed, 44 skipped, 0 failed

MIT License - v1.20.0