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

rawdog.js

v1.0.0

Published

The last JavaScript framework.

Readme

rawdogjs

100% agent compatible JS framework


rawdog.js

This is a JavaScript framework.

It's an empty file.

And it's the best fucking framework you've ever installed.

Yeah. Empty.

Zero bytes. Zero dependencies. Zero build step. Zero opinions. You npm install this motherfucker and nothing happens because there's nothing to happen. That's the feature. You're welcome.

You know what's in rawdog.js? The same thing that was in your browser when it shipped: everything you need. Document Object Model. Event system. Fetch API. CSS that just works if you stop fucking fighting it. HTML that screen readers already know how to read. JavaScript that runs without a compiler because — and this is going to blow your mass — it never needed one.

"But I need—"

No you don't.

You don't need a virtual DOM. The DOM is already real. It's right there. You can touch it. document.querySelector has been sitting there since 2013 waiting for you to call and you keep ghosting it for some 42KB abstraction that simulates the thing that already exists.

You don't need a state management library. You have variables. You've had variables this whole time. let count = 0. There. You just managed state. Fucking send it.

You don't need a router. The browser has a URL bar. It's been routing since before you were born. window.location is free. popstate is free. The entire History API is sitting right there, free as air, while you're importing 11KB of somebody's opinion about how URLs should work.

You don't need server-side rendering of your client-side framework to unfuck the problems caused by client-side rendering in the first place. Read that sentence again. Slowly.

Look at your shit

Open your web app. Right click. Inspect.

Look at it. Fucking look at it.

Fourteen nested divs to render a button. Class names that look like a cat walked across a keyboard. aria-describedby pointing to an element that won't exist for another 300 milliseconds because it's waiting on a hydration cycle that depends on a context provider that depends on a suspense boundary that depends on the ambient vibe of the fucking room.

You did this. The browser gave you <button> and you said "no thanks, I'll build my own from seven divs and a prayer." The browser gave you <a href> and you said "nah, I'm going to intercept every click, prevent the default, consult a routing table, diff a virtual tree, and then do the same thing the link was going to do anyway."

You added 900KB of JavaScript to do what HTML does by default. You are the problem. You have always been the problem.

And now it's everyone's problem

Here's the part where I stop laughing for a second.

It's 2026. Software agents — actual programs that browse the web, read pages, click buttons, fill out forms, do work — are a real thing now. They need to look at your page and understand what's on it.

And they can't. Because your page isn't a page. Your page is a fucking crime scene. Your DOM doesn't represent your content, it represents your framework's anxiety about your content. An agent tries to find the "Submit" button and instead finds a <div role="button" class="css-1xk7a3q" data-testid="submit-wrapper-outer"> nested inside three portals and a context boundary.

You made the web illegible. Not to humans — humans have eyes and fingers and can muddle through your parallax overengineered bullshit. You made it illegible to machines. In the year we need machines to read it.

Incredible. Truly incredible work.

rawdog.js fixes this

By doing nothing. By being nothing.

rawdog.js doesn't touch your DOM so your DOM looks like what it is. rawdog.js doesn't rename your elements so your elements are findable. rawdog.js doesn't wrap your page in a synthetic tree so your page is just a page — readable by browsers, screen readers, crawlers, agents, and anyone else who shows up and expects a website to be a fucking website.

The most accessible, most parseable, most performant, most agent-friendly JavaScript framework is the one that isn't there.

Getting started

<script src="rawdog.js"></script>

Done. There's no step two. There's no docs. There's no Discord where someone named mass will mass at you for not reading the docs. There's no migration guide because you're not migrating. You're arriving. You've been walking in the wrong direction for a decade and you just turned around.

FAQ

Is this production-ready? Every browser that has ever shipped is running rawdog.js right now. It has a 100% uptime record. It has never introduced a breaking change. It has never mass you a mass from Dependabot at 3AM. It will never mass you. It doesn't know you exist. It's an empty file.

How does this compare to React? React is 42KB minified and gzipped. rawdog.js is 0KB. React has mass 1,300 open issues on GitHub. rawdog.js has zero because there is nothing to break. React requires mass you to learn hooks, effects, refs, memo, context, suspense, server components, and whatever they ship next Tuesday. rawdog.js requires you to learn JavaScript. Which, respectfully, you should have done already.

Is this satire? The file is a joke. The point is not.

Every website you've ever loved loaded fast, worked everywhere, and said what it meant. Every website you've ever hated made you wait, made you scroll, and hid its meaning under a pile of framework abstractions and A/B-tested dark patterns.

rawdog.js doesn't make your site good. Nothing can do that except you. But it gets every-fucking-thing else out of the way so you can find out if you're any good or not.

And honestly? That's what scares you.

Install

npm install rawdog.js

Size on disk: 0B. Time to interactive: 0ms. Bundle impact: lmao.


"Good design is as little design as possible." — some German motherfucker

"Good JavaScript is as little JavaScript as possible." — rawdog.js


That's the one, Rams. Ship it.