Headless browser engine · Rust · No Chromium GitHub stars Latest release

Control the web
with precision.

A headless browser engine in Rust, built for web scraping and AI agents. Real JavaScript, real DOM, native layout and paint — in a 70 MB binary that starts instantly.

telemaco — try it
$
Type a command and press Enter. Try:
telemaco fetch https://example.com --eval "document.title"
telemaco fetch https://news.ycombinator.com --dump links

Interactive demo · runs in your browser · no install needed

12×
Faster page loads
vs headless Chrome
Less memory
~30 MB vs 200+ MB
85 ms
Page load
on framework pages
70 MB
Binary size
vs 300+ MB Chrome
0
Chromium required
native layout & paint
Works with your agents

One browser for every coding agent

telemaco install wires the MCP server and web tools into 15 coding agents for you, asking before it changes anything. telemaco uninstall takes it all back out.

Claude Code
Anthropic
Cursor
Anysphere
OpenAI Codex
CLI
Gemini CLI
Google
Antigravity
Google · IDE + CLI
Windsurf
Codeium
OpenCode
SST
Roo Code
/ Cline
Pi
Coding Agent
DeepSeek
Harness
Qwen Code
Alibaba
Factory Droid
Factory
Poolside
Agent
Kiro
AWS
Hermes
Nous Research

Plus any MCP client over stdio or HTTP. telemaco install detects what is on your machine and wires it up.

Why Telemaco

Headless Chrome, without the Chrome

Same CDP automation surface. A fraction of the resources. Built-in anti-detection.

MetricTelemaco yoursHeadless Chrome
Memory30 MB200+ MB
Binary size70 MB300+ MB
Page load85 ms~500 ms
StartupInstant~2 s
Anti-detectBuilt-inNone
Puppeteer / PlaywrightYesYes

Memory footprint

lower is better
Telemaco30 MB
Headless Chrome200+ MB

~6× less memory on the same page.

Page load

lower is better
Telemaco85 ms
Headless Chrome~500 ms

~6× faster on framework pages.

Binary size

lower is better
Telemaco70 MB
Headless Chrome300+ MB

A fraction of the footprint, no Chromium to install.

Features

Everything you need to automate the web

Rendering and stealth are first-class capabilities, not afterthoughts.

Native rendering

CSS layout and paint, viewport and full-page screenshots, activity-driven CDP screencasting, and PDF export. No Chromium, no WebView.

Stealth mode

wreq/BoringSSL transport, per-session fingerprint randomization, consistent browser identity, and a tracker blocklist. Rendering stays fully available.

CDP compatible

telemaco serve speaks the Chrome DevTools Protocol, so Puppeteer, Playwright, and chromiumoxide connect out of the box.

MCP server

Stateful browser automation tools for Claude Desktop, Cursor, and any MCP client — over stdio or HTTP.

Hardened by default

SSRF guards on loopback, RFC1918, and link-local targets; a V8 termination watchdog per page; process-level hard deadlines. One bad page can never hang a worker.

Parallel scraping

telemaco scrape fans out across workers with configurable concurrency, proxy inheritance, and JSON output for pipelines.

Install

Up and running in seconds

One-command installer, a published Docker image, the CLI from crates.io, or build from source.

1 Installer script

# Right binary for your machine, then offers to run
# `telemaco install` to wire it into the coding
# agents it finds on the machine
$ curl -fsSL https://raw.githubusercontent.com/AlbertoBarrago/telemaco/main/install.sh | bash

2 Homebrew

# macOS, Apple Silicon and Intel
$ brew tap albertobarrago/telemaco
$ brew install telemaco
# stealth build, side by side with the default one
$ brew install telemaco-stealth

3 Docker

# Published image, linux/amd64 + linux/arm64
$ docker pull albz222/telemaco:latest
$ docker run -d --name telemaco \
    -p 127.0.0.1:9222:9222 albz222/telemaco:latest

4 Prebuilt binary

# Linux x86_64
$ curl -LO https://github.com/AlbertoBarrago/telemaco/releases/latest/download/telemaco-x86_64-linux.tar.gz
$ tar xzf telemaco-x86_64-linux.tar.gz
$ ./telemaco fetch https://example.com --eval "document.title"

5 From source

$ git clone https://github.com/AlbertoBarrago/telemaco.git
$ cd telemaco
$ cargo build --release -p telemaco-cli --bins --features render

6 Crates.io

# The headless browser as a Rust library
$ cargo add telemaco
# Or the CLI as a binary
$ cargo install telemaco-cli --features render

7 Update

# Keep telemaco current
$ telemaco update            # latest release
$ telemaco update --check    # report only
# Keeps your build variant: a stealth install
# stays stealth instead of becoming the plain one
# Installed with brew? use `brew upgrade` instead
Quick start

Drive it like headless Chrome

Same CDP surface your existing Puppeteer and Playwright code already uses.

puppeteer.js
// Start the CDP server
$ telemaco serve --port 9222

// puppeteer.js
import puppeteer from 'puppeteer-core';

const browser = await puppeteer.connect({
  browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser',
});
const page = await browser.newPage();
await page.goto('https://news.ycombinator.com');

const stories = await page.evaluate(() =>
  Array.from(document.querySelectorAll('.titleline > a'))
    .map(a => ({ title: a.textContent, url: a.href }))
);
console.log(stories);
// Start the CDP server
$ telemaco serve --port 9222

// playwright.js
import { chromium } from 'playwright-core';

const browser = await chromium.connectOverCDP({
  endpointURL: 'ws://127.0.0.1:9222',
});
const page = await browser.newContext().then(ctx => ctx.newPage());
await page.goto('https://en.wikipedia.org/wiki/Web_scraping');
console.log(await page.title());
# Page title
$ telemaco fetch https://example.com --eval "document.title"

# Extract all links
$ telemaco fetch https://example.com --dump links

# Render JS and dump HTML
$ telemaco fetch https://news.ycombinator.com --dump html

# Screenshot the settled page
$ telemaco fetch https://example.com --screenshot page.png

# Scrape many URLs in parallel
$ telemaco scrape url1 url2 url3 --concurrency 25 --format json

# Keep telemaco current
$ telemaco update --check
MCP

Give your AI agents a browser

Telemaco ships an MCP server that exposes browser automation to Claude Desktop, Cursor, and any MCP client. telemaco install wires it into 15 coding agents for you, asking before it changes anything, and telemaco uninstall takes it all back out.

claude_desktop_config.json
{
  "mcpServers": {
    "telemaco": { "command": "telemaco", "args": ["mcp"] }
  }
}

# Or over HTTP
$ telemaco mcp --http --port 8080
→ endpoint: http://127.0.0.1:8080/mcp
Built with the community

Open source, open to everyone

Telemaco is shaped by its contributors. Every feature, every fix, every test.

Telemaco is a fork of Obscura, whose contributors are credited in the docs. See all telemaco contributors →

Ready to control the web?

Open source under the Apache 2.0 license. Install in 30 seconds, wire it into your agent, and start scraping.

Install in 30 seconds Star on GitHub ★