Nicheloom

Market intelligence for builders — see what's gaining traction before it's crowded.

Coi

A language that compiles to WASM, beats React/Vue

Details

External ID
46696283
Source
HN
Company
—
Product
—
Website domain
—
Launched
Jan. 20, 2026
Cohort
—
Upvotes
225
Upvotes percentile
0.9670619235836627
Tags
—
Fetched at
Sept. 7, 2026, 9:25 p.m.
Updated at
Sept. 7, 2026, 9:25 p.m.

Description

I usually build web games in C++, but using Emscripten always felt like overkill for what I was doing. I don't need full POSIX emulation or a massive standard library just to render some stuff to a canvas and handle basic UI.The main thing I wanted to solve was the JS/WASM interop bottleneck. Instead of using the standard glue code for every call, I moved everything to a Shared Memory architecture using Command and Event buffers.The way it works is that I batch all the instructions in WASM and then just send a single "flush" signal to JS. The JS side then reads everything directly out of Shared Memory in one go. It’s way more efficient, I ran a benchmark rendering 10k rectangles on a canvas and the difference was huge: Emscripten hit around 40 FPS, while my setup hit 100 FPS.But writing DOM logic in C++ is painful, so I built Coi. It’s a component-based language that statically analyzes changes at compile-time to enable O(1) reactivity. Unlike traditional frameworks, there is no Virtual DOM overhead; the compiler maps state changes directly to specific handles in the command buffer.I recently benchmarked this against React and Vue on a 1,000-row table: Coi came out on top for row creation, row updating and element swapping because it avoids the "diffing" step entirely and minimizes bridge crossings. Its bundle size was also the smallest of the three.One of the coolest things about the architecture is how the standard library works. If I want to support a new browser API (like Web Audio or a new Canvas feature), I just add the definition to my WebCC schema file. When I recompile the Coi compiler, the language automatically gains a new standard library function to access that API. There is zero manual wrapping involved.I'm really proud of how it's coming along. It combines the performance of a custom WASM stack with a syntax that actually feels good to write (for me atleast :P). Plus, since the intermediate step is C++, I’m looking into making it work on the server side too, which would allow for sharing components across the whole stack.Example (Coi Code):component Counter(string label, mut int& value) { def add(int i) : void { value += i; } style { .counter { display: flex; gap: 12px; align-items: center; } button { padding: 8px 16px; cursor: pointer; } } view { <div class="counter"> <span>{label}: {value}</span> <button onclick={add(1)}>+</button> <button onclick={add(-1)}>-</button> </div> } }component App { mut int score = 0; style { .app { padding: 24px; font-family: system-ui; } h1 { color: #1a73e8; } .win { color: #34a853; font-weight: bold; } } view { <div class="app"> <h1>Score: {score}</h1> <Counter label="Player" &value={score} /> <if score >= 10> <p class="win">You win!</p> </if> </div> } }app { root = App; title = "My Counter App"; description = "A simple counter built with Coi"; lang = "en"; }Live Demo: https://io-eric.github.io/coiCoi (The Language): https://github.com/io-eric/coiWebCC: https://github.com/io-eric/webccI'd love to hear what you think. It's still far from finished, but as a side project I'm really excited about :)

Enrichment

Theme
browser automation and scraping for AI
Vertical
Horizontal
Function
Dev tools
Audience
Developer
AI stance
Not AI
Project type
Hobby / open-source project
Normalized one-liner
programming language that compiles to wasm
Manually corrected
False

Could you build this?

No Creating a novel programming language with a custom compiler targeting WebAssembly and optimized low-level DOM/canvas interop requires deep compiler engineering and language design expertise.

What it would actually take: Building Coi requires designing a lexer, parser, type checker, intermediate representation (IR), and code generator targeting WebAssembly binary format (or LLVM IR). To outperform React/Vue, it requires a custom runtime memory allocator and bespoke zero-copy binary bridges for DOM and Canvas manipulation, bypassing typical JS engine bridge overheads through raw shared memory buffers.

Discussion

20 comments analyzed.

Competitors mentioned: Visual C++, Emscripten, React, Vue, Svelte

Concerns raised: XML syntax for conditionals looks awkward and hard to parse, Performance claims suspicious - Canvas 2D handling differences need clarification, WebKit bug: clicking sometimes doesn't work, Compile-time reactivity may have drawbacks vs runtime signals, Canvas 2D horribly inefficient for serious graphics work

Feature requests: Package manager for growth and maturity, Clear JS interop documentation - how to call JS functions, Global state management solution, Network/API handling built-in, Pre-built component library like React/Vue/Svelte

Competitors

Other products that read as similar to this one — 200 launches clear the similarity bar, closest 8 shown.

Attention rank: #6 of 201 (itself plus its competitors, highest first — normalized so YC and Product Hunt are compared fairly).

Launched 76 days after the earliest competitor.

Other launches for this product

Same idea, different domain

Nobody's really built a dev tools tool for Sales yet.