Every website is a memecoin now.
Launch any page as a coin. Click its words to buy them, then press R to pull the rug
and watch the whole page fall into a pile. Press Esc for a full refund.
Try it now · Install · Controls · How it works
A parody. There is no coin, no token, no wallet, no chain and no server. The market, the buyers and the crash are made up in your tab out of the page itself. Nothing leaves your browser, and nothing here is financial advice.
- The launch. The page gets a ticker from its own name: The Crumb becomes
$CRUMB,the.internetbecomes$INTERNET, and a name too long for a ticker keeps its initials or loses its vowels (news.ycombinator.comtrades as$YCMBNTR). A trading panel slides in with the price, candles, market cap, holders, volume, liquidity, a bonding curve and a live feed of trades. A ticker tape runs along the top with the page's own words as coins. - Buying. Click any word on the page to buy it: it lights up in gold and a receipt floats up. The crowd buys too. Their words light up in green, and every buyer in the feed is named after a word from the page, like
sourdough.ethordegenflour. - The rug. Press R, hit the red button, or just wait: when the bonding curve reaches 100%, the dev pulls the rug for you. The price drops more than 99% in half a second, the dead cat bounces once, the screen shakes, and every word, picture and coloured box on the page falls to the bottom of the screen in a pile. Big pictures sink, words pile up on top.
- The card. A card with the damage comes up: the drop, the all-time high, the holders left holding the bag, what you bought and what the dev walked away with. Press S to save it as a PNG and post it.
- The refund. Press Esc and the pile flies back into place piece by piece. The page is switched back on exactly as it was.
Pick whichever fits. All four run the same single file.
- Open the demo page.
- Drag the dashed RUGPULL button into your bookmarks bar. No bar? Ctrl+Shift+B, or ⌘+Shift+B on a Mac.
- Open any website and click the bookmark. Click it again (or press Esc) to close it.
GitHub can't render javascript: links in a README, so the button lives on the demo page. To create the bookmark by hand, make a new bookmark and paste the contents of bookmarklet.txt as its URL. The whole engine is inside the bookmark (about 35,000 characters, well under Firefox's 65,536 limit), so it also works on sites with a strict Content Security Policy.
- Download this repository (Code → Download ZIP) and unzip it.
- Open
chrome://extensionsand switch on Developer mode. - Click Load unpacked and pick the
extensionfolder. - Click the chart icon on any page, or press Alt+Shift+R. Press it again to refund. You can change the shortcut at
chrome://extensions/shortcuts.
Open DevTools on any page, paste the contents of rugpull.min.js into the console and press Enter. Chrome and Firefox may ask you to type allow pasting first.
With Tampermonkey or Violentmonkey installed, open the raw userscript and confirm the install. Then press Alt+Shift+R on any page.
| Input | What it does |
|---|---|
| Click a word | Buy it |
| B or Buy | Buy a random word on the screen |
| R or Rug pull | Pull the rug |
| S | Save the card as a PNG (after the rug) |
| M | Sound on or off |
| Esc | Refund everything and close |
While the coin is live, links and buttons on the page don't fire: a click is always a buy. Shortcuts are ignored while a text field has focus. If your own page has a button that starts RUGPULL, give it a data-rugpull-ignore attribute and its clicks will go through.
RUGPULL is one dependency-free script (src/rugpull.js, about 34 KB minified). A few details that make it work on real sites:
- No DOM rewrites while you trade. Bought words are drawn with the CSS Custom Highlight API: each word is a
Rangein a highlight, so text nodes are never split or wrapped and frameworks keep running underneath. The panel lives in a shadow root on top of the page. - A market made of nothing. The price is a random walk with drift (seeded, so a recording comes out the same every time), candles are cut every 0.42 seconds, and the crowd trades on a timer. Buyer names come from the most frequent words on the page.
- The rug. At the moment of the rug, every word on screen is measured with
Range.getClientRectsand copied with its font, colour and size; pictures, videos and canvases are copied as images; coloured boxes, buttons and cards as shapes. Then one adopted stylesheet sets the body's opacity to zero, and the copies fall on a canvas. Fills that cover half the screen, or a column as tall as the screen, stay as the backdrop the rest falls onto. - The pile. Falling pieces land on a height map of the bottom edge. Each one settles flat with a little tilt and raises the columns under it, and neighbouring columns are relaxed so the pile keeps a slope. Settled pieces are painted once onto two layers, pictures behind and words in front, so a pile of thousands of words costs one image per frame.
- The refund. Every piece remembers where it came from, so Esc flies it home on an arc. Then the stylesheet comes off, the highlights are dropped and the overlay is removed. The page was never rewritten, so it is back to the pixel.
- Strict CSP friendly. No
eval, noinnerHTML, no remote code, no network requests. Styles go through constructed stylesheets. Sound (a coin chime, a sad trombone and a refund jingle) is synthesized with Web Audio.
| Browser | Status |
|---|---|
| Chrome, Edge, Brave, Arc 105+ | Everything |
| Safari 17.2+ | Everything |
| Firefox 140+ | Everything |
| Firefox 101+, Safari 16.4+ | Works, but bought words aren't highlighted |
With reduced motion switched on in the system settings, nothing falls: the page simply goes and the card comes up. The automated tests run in Chromium.
No analytics, no storage, no servers: the script never sends anything anywhere and loads nothing. Everything happens in your tab and is gone when you press Esc or reload. The demo site loads no third-party scripts or fonts.
npm install # terser for the build, playwright for the tests
npm run build # src/rugpull.js -> rugpull.min.js, bookmarklet.txt, extension/, userscript/
npm test # headless smoke test: launch, buy, rug, pile, card, refund, compare markup and pixels
npm run demo # renders demo.mp4, assets/demo.webp and assets/demo.gif frame by frame (needs ffmpeg)Once it runs, the engine exposes a small API on window.__rugpull:
| Call | Does |
|---|---|
buy(x, y) |
Buy the word at viewport coordinates (or a random one without arguments) |
rug() |
Pull the rug |
save(download) |
Draw the card. Resolves to { blob, width, height }; downloads it unless download is false |
toggle() |
Same as Esc: refund after the rug, close before it |
stop() |
Put the page back instantly and switch off, no animation |
state() |
Phase, ticker, price, market cap, all-time high, holders, bonding curve, trades and pile size |
Options can be set before the script loads through window.__RP_OPTIONS, for example { seed: 42, sound: false, tape: false, autorug: false, credit: false }. Setting window.__RP_MANUAL = true stops the animation loop so tests can drive frames with step(dt).
rugpull/
├── index.html demo page (GitHub Pages)
├── rugpull.min.js built engine
├── bookmarklet.txt built bookmarklet
├── src/rugpull.js readable source
├── extension/ Chrome extension (Manifest V3)
├── userscript/ Tampermonkey / Violentmonkey script
├── demo/ a sample baking blog to rug
├── scripts/ build and demo recorder
├── test/ smoke test and fixture pages
└── assets/ demo media, icon, fonts
MIT © 2026 shmidt. Made by @shmidtqq. Fonts in assets/fonts and demo/fonts are under the SIL Open Font License.
If you rug something good, post the card and tag me.