rawdog.js
v1.0.0
Published
The last JavaScript framework.
Maintainers
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.jsSize 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.
