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.1→v1.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 av1.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'sm.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.shpullswyn-<platform>.tar.gzandrelease.ymlpublishes exactly those names (wyn-linux-x64/arm64,wyn-macos-arm64/x64tar.gz,wyn-windows-x64.zip). Good.
3. Snippet integrity
WYN=…/wyn python3 scripts/check_snippets.py → 393 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.
4. Dead links / nav
- 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/20docs 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].mapsingle-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_recvbut never showed them. Added short, run-verified sections forawait_all,parallel { }, andTask.try_recv(int? / Some/none) todocs/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.mdoverstates / 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 andCrypto.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 theawspackage as working until then. - [REC]
docs/known-limitations.mdmay 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