Skip to content
PluginStats

@multiplatform.one/vite-plugin-webext weekly downloads statistics

By multiplatform.one · npm · Vite plugins

Vite config factories for building a browser web extension (MV3 views, background service worker, content scripts) as a target of a multiplatform.one One app — workspace source aliases, the one-server-only browser stub, Tamagui wiring, and the manifest/de

View on npm Fresh · Nov 6, 2026

@multiplatform.one/vite-plugin-webext has 13,279 recorded weekly downloads on npm, ranking #1113 of 2,865 tracked listings.

Weekly downloads
13,279
Official API · Nov 4, 2026
7-day growth
—
Insufficient history
30-day growth
—
Insufficient history
90-day growth
—
Insufficient history
Rank
#1113
Among tracked npm listings

About @multiplatform.one/vite-plugin-webext

@multiplatform.one/vite-plugin-webext

Vite config factories for building a browser web extension (MV3 views, background service worker, content scripts) as a target of a multiplatform.one One app. Three vite builds cover the three JS worlds (DOM extension pages, worker, injected content script); runWebextPrepare writes the manifest and the dev-mode HMR scaffolding into a loadable staging dir:

<stagingDir>/manifest.json
<stagingDir>/dist/views/<view>/index.html   (popup/options/sidepanel/…)
<stagingDir>/dist/background/index.mjs      (service worker / bg script)
<stagingDir>/dist/contentScripts/index.global.js
<stagingDir>/dist/contentScripts/webext.css (web-accessible resource)

Usage

One config file per JS world, plus a prepare script. Every directory under <targetDir>/views/ with an index.html becomes an extension page.

// vite.config.webext.ts — extension pages (popup/options/…)
import { resolve } from "node:path";
import { createWebextViewsConfig } from "@multiplatform.one/vite-plugin-webext";
import { defineConfig } from "vite";
import packageJson from "./package.json";

export default defineConfig(async () =>
  createWebextViewsConfig({
    targetDir: resolve(import.meta.dirname, "webext"),
    stagingDir: resolve(import.meta.dirname, "dist-webext"),
    tamaguiConfig: resolve(import.meta.dirname, "config/tamagui.config.ts"),
    packageInfo: packageJson,
    // MANDATORY for extension builds — see "one must be aliased" below.
    aliases: [{ find: /^one$/, replacement: "@multiplatform.one/router/seam" }],
  }),
);

createWebextBackgroundConfig (sync) and createWebextContentConfig (async) take the same options for the worker and content-script builds; runWebextPrepare({ targetDir, stagingDir, getManifest, isDev, port, watch }) stages the manifest, static assets, and dev HMR scaffolding.

Required dependencies (the real consumer contract)

Declared peers — install them next to this plugin:

packagewhy
vite >=5the build tool itself
@vitejs/plugin-reactviews build (react fast-refresh + jsx). Lazy-imported at factory call
@tamagui/vite-pluginviews + content builds (static extraction). Lazy-imported

Beyond the declared peers, a real app build needs:

  • @tamagui/web as a direct dependency of your app. The Tamagui static extractor bundles your tamaguiConfig to <cwd>/.tamagui/tamagui.config.{cjs,mjs} and requires it from there, with @tamagui/web left external. Under pnpm's default isolated node_modules, transitive packages are not resolvable from your app, so the extractor fails with "Error bundling tamagui config: Cannot find package '@tamagui/web'…" — and (upstream) swallows it, silently shipping a deoptimized runtime-styled build. This plugin turns that into a hard error in production builds; fix it by adding @tamagui/web to your app's dependencies.
  • react-i18next + i18next, if you render the i18n-using catalog components. @multiplatform.one/components translates built-in copy (Alert, Toast, Carousel, ConfirmDialog, Pagination, views/, layouts/, …) via an optional react-i18next peer. Apps that never render those components may omit both packages and tree-shake the components away; apps that do render them get a named runtime error telling you to install react-i18next and i18next.

one must be aliased to the router seam

Extension pages must NOT bundle the real one runtime: it drags in @react-navigation/core (and server-only modules) and the build fails. This is mandatory, not stylistic — alias one to the stack-navigation seam in every webext config that renders shared feature code:

