Bookmarklets are small JavaScript bookmarks that enhance your browsing experience without the use of any extensions.

Here are some of my favorite bookmarklets that I use regularly.

Paywall bypass bookmarklet

We have all hit that wall where a crucial article is locked behind a strict paywall, or a vital research link has completely vanished from the live internet.

This bookmarklet instantly reloads your current page through Archive.is to find a cached copy or queue up a fresh snapshot. Great for reading locked articles or grabbing a permanent, timestamped reference for a project.

javascript:(()=>{window.location='https://archive.is/'+window.location.href})();

Auto-scroll bookmarklet

Infinite scroll is great for mindless browsing, but it is an absolute nightmare when you need to load a massive page all the way to the bottom to scrape data or print a PDF.

It mimics physical scrolling every second until it hits the true bottom of the page. Useful for loading endless social feeds, scraping data, or preparing a massive thread for a full-page screenshot.

javascript:(async () => { window.keepScrolling = true; while (window.keepScrolling) { let prevHeight = document.body.scrollHeight; window.scrollTo(0, prevHeight); await new Promise(r => setTimeout(r, 1000)); if (document.body.scrollHeight === prevHeight) break; } console.log('Finished.'); })();

Lightness inverter bookmarklet

Not every website has a dark mode, leaving you stranded on blindingly white backgrounds that feel like looking directly into a flashlight during late-night sessions.

This script is clever: it flips the lightness value via HSL instead of doing a crude color inversion that turns images into terrifying negatives.

javascript:(function(){function RGBtoHSL(RGBColor){with(Math){var R,G,B;var cMax,cMin;var sum,diff;var Rdelta,Gdelta,Bdelta;var H,L,S;R=RGBColor[0];G=RGBColor[1];B=RGBColor[2];cMax=max(max(R,G),B);cMin=min(min(R,G),B);sum=cMax+cMin;diff=cMax-cMin;L=sum/2;if(cMax==cMin){S=0;H=0;}else{if(L<=(1/2))S=diff/sum;else S=diff/(2-sum);Rdelta=R/6/diff;Gdelta=G/6/diff;Bdelta=B/6/diff;if(R==cMax)H=Gdelta-Bdelta;else if(G==cMax)H=(1/3)+Bdelta-Rdelta;else H=(2/3)+Rdelta-Gdelta;if(H<0)H+=1;if(H>1)H-=1;}return[H,S,L];}}function getRGBColor(node,prop){var rgb=getComputedStyle(node,null).getPropertyValue(prop);var r,g,b;if(/rgb\((\d+),\s(\d+),\s(\d+)\)/.exec(rgb)){r=parseInt(RegExp.$1,10);g=parseInt(RegExp.$2,10);b=parseInt(RegExp.$3,10);return[r/255,g/255,b/255];}return rgb;}function hslToCSS(hsl){return "hsl("+Math.round(hsl[0]*360)+", "+Math.round(hsl[1]*100)+"%, "+Math.round(hsl[2]*100)+"%)";}var props=["color","background-color","border-left-color","border-right-color","border-top-color","border-bottom-color"];var props2=["color","backgroundColor","borderLeftColor","borderRightColor","borderTopColor","borderBottomColor"];if(typeof getRGBColor(document.documentElement,"background-color")=="string")document.documentElement.style.backgroundColor="white";revl(document.documentElement);function revl(n){var i,x,color,hsl;if(n.nodeType==Node.ELEMENT_NODE){for(i=0;x=n.childNodes[i];++i)revl(x);for(i=0;x=props[i];++i){color=getRGBColor(n,x);if(typeof(color)!="string"){hsl=RGBtoHSL(color);hsl[2]=1-hsl[2];n.style[props2[i]]=hslToCSS(hsl);}}}}})()

Blank editable tab bookmarklet

Sometimes you just need a quick place to dump a snippet of text, paste a phone number, or scratch out a thought without waiting for a heavy note-taking app to load.

data:text/html, <html contenteditable>

Also checkout my tiny notes app: https://tiny.schalkburger.dev

Debugger delay bookmarklet

Trying to inspect a fleeting hover menu or a transient UI element before it vanishes feels like playing a losing game of digital Whack-A-Mole.

This bookmarklet gives you a 1.5-second buffer to trigger your hover state before freezing the DOM completely.

javascript:setTimeout(function() { debugger; }, 1500);