HN user

hlude

2 karma
Posts1
Comments5
View on HN

Thanks! Not yet, the hard part isn't reading the code, it's simulating how it runs. That logic is built specifically around JavaScript such as closures, async/await, the event loop, so another language means a new interpreter, not just a new parser. Python would be the most natural next step though

I built this because I needed to see what the JavaScript engine was physically doing how the call stack fills, how the heap mutates, what actually happens when await suspends a function. Existing tools showed me the logical flow but not the physical state.

How it works technically:

- Acorn parses code into an AST client-side

- A custom interpreter runs in a Web Worker off the main thread, with a sync fallback for environments without Worker support

- The worker produces a flat immutable array of step snapshots

- Svelte 5 $state.raw: scrubbing the timeline is a constant-time array index swap

- GSAP animates only what changed between snapshots

Result: 60fps stepping through call stack, heap mutations and async/await simultaneously. 12 modules plus free-form mode. MIT licensed. Code runs entirely client-side your source never leaves the browser.

GitHub: https://github.com/HenryOnilude/vivix (MIT, 490 tests)

Known limitations: 500-step cap to prevent infinite loops, flat scope model for let/const inside blocks.

Philip Roberts' JSConf talk is one of the best technical explainers I've ever heard, it was a direct inspiration for the async module specifically. The main gap Vivix fills is async/await, that talk predates modern async patterns by about a decade. Curious whether the guided modules or freeform editor would be more useful.