npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

rupa3d

v1.6.2

Published

MCP server that builds and proves 3D assets: checks any GLB against a spec without Blender, OCCT b-rep CAD, and embeds the measured certificate inside the GLB.

Downloads

238

Readme

Rupa3D

3D tooling where every asset carries its own proof.

Rupa3D builds 3D — exact b-rep CAD (OpenCascade), meshes (headless Blender), and scenes with physics (three.js + Rapier) — and then measures what it built against closed-form references or independent measurements. The measurements travel with the asset: a certificate embedded in the GLB at asset.extras.rupa3d, readable with a few lines of code and no Rupa3D installed.

It is designed to be driven by AI agents over MCP, and by CI over a command-line gate.

Bahasa Indonesia

Status — 1.6.2 · 297 tests · MIT · on npm as rupa3d · in the official MCP Registry as io.github.tiranyx/rupa3d. Developed and tested on Windows 11 with Node 22. Tool descriptions and messages are still in Indonesian.


Use it as an MCP server

claude mcp add rupa3d -- npx -y rupa3d

Or in any MCP client configuration:

{ "mcpServers": { "rupa3d": { "command": "npx", "args": ["-y", "rupa3d"] } } }

Requires Node ≥ 22.14. Workspaces live in ~/.rupa3d; override with RUPA3D_RUANG.

Blender is optional. 23 of the 36 tools run without it:

| without Blender | tools | |---|---| | Check any GLB against a spec; the certificate is embedded in a copy of the file | rupa_periksa with berkas | | Triangle topology, texel density (pixels per metre), VRAM per texture format | rupa_topologi, rupa_tekstur | | Convex collision hull, with how far it misses the shape | rupa_proksi | | Exact b-rep CAD: primitives, booleans, fillets, 2D sketch → solid, exact volume and area, STEP/IGES/STL/GLB export | rupa_cad_* (11 tools) | | three.js scenes with Rapier physics, published as a single HTML page | rupa_adegan_* (8 tools) |

The other 13 drive headless Blender — bpy modeling, import (GLB, OBJ, FBX, STL, PLY, SVG), renders, LOD, baking, collision proxies, source-mesh topology. Blender is found under C:\Program Files\Blender Foundation\*, at RUPA3D_BLENDER, or as blender on PATH.


What "proves" means

Every number below comes from the test suite or the documentation in this repository.

  • Sketch → solid. Extrusion volume is checked against area × distance (area from the shoelace formula), revolution against Pappus's theorem. Recorded errors range from 0 % to 6.03e−14 %; the tests fail above 1e−10 % for extrusion and 1e−8 % for revolution. A result that misses its reference is never saved.
  • Exact vs approximate. For a Ø140 mm flange the b-rep volume equals the analytic value; the best mesh tessellation tried (9,252 triangles) is off by −0.0016 %. CAD export reports which of the two you are holding (eksak) and by how much the approximation misses.
  • The kernel's ok: true is not accepted as proof. A fillet larger than half the smallest edge came back ok with a broken solid whose volume grew by 1,971 mm³ on a 6,000 mm³ box. Independent checks reject it.
  • Physics. Free-fall time matches h = ½gt² within one simulation step at 30, 60 and 240 Hz, and the error shrinks as the step shrinks — the test guards the direction, so it cannot pass on a lucky timestep.
  • Compressed files. A Draco-compressed sphere receives the same certificate as its uncompressed twin: 2,208 triangles, 0 failures, 6 warnings.
  • Hostile files. GLBs with node cycles, out-of-range indices, forged accessor counts or oversized skins are rejected with a message naming the defect, instead of hanging or passing. Each case runs in a child process with a time limit, so a regression fails the suite instead of freezing it.

Command-line gate

npx -p rupa3d rupa periksa model.glb

Exit code 0 — passes every required rule. 1 — fails a required rule (fix the asset). 2 — could not be checked (fix the tool or the input). --json for machine output, --spek for another spec, --tempel to write a certified copy.


Develop

npm install
npm test

297 tests run against real Blender, OpenCascade and Rapier — not mocks — and one suite talks to the server over real MCP stdio, including from a foreign working directory the way an MCP client launches it. Tests that need a local asset are skipped with the reason and how to obtain it; node contoh/flange-cad.mjs rebuilds the flange fixture in about 40 seconds without Blender.


Limitations

  • Tool descriptions, messages and most documentation are in Indonesian.
  • Tested on Windows 11 only. macOS and Linux are untested.
  • rupa_skrip runs arbitrary bpy Python inside Blender. That is the modeling capability, not a bug — but do not expose the server to untrusted input over a network.
  • Hardening against hostile files is partial: there are no general input size limits and no process isolation yet.
  • It is not a replacement for Blender or Spline today.

License

MIT. Dependencies keep their own licenses — notably brepjs-opencascade (LGPL-2.1-only). The scripts in bpy/ run inside Blender.


Documentation (Indonesian)

| | | |---|---| | docs/INTEGRASI.md | using Rupa3D from outside: library, MCP server, and reading the certificate without installing anything | | docs/SERTIFIKAT.md | specs and certificates | | docs/BERKAS.md | checking other people's GLB files without Blender | | docs/CAD-MCP.md · docs/SKETSA.md · docs/TAHAP-B-BREP.md | b-rep CAD over MCP, and 2D sketch → solid | | docs/FISIKA.md · docs/ADEGAN.md | physics, scenes and the web runtime | | docs/TOPOLOGI.md · docs/TEKSTUR.md · docs/DRACO.md | topology, textures, compressed files | | docs/PERAKIT.md · docs/OPTIMASI.md | the one-call asset pipeline, and performance | | CHANGELOG.md | every release — including a Terbongkar ("exposed") section for what broke, measuring tools included |