Heavy-JS source capture & code workspace

Starting engine…0%
Press any key to skip
ChroniumXSource Scraper
Checking engine…
v4 engine · headless Chrome + chunk forcing + source-map recovery

Pull the real source
out of any website.

Renders JS-heavy apps in a real browser, force-loads every lazy chunk, dumps CSS-in-JS, and rebuilds original files from source maps. Then edit it all in a full code workspace.

Mission control

Idle
0%ready
Pages
0
Assets
0
Files
0
Recovered
0
Enter a URL and hit Scrape.

Engine settings

Render engine
Max pages10
Max assets400
Crawl depth3
Advanced
Custom slug
Preferred start file
Library

Saved scrapes

Stored locally in IndexedDB — nothing leaves your browser.

No scrape loaded

Run a scrape, then explore and edit every file here.

Ctrl PQuick open file Ctrl Shift FSearch all files Ctrl SSave edits Shift Alt FBeautify minified code
—
about:blank
0 lines
Changelog

What's new in ChroniumX

v4.13.1 NEW

  • The loading screen can no longer freeze. A failsafe built into the page reveals the app even if a script fails to load or a deploy is half-cached, so a frozen "100%" screen is gone for good.
  • New npm run verify checks every page module and server file before you deploy, catching the kind of broken reference that used to freeze the app on load.

v4.13.0

  • Profile menu on the account button: a light/dark theme toggle (remembered), and Account settings — change your username, change your password, log out or delete your account.
  • Guests vs accounts. You can scrape ordinary sites with no account. JS-heavy apps (Roblox, Discord, Instagram, X, TikTok, Facebook and the like) need a free account — trying one shows a popup to create one, enforced on the server too. After your first scrape as a guest, a one-time prompt invites you to sign up.
  • Full light theme.

v4.12.0

  • Accounts. Sign in or create an account from the top bar. Passwords are stored only as a one-way scrypt hash, never in readable form — not in the database and not in logs.
  • Custom cursor with a glowing ring, a trailing comet tail, and a highlight over anything clickable. Off automatically on touch and for reduced-motion.
  • Startup is now crash-proof: a routing or data error can no longer leave the loading screen stuck.

v4.11.0

  • Faster scraping: 8 Chrome tabs at once and 48 parallel downloads locally. Every page except the one you typed gets a lighter render (shorter waits and scrolling, quicker screenshots). Menus and tabs are opened only on the start page and pages it links to. Source-map guessing stops in a folder after 10 misses. loadstring.net at full settings went from 32 s to 23 s.
  • Clearer Preview modes: Page is your scraped HTML, CSS, images and fonts after the site's JavaScript built it. Server HTML is your scraped HTML file exactly as the server sent it. Screenshot is Chrome's picture. Live has been removed for now.
  • Clickable previews: links inside a scraped page open the matching scraped page, with Back and Forward buttons. Links to pages that weren't scraped say so, and links to other sites open in a new tab. Forms stay off so nothing is sent to the real site. Links in the workspace's split preview open that page's file in the editor.

v4.10.0

  • Self-healing headless Chrome. The scraper tries every way to start Chrome, in order: a remote browser (BROWSER_WS_ENDPOINT), installed Chrome/Chromium/Edge/Brave, the bundled serverless Chromium, a Chromium bundle downloaded from GitHub at runtime, then Puppeteer's own Chrome. It only falls back to the static engine when every method fails.
  • The bundled Chromium always unpacks its Amazon Linux system libraries (libnss3 and the rest) and points Chrome at them, even on hosts that don't identify themselves and on warm servers left half-unpacked by older versions. If a launch fails, it retries with different settings, and re-unpacks a binary that won't run.
  • Every method is checked with a test page before use, and whichever works is tried first on later scrapes.
  • New checks: npm run doctor locally, or open /api/scrape?diagnose=1 on your deployment, to see which launch methods work and why the others don't. When Chrome can't start, the console also lists every method tried.

v4.9.1

  • Fixed headless Chrome on Vercel. It failed with "libnss3.so: cannot open shared object file", so every scrape fell back to the static engine. The bundled Chromium now unpacks the Amazon Linux 2023 system libraries it needs.

