<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Giovannipaolo"Gianpaolo" Roscino</title>
    <description>The latest articles on DEV Community by Giovannipaolo"Gianpaolo" Roscino (@novacodingg).</description>
    <link>https://dev.to/novacodingg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4090152%2Fcf47eac3-459b-454a-9473-452b01a57ce7.png</url>
      <title>DEV Community: Giovannipaolo"Gianpaolo" Roscino</title>
      <link>https://dev.to/novacodingg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/novacodingg"/>
    <language>en</language>
    <item>
      <title>Building a client-side physics benchmark for embodied AI in the browser (Rapier/WASM + React Three Fiber)</title>
      <dc:creator>Giovannipaolo"Gianpaolo" Roscino</dc:creator>
      <pubDate>Sat, 22 Aug 2026 20:57:18 +0000</pubDate>
      <link>https://dev.to/novacodingg/building-a-client-side-physics-benchmark-for-embodied-ai-in-the-browser-rapierwasm-react-three-5bf7</link>
      <guid>https://dev.to/novacodingg/building-a-client-side-physics-benchmark-for-embodied-ai-in-the-browser-rapierwasm-react-three-5bf7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs8cmgx0hrti2sz2rg9gq.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs8cmgx0hrti2sz2rg9gq.jpeg" alt="studio v0.1 dashboard " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm building &lt;strong&gt;VSArena&lt;/strong&gt;, an open benchmark arena for evaluating embodied AI / VLA (Vision-Language-Action) policies — solo project, still early. This post is about one specific technical decision: running the physics simulation entirely client-side, in the browser, and what that has and hasn't solved.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;LLMs have public, standardized arenas for comparing model quality (LMArena being the obvious example). Embodied AI doesn't have an equivalent yet. Most VLA papers report results on custom setups — different simulators, different tasks, different scoring — that aren't directly comparable to each other.&lt;/p&gt;

&lt;p&gt;The goal for VSArena: one narrow, reproducible task (a 4-DOF arm stacking three cubes) that anyone can run and get scored against, without installing a simulator or setting up infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why client-side physics
&lt;/h2&gt;

&lt;p&gt;The simulation runs entirely in the browser: Rapier.js (a Rust physics engine compiled to WASM) for rigid-body dynamics, React Three Fiber for rendering, targeting 60Hz physics steps decoupled from the render loop.&lt;/p&gt;

&lt;p&gt;The upside is real: zero server cost to let someone watch or teleop the arm, and it removes the "clone a repo, install a simulator, configure a scene" friction that keeps most people from ever trying a benchmark in the first place.&lt;/p&gt;

&lt;p&gt;The obvious problem: client-side physics can be tampered with by whoever runs it locally. That's fine for a spectator/dev demo — it's not fine for a leaderboard anyone is supposed to trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: separating "watch" from "score"
&lt;/h2&gt;

&lt;p&gt;Studio (the in-browser demo) is explicitly spectator/dev-only. It never writes to the public leaderboard, and that's labeled directly in the UI — anything run in the browser shows as "seed" or "not client-posted" rather than pretending to be a real result.&lt;/p&gt;

&lt;p&gt;Public ELO only comes from a hosted harness: a server-side process that runs the same simulation authoritatively and validates submissions independently of whatever a client claims. That harness is the one piece not live yet — I'd rather ship it and then say "submissions are open" than claim it prematurely.&lt;/p&gt;

&lt;h2&gt;
  
  
  VLA vs. privileged state
&lt;/h2&gt;

&lt;p&gt;The other separation worth mentioning: there are two tracks. The VLA track gives a policy only a 128x128 RGB camera frame and a language instruction — no object poses. A separate state track gives privileged poses directly, kept only for debugging/baselines, and explicitly does not write to the same public leaderboard. Scoring internally still uses real poses to grade spatial accuracy and task completion — but that's judge-only information, never exposed to the policy on the VLA track.&lt;/p&gt;

&lt;p&gt;This distinction matters because a policy that "cheats" by getting exact coordinates isn't actually solving the problem a real VLA model has to solve (perceiving the world through pixels).&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hosted harness for public ELO ingestion (server-authoritative scoring)&lt;/li&gt;
&lt;li&gt;Python SDK polish (&lt;code&gt;pip install -e sdk/python&lt;/code&gt; works today in dry-run mode)&lt;/li&gt;
&lt;li&gt;A couple more baseline policies beyond the current IK baseline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repo is public if you want to look at the protocol or the scoring code directly: &lt;a href="https://github.com/NovaCoding-G/VSArena" rel="noopener noreferrer"&gt;https://github.com/NovaCoding-G/VSArena&lt;/a&gt; (MIT licensed). Feedback on the scoring approach — especially anything client-side physics still doesn't solve — is genuinely welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>robotics</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
