Skip to content

Installation

The fastest way to get started. No Rust toolchain needed if you use Homebrew.

Terminal window
brew trust xberg-io/tap
brew install xberg-io/tap/crawlberg

Verify:

Terminal window
crawlberg --version

Add to your Cargo.toml:

Cargo.toml
[dependencies]
crawlberg = "0.3"
tokio = { version = "1", features = ["full"] }

Optional feature flags:

Feature Description
native-runtime Native OS runtime marker; enabled by default outside wasm32
browser Chromiumoxide browser backend
browser-native In-process native browser backend
ai LLM extraction via liter-llm
otel One-call OpenTelemetry/OTLP setup
interact Compatibility alias for browser-backed page interaction
mcp Model Context Protocol server
api REST API server via Axum
mcp-http MCP over HTTP transport
warc WARC archive output

Enable features as needed:

Cargo.toml
[dependencies]
crawlberg = { version = "0.3", features = ["browser", "ai", "mcp"] }

Pull the official image:

Terminal window
docker pull ghcr.io/xberg-io/crawlberg:latest

Run the CLI:

Terminal window
docker run --rm ghcr.io/xberg-io/crawlberg:latest scrape https://example.com

Run with a volume for WARC output:

Terminal window
docker run --rm -v $(pwd)/output:/output \
ghcr.io/xberg-io/crawlberg:latest \
crawl https://example.com --depth 2 --warc-output /output/archive.warc

Every binding ships prebuilt artifacts for glibc Linux (x86_64 and aarch64), macOS, and Windows. On musl Linux — Alpine and anything else built on musl — coverage is deliberately partial, and the table below is the authoritative statement of it.

Distribution glibc Linux musl Linux
CLI (GitHub release, Homebrew) ✅ ✅ x86_64, aarch64
Docker (ghcr.io/xberg-io/…) ✅ ✅ Alpine image, static binary
Rust (crates.io) ✅ ✅ builds from source
Ruby (RubyGems) ✅ ✅ compiles at install
Java (Maven Central) ✅ ✅ bundled in the jar
C# (NuGet) ✅ ✅ bundled in the package
Elixir (Hex) ✅ ✅ precompiled NIF
Node (npm) ✅ ❌ not published
Python (PyPI) ✅ ❌ not published
Go ✅ ❌ not published
PHP ✅ ❌ not published

Why musl is omitted for Node, Python, Go, and PHP

Section titled “Why musl is omitted for Node, Python, Go, and PHP”

These four bindings load a native library that must be built specifically for musl. Producing and testing that second Linux artifact doubles the release matrix for each of them, and the platforms where Alpine is actually used — containers and CI images — are already served by the statically linked CLI and the Alpine Docker image. So the omission is a deliberate scope decision, not an oversight or a broken build, and it is not scheduled to change. If you need Crawlberg on Alpine, use the CLI or the Docker image, or run your application on a glibc base image such as node:22-bookworm-slim, python:3.13-slim, or debian:bookworm-slim.

Two consequences are worth knowing about, because neither announces itself:

  • npm installs succeed on Alpine and then fail at runtime. @xberg-io/crawlberg declares @xberg-io/crawlberg-linux-x64-musl and @xberg-io/crawlberg-linux-arm64-musl as optional dependencies. Those package names are registered but hold only a 0.0.1 placeholder, so npm skips them without an error and installs no native binary at all. The failure surfaces later, when require() cannot find a native module. Do not read a clean npm install on Alpine as evidence that the package works there.
  • pip finds no musl wheel and falls back to the sdist. PyPI carries manylinux wheels only, so pip install crawlberg on Alpine attempts a source build and needs a full Rust toolchain to have any chance of succeeding.

  • Quick start — Scrape a page, run a crawl, and map a site in under five minutes. Covers the CLI and the Rust API side by side.
  • Configuration guide — Every CrawlConfig field with its default and validation rules. Start here if you need to tune depth, concurrency, or content filtering.
  • Features overview — What the engine can do: browser rendering, LLM extraction, REST API, MCP, WARC output, and more. Useful for figuring out which feature flags you need.