v4.9.0

  • Closes pop-ups before capturing. Newsletter and "Join our Discord" modals and cookie banners are dismissed ("Maybe later", "Close", "Reject all"…), so previews show the page itself instead of a dark overlay. It never presses anything that accepts, signs up or buys.
  • New Pop-ups button in Preview hides dialogs, cookie banners and their blurred overlays, including in scrapes made before this version.
  • Opens menus and tabs during the scrape (tabs, accordions, FAQ entries, nav dropdowns) so code that loads only when they open is captured, then puts them back before the snapshot.
  • Captures Web Worker and service worker scripts and WebAssembly modules. The workspace shows each WebAssembly module's imports and exports.
  • The Site map finds GraphQL operations (queries, mutations, subscriptions) and WebSocket endpoints. Click an operation to search for it.
  • New Stack tab: hosting and server tech read from response headers (Cloudflare, Vercel, Netlify, CloudFront, nginx, Express, HTTP/3 and more), alongside the bundled libraries.
  • The scrape report adds pop-ups closed, menus opened, worker scripts, WebAssembly modules, GraphQL operations and hosting tech.

v4.8.0

  • New Site map panel in the workspace (map icon in the activity bar) with three tabs: Endpoints lists every API route the site's code calls, with its method, from the bundles and the captured traffic. Concrete calls fold into patterns like GET /api/pastes/:param, and one click opens a captured response. Routes lists the page routes defined in the app's router (like /paste/:id) plus every page crawled. Libraries lists the open-source packages bundled in, with versions where the code names them (for example React 18.3.1 and Monaco Editor 0.55.1).
  • Filter and copy any of those lists.
  • New "Skip ads & trackers" option (on by default): ad, analytics and tracking code (Google Ads, DoubleClick, Cloudflare Insights and 50+ others) is left out, so the workspace holds only the site's own code.
  • The scrape report shows endpoints, routes, libraries, images and fonts, and how many trackers were skipped.

v4.7.0

  • Mini update focused on speed: the app runs much smoother, especially during big scrapes and in the workspace.
  • Lighter background: the heavy blurred blobs and animated grain are gone, and the glow now drifts slowly on the GPU.
  • Lighter glass: buttons no longer blur what's behind them, panels use a softer blur, and blur effects were removed from animations and transitions.
  • Console output is drawn in batches, so thousands of log lines no longer freeze the page.
  • The file tree redraws at most once per frame, so filtering and selecting many files feels instant.
  • On small screens the background animation and glass blur switch off completely.

v4.6.0

  • New Live preview mode runs the page's own HTML, CSS and JavaScript together from the scrape, so JS-built apps like Discord and Roblox build themselves just like on the real site.
  • Live runs on an isolated origin (replay.localhost). A service worker there answers every request the page makes (scripts, lazy chunks, CSS, images, fonts, captured API JSON) from the scrape. The page can't reach the app or your saved scrapes.
  • Saved workspace edits show up in Live, so you can change the scraped code and watch the real app run it.
  • The open-in-new-tab button runs Live as a full window, so code that breaks out of frames behaves as it does on the real site.
  • Live reports the page's JavaScript errors and any request the scrape couldn't answer to the Console tab.
  • The typed page keeps all its API responses, captures no longer overwrite each other, and the API capture cap went from 300 to 2,000.

v4.5.0

  • Auto-tune maxes out every site you type: 30 pages and 15,000 assets for heavy apps, 50 pages for most sites, 100 for docs, always with Chrome, images, fonts and every discovery option. It re-tunes whenever the URL changes.
  • The page you typed always keeps all its own code, images and fonts, even after other pages fill the budget. This is why Roblox's login background could go missing on max-size scrapes.
  • The typed page is fully self-contained: every image and font its CSS references gets downloaded too, including ones Chrome never drew (hover states, other screen sizes). Discord's login page now loads nothing from discord.com.
  • Bigger limits: 100 pages, 15,000 assets, 260 MB of code plus 260 MB of images and fonts per scrape, up to 8 MB per image. Local scrapes can run 15 minutes; Vercel stays at 270 s.

