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

swiftui-html

v0.1.0

Published

Basic USD viewer

Readme

USD Viewer

A USD viewer on the web.
Open USD Viewer

There are two main parts:

Info and Known Issues

  • You can load USDZ files, folders, multiple files.
  • There is a heuristic to determine what the root file is - it's not perfect.
  • Up axis is only supported for the root file (and very hacky).
  • Variants are loaded but can't be switched.
  • The viewer uses SharedArrayBuffers, which have strict header and origin requirements and are not supported on all platforms.

Limitations

  • Skinned meshes aren't supported.
  • Vertex colors aren't supported.
  • Point instancing isn't supported.
  • MaterialX isn't supported.
  • LightsAPI isn't supported.
  • Texture paths currently can't be resolved correctly for nested USDZ files. One level is fine.
    • Fixing this would require adjustments to the WASM bindings.

Contribute

Development

  • clone this repository
  • run npm install
  • run npm run start
  • open http://localhost:<port> in your browser (Note: 0.0.0.0 won't work since it doesn't have SharedArrayBuffer permissions)

The three.js Hydra Delegate is in public/ThreeJsRenderDelegate.js.
Loading and rendering are currently intermingled in public/index.html.

Origin

Based on autodesk-forks.github.io/USD/usd_for_web_demos
Code here: github.com/autodesk-forks/USD/tree/gh-pages This project: github.com/needle-tools/usd-viewer

Improvements over the original viewer

  • added drag-and-drop loading
  • dropping folders and multiple files is supported (experimental)
  • g,b texture channels were missing with RBGFormat
  • files of the form somefile.usdz[./textures/myTexture.jpg] weren't resolved correctly
  • UVMap primvar type wasn't correctly resolved to uv
  • support for texture wrap modes
  • support for texture transforms (rotation isn't properly working yet)
  • fixed output color space, added neutral HDR, fixed point light changing color appearance of scene
  • very hacky support for up axis on the root file
  • added camera orbit dampening
  • setting policy headers server-side instead of via ServiceWorker

Headers

Some JavaScript features used here require specific HTTP headers (SharedArrayBuffers).
This was originally achieved by using the service worker from here: github.com/gzuidhof/coi-serviceworker.

Now, headers are set server-side which should have wider support / better caching.

res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");

Credits

By @hybridherbst
🌵 Needle & prefrontal cortex