Scrapeless Wiki

What Is Splash? – Definition and How It Works

Informational P3 what is splash scrapinghub

Learn what Splash is, how its HTTP rendering API and Lua scripts work, and why modern headless browsers have largely replaced it.

Splash is a scriptable browser rendering service exposed over HTTP. You send it a URL, it renders the page in a WebKit engine, and it returns the rendered HTML, a screenshot, or a HAR β€” no browser driver in your own process.

1. The Service Model

Splash runs as a separate service, usually in a container, and is called like any other API:

curl "http://localhost:8050/render.html?url=https://example.com&wait=2"

That model is its defining advantage. A crawler stays a plain HTTP client, and rendering becomes a network dependency it can scale independently.

2. Endpoints

Endpoint Returns
/render.html Rendered HTML after JavaScript execution
/render.png, /render.jpeg Screenshot
/render.har HAR of the page's requests
/render.json Combined output, selectable by flags
/execute Result of a Lua script

3. Lua Scripting

/execute accepts a Lua script, which is how interaction beyond a plain load is expressed:

function main(splash, args)
  splash:go(args.url)
  splash:wait(1.0)
  splash:runjs("window.scrollTo(0, document.body.scrollHeight)")
  splash:wait(1.0)
  return {html = splash:html(), png = splash:png()}
end

Powerful, but it means automation logic lives in a second language, outside your test and review tooling.

4. Integration With Scrapy

Splash was designed alongside Scrapy and integrates through a middleware that turns a special request type into a Splash call, so a Scrapy spider gains rendering while keeping its scheduler, retries, and pipelines.

That combination is the context in which most Splash deployments exist.

5. Why It Has Been Largely Superseded

The engine. Splash renders in WebKit, not Chromium. Sites built and tested against Chromium can render differently or fail outright.

Maintenance. Development has been slow for years, while browser engines have moved quickly.

Fingerprinting. Its engine signature is not a mainstream browser's, so protected sites distinguish it easily.

Waiting. Fixed wait values instead of condition-based waiting means either wasted time or truncated content β€” the same either-too-slow-or-too-early problem that auto-waiting exists to solve.

Playwright and Puppeteer now offer current engines, condition-based waits, and active maintenance.

6. What Remains Useful

The architecture rather than the implementation. A rendering service behind an HTTP API is still the right shape for crawling at scale, because it decouples fetch concurrency from browser resource limits and lets one pool serve many crawlers.

Managed browser services and self-hosted Playwright servers implement the same pattern with a current engine.

7. Summary

Splash is a scriptable WebKit rendering service accessed over HTTP, with endpoints for HTML, screenshots, and HAR, plus Lua scripting for interaction, and a first-class Scrapy integration.

Its engine, maintenance pace, easily distinguished fingerprint, and fixed-wait model all argue against new deployments β€” but its service-oriented architecture remains sound, and is exactly what current headless-browser services provide.