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

@qpjoy/electron-plugin-tunnel

v0.1.16

Published

Reusable QPJoy tunnel runtime and CLI for Electron apps on macOS, Windows, and Linux.

Readme

QPJoy Electron Tunnel

Reusable tunnel runtime for Electron apps on macOS, Windows, and Linux.

pnpm add @qpjoy/electron-plugin-tunnel
import { app, ipcMain, session } from 'electron';
import { createElectronTunnel } from '@qpjoy/electron-plugin-tunnel';

const tunnel = createElectronTunnel({ app, ipcMain, session: session.defaultSession }, {
  adminPort: 23456,
  controllerPort: 23457,
  mixedPort: 23458,
  dnsPort: 1053
});

app.whenReady().then(async () => {
  await tunnel.applyProxy();
});

app.on('before-quit', () => {
  tunnel.close();
});

The package starts a browser admin backend by default. Keep mode switching, subscription management, local ports, start/stop, and TUN install/uninstall in that admin UI so the host Electron app does not need tunnel-specific screens:

http://127.0.0.1:23456
admin/admin

When the admin changes runtime settings, the SDK reapplies the Electron session proxy automatically. If the admin switches to virtual NIC mode and TUN is installed, the package can request the required system privilege from the host app process.

The built-in DNS listener defaults to :1053. Virtual NIC mode uses Mihomo TUN DNS hijack for app DNS traffic, so the tunnel does not need to bind the system :53 port or rely on another Clash instance.

The package also installs a CLI:

pnpm exec qpjoy-tunnel snippet
pnpm exec qpjoy-tunnel init --out src-electron/qpjoy-tunnel.ts

Tunnel engine binaries are split into platform-specific optional packages such as @qpjoy/electron-plugin-tunnel-engine-win32-x64. npm/pnpm installs only the package matching the current OS/CPU, so end users do not download every engine.

For electron-builder, package the installed engine resources if you do not ship node_modules as part of the app bundle:

extraResources: [
  {
    from: 'node_modules/@qpjoy/electron-plugin-tunnel-engine-win32-x64/resources/engine',
    to: 'qpjoy-tunnel-engine',
    filter: ['**/*']
  }
]

Choose the engine package name for the platform you are building on. Apps that package from the target OS with normal npm install / pnpm install usually do not need this extra resource rule.

The platform engine packages redistribute third-party tunnel engine binaries. See their package contents and THIRD_PARTY_NOTICES.md before publishing apps that include those resources.