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

frame-worker

v0.3.0

Published

Run Worker Script inside an Iframe

Readme

Frame-Worker

Run Web Worker Script with an IFrame

features

  • default export detection
  • url shortening
  • blob url revocation
  • raw unencoded strings
  • CommonJS code

install

via script tag

<script src="https://unpkg.com/frame-worker"></script>

via npm

npm install frame-worker

basic usage

import FrameWorker from "frame-worker";

// initialize from url
new FrameWorker("./square.worker.js");

// intialize from blob url
new FrameWorker("blob:http://localhost:8080/bf331630-1275-4b3d-9b65-22512egdb592");

// initialize from data url
new FrameWorker("data:application/javascript;base64,Cm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gMTIzNDsKfQ==");

// listen to messages
worker.addEventListener("message", function (event) {
  console.log("received": event.data);
});

advanced usage

context

You can pass an extra context object to the worker. FrameWorker will assign the entries in the object to the global window and self inside the iframe. In the example below, we pass a validate function to the FrameWorker.

new FrameWorker(workerScript, undefined, { 
  context: {
    validate: function() { ... }
  }
});

cjs

You can pass in a CommonJS module and have it automatically interpreted as a Web Worker script. If there is no self.onmessage defined in the input script, FrameWorker will automatically look for and call module.exports or module.exports.default function.

const code = `
  module.exports = function() {
    return 1234;
  }
`;
new FrameWorker(code, undefined, {
  cjs: true, // code is a basic CommonJS file
  raw: true // code is not encoded in a Data URL or Blob URL
});

debug

You can set debug to true for extra helpful log messages

new FrameWorker(workerScript, undefined, { debug: true });

id

You can specify an id to give to the created iframe. If id is not a string, it will be ignored.

new FrameWorker(workerScript, undefined, { id: "special" });

raw

You can pass in raw unencoded JavaScript.

new FrameWorker("console.log('hello, world')", undefined, { raw: true });

revoke

If you initialize a FrameWorker with a "blob:..." url, you can have the url automatically revoked after the worker is initialized.

const url = "blob:http://localhost:8080/bf331630-1275-4b3d-9b65-22512egdb592";
new FrameWorker(url, undefined, { revoke: true });