
Ripperoni
Web ingestion engine. Point it at a wiki, a site, or a URL list — it grinds raw pages into clean cuts of structured JSON, one prime cut per record.
Feed it a domain, hand it a plugin (a module that extracts structured data from a page), and Ripperoni fetches pages, runs your plugin against each one, and writes clean JSON records to disk.
A run has three artifacts:
- Plugin in
plugins/<namespace>/:ScalarNodesubclasses +*.dag.jsonlddocuments +index.tsthat exportsregister(dispatcher). - Orchestration
<name>.dag.jsonld: one dagonizer DAG (JSON-LD) that wires the run — embedding the built-incrawl:discoverDAG and scattering over collected URLs via the plugin's per-page DAG. - State
<name>.state.json: run parameters (baseUrl, cache, output, headers, crawler block, rate limits, parallelism) validated at startup byRunStateSchema.
Run with: ripperoni run <orchestration>.dag.jsonld --state <run>.state.json
- DAG execution. Every scrape runs as a directed acyclic graph (DAG) — a structured execution plan where steps run in dependency order — powered by @studnicky/dagonizer. Placement types (
ScalarNode,ScatterNode,EmbeddedDAGNode,TerminalNode) compose at the document level; add or rearrange stages without touching anything else. - HTML scraper. Native fetch + cheerio. Returns a
CheerioAPIhandle; work with selectors you already know. - Link crawler. The built-in
crawl:discoverDAG walks pages matching on domain/target/delimiter regexes — follows links all the way to the end of the casing. Deduplicates, sorts naturally, respects rate limits. Embed it in any orchestration viaEmbeddedDAGNode { dag: "crawl:discover" }. - Retry + backoff. Exponential backoff with decorrelated jitter. Respects
Retry-Afterheaders. Classifies errors asNETWORK / THROTTLED / TIMEOUT / TRANSIENT / PERMANENTand retries until the record lands clean.
Quick install
bash
git clone https://github.com/Studnicky/Ripperoni.git
cd Ripperoni && npm install && npm run buildNext steps
- Walk-through: end-to-end example with a real URL, orchestration, plugin, and output record
- Getting started: install, scaffold, and first run
- Architecture: DAG topology, package boundaries, extension points