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

@evjs/bundler-utoopack

v0.3.21

Published

Utoopack bundler adapter for the evjs framework

Readme

@evjs/bundler-utoopack

The default utoopack (@utoo/pack) bundler adapter for the evjs framework.

This package exports utoopackAdapter, which implements the BundlerAdapter interface for ev build and ev dev.

The adapter integrates with Utoopack's programmatic API, compiles the concrete entries in BuildPlan, and returns build facts for framework output linking. Its declared capabilities are the authoritative boundary: conventional server-rendered Page entries are supported, while plans that require RSC or PPR fail during framework preflight.

Development Native Ownership

Utoopack development uses one long-lived native-owner Worker for the complete ev dev command. Ownership is intentionally split by lifetime:

| Lifetime | Owner | Responsibility | | --- | --- | --- | | ev dev process | Framework host | Session protocol, function-valued proxy rewrites, and framework supervision. It does not load Utoopack's native binding. | | ev dev process | Native-owner Worker | Utoopack's native binding, process-global loader scheduler, loader-worker pool, and every sequential native Project. | | Immutable Session | Native-owner Worker | One Project, development server, subscriptions, and persistent-cache lock. These close completely before the next Session starts. |

Session replacement runs Utoopack's own graceful cleanup inside the owner and converts its successful process exit into a Session boundary. The Worker then remains idle for the next immutable Session. Owner startup failures, loader scheduler failures, unexpected exits, and shutdown timeouts are fail-stop; the host never creates a second native owner in the same process. Startup also rejects a host that has already loaded Utoopack's native binding, because that would recreate cross-environment native ownership.

Usage

This adapter is enabled by default in evjs. You do not need to configure it manually unless you are overriding another bundler.

If you need to explicitly configure it:

import { defineConfig } from "@evjs/ev";
import { utoopackAdapter } from "@evjs/bundler-utoopack";

export default defineConfig({
  bundler: utoopackAdapter,
});

Plugin Helper

The utoopack() helper wraps your plugin hooks for type-safe configuration mutation:

import { merge, utoopack } from "@evjs/bundler-utoopack";
import { defineConfig } from "@evjs/ev";
import { definePlugin } from "@evjs/ev/plugin";

const myUtoopackPlugin = definePlugin({
  id: "my-utoopack-plugin",
  setup() {
    return {
      configureBundler: utoopack((config) => {
        // config is typed as ConfigComplete from @utoo/pack
        merge(config, {
          define: {
            __MY_VAR__: JSON.stringify("value"),
          },
        });
      }),
    };
  },
});

export default defineConfig({
  plugins: [myUtoopackPlugin()],
});