explaingit

tbro/rakers

17RustAudience · developerComplexity · 3/5ActiveSetup · easy

TLDR

Rust CLI that runs a page's JavaScript with QuickJS or Boa and prints the post-render HTML, as a lightweight prerender alternative to headless browsers.

Mindmap

mindmap
  root((rakers))
    Inputs
      URL
      HTML file
      Piped stdin
    Outputs
      Rendered HTML
      JSON report
      Diff view
      Clean snapshot
    Use Cases
      Crawler prerender
      Scraper of SPA pages
      Static archival
    Tech Stack
      Rust
      html5ever
      QuickJS
      Boa

Things people build with this

USE CASE 1

Prerender a React or Vue SPA so a crawler can read the visible text

USE CASE 2

Pipe HTML through rakers in a scraper pipeline without spinning up a browser

USE CASE 3

Diff the raw and post-script HTML of a page to debug client-side rendering

USE CASE 4

Produce a clean static snapshot for archival or search indexing

Tech stack

Rusthtml5everQuickJSBoa

Getting it running

Difficulty · easy Time to first run · 5min

Prebuilt binaries cover Linux x86-64 and Apple Silicon; building from source needs cargo and, for QuickJS, a C toolchain.

In plain English

Rakers is a small command-line program written in Rust that takes a web page that depends on JavaScript and returns the page after the JavaScript has finished running. Many modern websites send back a near-empty HTML shell and then build the visible content with code from frameworks like React, Vue, Angular, Svelte, or Preact. Rakers simulates running that code so the result is plain HTML that a search crawler, scraper, or archival tool can read without needing a real browser. The project is sold on two numbers: starting up in milliseconds rather than 1 to 2 seconds, and using around 10 megabytes of memory rather than around 300. The README is clear that it gets these numbers by giving up some compatibility breadth. Page parsing is done by html5ever, the same HTML5 parser used inside the Servo browser project. JavaScript execution uses one of two engines, picked when the program is built: QuickJS, a small C engine wrapped in Rust, which is the default, or Boa, a pure-Rust engine that needs no C compiler but may stop working on large modern bundles. Using the tool is direct. You can pass it a URL, an HTML file, a JavaScript file, or you can pipe HTML on standard input. By default it prints the rendered HTML to standard output, but the -o flag writes to a file. Other flags let you set the user agent, add request headers, limit how many external scripts get fetched, set a per-script time limit, or filter the output to elements that match a CSS selector. Three output modes are useful for different jobs. The pretty flag indents the HTML for human reading. The json flag returns a small object with the raw size, the rendered size, and the HTML string, which is handy for scripts. The diff flag shows a side-by-side comparison of the page before and after running scripts. A clean mode strips out script tags and preload hints to produce a static snapshot like the kind that prerendering services give to search bots. Installation is either downloading a single prebuilt binary for Linux x86-64 or macOS Apple Silicon, or building from source with cargo install.

Copy-paste prompts

Prompt 1
Walk me through using rakers to prerender a Next.js page from a URL and save the cleaned HTML
Prompt 2
Help me pick between the QuickJS and Boa engines in rakers for a heavy modern bundle
Prompt 3
Show me how to filter rakers output to a CSS selector and emit the diff mode
Prompt 4
Help me wire rakers into a Rust scraping pipeline that streams pages over stdin
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.