We replaced our React front end with Go and WebAssembly

WebAssembly for Frontends

  • Many see this as a strong demonstration of WASM’s promise: bringing “any language” to the browser and enabling backend‑oriented teams to build rich UIs.
  • Others argue WASM is appropriate for niche, heavy client‑side computations (FFmpeg, game engines), but “absurd” for typical CRUD/DOM apps where JS/TS excel.
  • There’s relief that the app uses DOM elements, not canvas‑only rendering (which would harm accessibility).

Go + go-app Tradeoffs

  • go-app’s Go‑based virtual DOM is praised for compiler‑checked UI, editor completion, and reuse of Go logic, though some find the “HTML via Go function calls” style ugly versus template‑based approaches.
  • Go WASM currently produces large binaries (tens of MB uncompressed) due to its runtime and async model; new Go releases and alternatives (TinyGo, Zig, Rust) are discussed as ways to shrink output.
  • They replaced JSON with gob over WebSockets for performance; commenters note gob is not hardened against adversarial input and has caused perf/robustness issues elsewhere.

Bundle Size, Performance, and Architecture

  • 32MB (≈4MB compressed) is seen as huge compared to typical JS/WASM bundles, but some argue it’s acceptable for a professional app used all day, where caching amortizes cost.
  • Concerns remain about startup time, CPU/battery use, and multi‑tab initialization; suggestions include workers, chunked WASM loading, and (hypothetical) shared runtimes.
  • Some question why so much data crunching happens client‑side instead of pre‑aggregation on the backend; counterpoint is that pushing work to clients can control infrastructure costs.

Was React Really the Problem?

  • Several are unconvinced by the claim that “TypeScript/React didn’t scale” for a complex UI; they point to virtualized tables and standard browser techniques that can handle huge datasets.
  • Some who tried the new UI report basic UX rough edges, reading this as inexperience with frontend rather than a React limitation.
  • Others defend the decision as primarily about eliminating a duplicated React codebase and unifying logic in one language/ecosystem, not about React’s raw technical limits.

One Language Everywhere & Full‑Stack Debate

  • One camp strongly values single‑language stacks (Go everywhere, or TS everywhere) for small teams: easier cross‑editing, fewer context switches, and lower barriers for contributors.
  • Another camp argues front‑ and back‑end are effectively different disciplines with different concerns; forcing one language can hide real complexity and reduce use of best‑fit tools.
  • Large subthread debates “full‑stack”: some see full‑stack engineers as highly productive generalists; others view them as dabblers who underperform specialists, especially on UX or complex backend work.

Ecosystem, Tooling, and LLMs

  • Skeptics note hiring React devs is far easier than finding Go+WASM frontend developers.
  • Several argue LLMs make popular, stable stacks even more attractive, since models answer questions about mainstream tools far better than about niche frameworks.
  • Others say good developers can learn new stacks quickly and that teams should optimize for adaptability over narrow framework experience.

Accessibility & Maintainability Concerns

  • Because the UI uses real DOM elements, commenters believe screenreader access should be achievable, unlike canvas‑only UIs.
  • Some foresee long‑term maintenance pain: large binaries, esoteric stack, thin ecosystem, and dependence on a relatively young library. Others call it an interesting, valid experiment whose real success will only be clear over time.