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

create-virtualjs-app

v0.0.2

Published

basic, experimental, minimal, and simple Javascript web frontend framework.

Readme

VirtualJS

Description:

A basic, experimental, minimal, and simple Javascript library for building single page web apps.

Combining between complex modern frontend framework with Vanilla Javascript, suitable for new web frontend Javascript learners.

Getting Started:

To get started, you need to have node installed, then just simply write: npx create-virtualjs-app <folder_name> The working directory will be src and the root element will be App.js inspired by React.

/*                      App                       */
export const AppElement = `
    <div id="app">
        ...
    </div>
`

Here, we defined an exportable AppElement which is a must. Also, a literal string so we can put variables inside the string. In the div, we defined the id as "app" (you can change it)

...
        <h1 id="text-value">${value}</h1>
        <button id="increment-btn">Click me to increment</button>
        <button id="decrement-btn">Click me to decrement</button>
...

Here, we created h1 we put the value variable as the text with id "text-value" which we will get to later how we would use it, same with buttons.

Buttons.push(
    {
        id:"increment-btn",
        func:() => increment()
    },
    {
        id:"decrement-btn",
        func:() => decrement()
    }
)

Here, you can call Buttons because it is global and predefined. We push all the buttons we defined with its id and associated function to call it whenever clicked.

import * as Virtual from '../core/index.js'

let value = 0

const increment = () => {
    value++
    Virtual.stateHTML("text-value", `${value}`)
}
const decrement = () => {
    value--
    Virtual.stateHTML("text-value", `${value}`)
}

Going back, we imported everything from the core as Virtual (you can name it whatever). We defined value variable here. We did 2 functions here, one for incrementing the value variable, the other is to decrement. stateHTML function is called to insert HTML if you have a synchronous value (not an asynchronous fetch call), it takes 2 parameters, one for the id of the element you want to update, and the second is the new value.

Finally, you can display the web app by opening the index.html file. Sometimes, you need an automatic reload or it just display errors that it cant open it, you can use Live Preview vscode extension to open the index.html file.