v4.4.0

  • Captures everything the page shows: every image, font and SVG that Chrome loads is saved in the scrape (up to 4 MB each, 90 MB per scrape), alongside the code.
  • Preview uses the saved copies through data URLs, so backgrounds, icons and custom fonts (like Roblox's Builder font) look right even though the real site's servers block them for saved copies.
  • The desktop preview is laid out at a real 1366px viewport and scaled to fit, so responsive sites show the same layout Chrome captured instead of a squeezed tablet one. Tablet (768px) and phone (390px) also use real widths.
  • New Screenshot mode: a full-page screenshot Chrome took during the scrape, to compare against the rendered copy.
  • The workspace previews images and fonts (with a type sample), filters them by type, skips them in text search, and exports them correctly in ZIPs.
  • New "Images & fonts" option in engine settings (on by default and with auto-tune).

v4.3.0

  • Lazy-chunk forcing now works on modern webpack and rspack apps like Discord, X and TikTok. Chunk IDs are read from the runtime source (object maps and ternary chains) and from the loaded modules, checked against placeholder names, and loaded through webpack's own handlers, skipping slow retry wrappers.
  • Finds escaped script URLs inside JSON resource maps (Facebook and Instagram rsrc.php bundles, TikTok, X), and treats known code-CDN URLs as real assets.
  • Bundler dependency paths (Vite and others) now resolve against the site base, and worker and loader scripts are collected from the page's resource timing.
  • Bigger limits: 25 MB per file (Discord's main bundle alone is 12.7 MB), 180 MB per scrape, up to 8,000 assets.
  • Faster: 28 parallel downloads and quick timeouts for guessed URLs.
  • Auto-tune now goes for the biggest capture. Heavy apps (Roblox, Discord, Instagram, X, TikTok, Facebook, YouTube, Twitch and more) get 20 pages, 8,000 assets and depth 4. Other sites get up to 30–60 pages. Every discovery option is switched on, including vendor sources.
  • Preview opens the exact page you scraped (for example /NewLogin) instead of the homepage. When a site's original server HTML is mostly empty because JavaScript builds the page, a banner explains it and switches to the rendered snapshot in one click.
  • Benchmark: a maxed Discord scrape captured 6,823 files, 143 MB of JavaScript and 1,774 recovered source files in 39 s, up from 1,121 files and 12 MB.

v4.2.0

  • Deploys to Vercel as-is: Chrome is bundled into the function correctly, plus a modern vercel.json (Node 22, 300 s limit, page-link rewrites) and a Deploy button in the README.
  • Uses 2 Chrome tabs on Vercel's single vCPU and skips GPU setup for faster cold starts.

v4.1.0

  • Every page is rendered in headless Chrome, 5 tabs in parallel. roblox.com/login dropped from about 3 minutes to 15 seconds.
  • Smart network settle replaces networkidle, which never fires on sites with constant background traffic, and trackers and analytics beacons are blocked.
  • Preview shows a frozen, self-contained snapshot of what Chrome drew, including CSS-in-JS, form state, canvases and shadow DOM, so pages no longer come out white.
  • "Please enable JavaScript" fallbacks are stripped, Original mode no longer turns scripts on, and turning scripts on gets in-memory storage so site JS doesn't crash in the sandbox.
  • The progress ring counts in-progress pages, shows each render step, and never sits frozen.

v4.0.0

  • Headless Chrome engine (local Chrome, @sparticuz/chromium on Vercel, or any remote WebSocket browser) that captures every script, stylesheet and API response the page loads.
  • Force-loads every lazy webpack chunk through the live runtime, and reconstructs chunk maps statically when no browser is available.
  • Dumps runtime CSS-in-JS (styled-components, emotion, adopted stylesheets) that never appears in markup.
  • Source-map recovery rebuilds a clean recovered/ project tree; Next.js build manifests, sitemap, robots.txt, asset-manifest and Vite manifest discovery.
  • Files stream in live, the big-bundle size cap went from 200 KB to 3 MB, and storage moved to IndexedDB so large scrapes no longer hit localStorage limits.
  • Monaco code workspace: tabs, edit & save, diff vs original, Prettier beautify, global regex search, quick open, live split preview.
  • New glass UI, animated boot sequence, mission control, device-frame preview, toasts and filterable console.

v3.1.0

  • Deep code discovery for React / Next / Vite / Webpack chunk chains, JSON manifests and source maps.
  • Target URL auto-configures crawl settings based on detected site type.
  • Renderer Health panel, Scrape Quality report and rendered snapshot preview mode.
  • Tabbed pages, settings wizard, folder tree, ZIP / manifest exports and live crawl progress.

Admin access

This area is not linked anywhere. Enter the admin password to continue.