aliases: [{ find: /^one$/, replacement: "@multiplatform.one/router/seam" }],

The seam (@multiplatform.one/router/seam) implements One's router API over DOM pages, so shared features/ code written against One's router works unchanged inside the extension.

Relatedly, one's client code imports ./vite/one-server-only.mjs (node-only); the factories redirect any one-server-only id to one's published browser/native no-op. The redirect resolves the installed one package through node resolution (build cwd, then workspaceRoot); when one is not installed at all the redirect is skipped with a one-line warning and normal resolution proceeds.

workspaceRoot semantics

workspaceRoot defaults to the git toplevel (git rev-parse --show-toplevel) of the build cwd. It is used for two things:

  1. Workspace source aliases. Inside the multiplatform.one monorepo, every public/* package (and its subpath exports) is aliased to its TypeScript source so builds never consume stale dist artifacts. Out-of-repo there is no public/ under the root, the aliasing no-ops, and @multiplatform.one/* resolves from node_modules like any other package — the factories log one line when this happens: no public/ under <root> — resolving @multiplatform.one/* from node_modules.
  2. The one-server-only redirect falls back to resolving one from workspaceRoot when it cannot be resolved from the build cwd.

Pass workspaceRoot explicitly when your app builds from a directory whose git toplevel is not the dependency root (e.g. a nested repo).

Description from the npm listing.

  • browser-extension
  • multiplatform.one
  • vite-plugin
  • webext
  • webextension

README badge

Show your rank in a README or on your website. The badge updates automatically.

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

@multiplatform.one/vite-plugin-webext weekly downloads on npm, last 90 days: 13,279 weekly downloads as of Nov 4, 2026.@multiplatform.one/vite-plugin-webextWeekly downloads on npm · Last 90 days13,279downloads / week11.5K12K12.5K13K13.5K14K14.5K15KAug 6Aug 21Sep 5Sep 20Oct 5Oct 20Nov 4downloads / weekNov 4, 2026 – Nov 4, 2026 · 1 observations · Updated Nov 4, 2026pluginstats.com
@multiplatform.one/vite-plugin-webext weekly downloads on npm, last 90 days: 13,279 weekly downloads as of Nov 4, 2026.

7/30/90-day growth

@multiplatform.one/vite-plugin-webext weekly downloads growth on npm: 7-day growth unavailable, 30-day growth unavailable, 90-day growth unavailable.@multiplatform.one/vite-plugin-webextWeekly downloads growth on npm13,279downloads / week now7-day growthinsufficient historyInsufficient history30-day growthinsufficient historyInsufficient history90-day growthinsufficient historyInsufficient historyGrowth vs. nearest observation to each baseline date · Updated Nov 4, 2026pluginstats.com
@multiplatform.one/vite-plugin-webext weekly downloads growth on npm: 7-day growth unavailable, 30-day growth unavailable, 90-day growth unavailable.

Ranking history

@multiplatform.one/vite-plugin-webext npm ranking history: currently #1113 (by weekly downloads).@multiplatform.one/vite-plugin-webextnpm ranking · by weekly downloads · Last 90 days#1113current rank#1111#1112#1113#1114#1115Aug 8Aug 23Sep 7Sep 22Oct 7Oct 22Nov 6rankNov 6, 2026 – Nov 6, 2026 · 1 observations · Updated Nov 4, 2026pluginstats.com
@multiplatform.one/vite-plugin-webext npm ranking history: currently #1113 (by weekly downloads).

Listing placement

All npm2,864 listings · 144 pages · 1,433 shown · page 59, #3 (overall #1,163)
All npm: every listing in weekly downloads order

Listing placement

Vite plugins284 listings · 15 pages · page 11, #6 (overall #206)
Vite plugins: every listing in weekly downloads order

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

Recent observations

Full history (1)
Recent weekly downloads observations for @multiplatform.one/vite-plugin-webext
Date (UTC)Weekly downloadsChange vs. previous
13,279—

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/@multiplatform.one/vite-plugin-webext. First seen Nov 6, 2026; last successful collection Nov 6, 2026. See the methodology.