DEV Community

Alex Spinov
Alex Spinov

Posted on

Unplugin Has a Free API That Most Developers Dont Know About

Unplugin lets you write bundler plugins once and they work across Vite, Webpack, Rollup, esbuild, and Rspack.

Create a Universal Plugin

import { createUnplugin } from "unplugin";

const myPlugin = createUnplugin((options) => ({
  name: "my-plugin",
  transformInclude: (id) => id.endsWith(".vue") || id.endsWith(".tsx"),
  transform(code, id) {
    // Transform code — works in ALL bundlers
    return code.replace(/__DEV__/g, JSON.stringify(options.dev ?? false));
  },
  buildStart() {
    console.log("Build started!");
  }
}));

// Use in any bundler:
export const vite = myPlugin.vite;
export const webpack = myPlugin.webpack;
export const rollup = myPlugin.rollup;
export const esbuild = myPlugin.esbuild;
export const rspack = myPlugin.rspack;
Enter fullscreen mode Exit fullscreen mode

Virtual Modules

const virtualPlugin = createUnplugin(() => ({
  name: "virtual-module",
  resolveId(id) {
    if (id === "virtual:config") return "\0virtual:config";
  },
  load(id) {
    if (id === "\0virtual:config") {
      return `export const config = ${JSON.stringify({ version: "1.0" })}`;
    }
  }
}));

// In your app:
import { config } from "virtual:config";
Enter fullscreen mode Exit fullscreen mode

Popular Unplugins

  • unplugin-auto-import — auto-import APIs
  • unplugin-vue-components — auto-import Vue components
  • unplugin-icons — icons as components

Key Features

  • Write once, run on any bundler
  • Virtual modules support
  • Transform hooks
  • Resolve hooks
  • Active ecosystem

Need to scrape or monitor web data at scale? Check out my web scraping actors on Apify or email spinov001@gmail.com for custom solutions.

Top comments (0)