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

vite-plugin-drupal-template-hmr

v1.0.3

Published

A Vite plugin that make Drupal template HMR happen.

Downloads

244

Readme

vite-plugin-drupal-template-hmr

A Vite plugin that make Drupal template HMR happen 🪄.

Motivation

When developing with Drupal and using Vite you can leverage HMR for CSS and JS but not for templating.

This plugin allow you to experiment full HMR support with Drupal.

Limitations

For now this plugin is coming with some limitations (and needs more work):

  • Only allow you to use the default templating system of Drupal (eg. Twig).
  • Can do HMR only if the template is directly referenced as a theme suggestion in your templating system.
  • If you change a template that include a lot of other templates, all content contained in the updated template will be reloaded.
  • No typescript support
  • No automated testing

Usage

  1. This plugin will only be active when Vite dev server is used.
  2. To use this plugin you need to have a valid setup with Vite and Drupal. You can use modules like https://www.drupal.org/project/vite to help you do that.
  3. Install it as you would install any npm package. Example:
pnpm install vite-plugin-drupal-template-hmr -D
  1. Reference the plugin in vite.config.ts file.
import viteDrupalTemplateHMR from 'vite-plugin-drupal-template-hmr'

// @see https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    // ...other plugins
    viteDrupalTemplateHMR(/* options */),
  ],
})
  1. Add the virtual module to your backend.

Assuming your Vite dev server is localhost:5147:

<script src="localhost:5147/@vite-plugin-drupal-template-hmr" type="module"></script>

Options

{
  /**
   * Useful if your Vite root is not the same as your Drupal project/theme root.
   * For example if you have Vite and Drupal in separate Docker containers maybe you don't want to add all your
   * Drupal install into your Vite container, this will result in different root for updated files via HMR.
   */
  templateBase: string
}

How it works

This plugin is leveraging Vite HMR API and Drupal twig.config with debug active debug mode in order to hot reload part of the page when a template is updated.

This plugin is actively using specific Vite handleHotUpdate and Virtual Modules.

The plugin will do a fetch on the current URL to catch the updated HTML of the page and do DOM manipulations when a .twig file is updated to replace DOM between comments added by the twig debug mode like so:

<!-- BEGIN OUTPUT from 'themes/custom/default/templates/field/field--node--title.html.twig' -->
<span class="test">Page test</span> <!-- This will be replaced -->
<!-- END OUTPUT from 'themes/custom/default/templates/field/field--node--title.html.twig' -->