Skip to content

Releases: kevinnft/unblock-web

v0.2.3 — Version sync fix + CHANGELOG

Choose a tag to compare

@kevinnft kevinnft released this 16 May 06:57

[0.2.3] — 2026-05-16

Fixed

  • unblock-web --version and unblock_web.__version__ now match the installed wheel version (previously stuck at 0.2.0 after a pip install of v0.2.2).
  • Single source of truth: version is now read dynamically from src/unblock_web/__init__.py via Hatch.
  • Removed stale dist/ wheels from git history (they were already in .gitignore).

Added

v0.2.2 — First PyPI release 🎉

Choose a tag to compare

@kevinnft kevinnft released this 16 May 06:57

[0.2.2] — 2026-05-16

Added

  • 🎉 First PyPI release. pip install unblock-web works worldwide.
  • GitHub Actions Trusted Publishing flow for PyPI (no API tokens in repo).

Fixed

  • pypi Environment in publish.yml now allows tag pushes via the v* deployment branch policy.

v0.2.1 — One-liner installer + gated PyPI publish

Choose a tag to compare

@kevinnft kevinnft released this 16 May 06:57

[0.2.1] — 2026-05-16

Added

  • ⚡ One-liner installer: curl -fsSL .../install.sh | bash. Auto-picks a working Python (3.11–3.13), falls back to uv, creates an isolated venv at ~/.unblock-web, runs heal, and symlinks the binary into ~/.local/bin.
  • docs/publishing.md — step-by-step PyPI Trusted Publishing setup.

Changed

  • README install order: one-liner → pip → Docker → source.
  • publish.yml PyPI job is now gated on vars.PYPI_PUBLISH == 'true' so a tag push doesn't fail before Trusted Publishing is configured.
  • Switched README install command to git-URL form during the PyPI bootstrap window.

Removed

  • Broken PyPI badge (re-added in 0.2.2 once the package was live).

v0.2.0 — pip install + Docker + i18n

Choose a tag to compare

@kevinnft kevinnft released this 16 May 05:41

🌐 Available worldwide

The repo is now installable globally — no clone, no copy-paste, no workarounds.

🚀 Install

Method Command
🐍 Python pip install 'unblock-web[stealth]'
🐳 Docker docker run --rm ghcr.io/kevinnft/unblock-web:v0.2.0 fetch URL
📦 From source pip install -e '.[stealth]'

🛠️ CLI

After install:

unblock-web verify        # 3-tier health canary
unblock-web heal          # auto-detects OS, installs Chromium
unblock-web fetch URL     # smart fetch with auto tier selection

🐍 Library

from unblock_web import fetch

page = fetch('https://x.com/<user>/status/<id>')
print(page.text)
print(f'Used tier: {page.tier}')

🌐 Cross-platform tested

CI matrix passes on:

  • Ubuntu × Python 3.10 / 3.11 / 3.12
  • macOS × Python 3.10 / 3.11 / 3.12

🇮🇩 Indonesian translation

Full README in Bahasa Indonesia: README.id.md

📦 What changed since v0.1.0

  • NEW: PyPI package (pip install unblock-web)
  • NEW: Docker image at ghcr.io/kevinnft/unblock-web
  • NEW: Cross-OS Chromium detection (macOS uses ~/Library/Caches, etc.)
  • NEW: Auto platform-override (only fires on Ubuntu 25+, not macOS)
  • NEW: unblock-web fetch URL smart auto-tier CLI
  • NEW: from unblock_web import fetch library API
  • NEW: README.id.md Bahasa Indonesia
  • Standalone scripts/ kept for users who don't want pip
  • CI now matrix-tests Ubuntu + macOS × 3 Python versions

🔧 Maintainer note

PyPI publication needs one-time Trusted Publisher setup. See docs/publishing.md for the steps. Until then, install via pip install -e '.[stealth]' from a clone, or use the Docker image.

🎯 Verified targets (May 2026)

  • ✅ x.com tweet body (no auth)
  • ✅ Cloudflare Turnstile (nowsecure.nl, xcancel.com)
  • ✅ web3.okx.com via TinyFish geo-proxy (Indonesian ISP bypass)
  • ✅ Plain HTML / GitHub READMEs
  • ✅ Reproducible from any country

v0.1.0 — Anti-blok stack: initial release

Choose a tag to compare

@kevinnft kevinnft released this 16 May 04:57

🎉 Initial Release

The anti-blok web scraping stack is now in production.

What's in the box

A field-tested 4-tier decision tree for AI agents and scrapers facing real-world blocks:

Tier Tool Solves
🛡️ T1 Scrapling + Patchright Cloudflare Turnstile, x.com login walls, JS SPAs
🌍 T2 TinyFish (free unlimited) ISP DNS poisoning (🇮🇩), geo-locked content
🪞 T3 xcancel.com / Nitter mirrors X reply trees without auth
🔑 T4 xurl + bearer token DMs, private accounts, write operations

Verified targets (May 2026)

  • x.com/<user>/status/<id> (full tweet body, no auth)
  • nowsecure.nl (Cloudflare anti-bot challenge)
  • xcancel.com (Cloudflare-protected, full reply tree)
  • web3.okx.com (from Indonesian Internet Positif blocked network)

All examples run end-to-end. Canary CI passes on every push.

Get started

git clone https://github.com/kevinnft/unblock-web.git
cd unblock-web
pip install -r requirements.txt
bash scripts/heal-chromium.sh
python3 scripts/verify-stack.py --verbose

See the README for the full decision tree.

Why this exists

Most scraping tutorials stop at "just install Playwright". Then you hit:

  • 🇮🇩 ISP poisoning your DNS
  • ☁️ Cloudflare Turnstile upgrading every quarter
  • 🐦 X.com adding login walls overnight
  • 🐧 Ubuntu 26.04 breaking Playwright install (yes, fixed in here)

This repo encodes the field battles. Free tools only. No paid services hoarded. Reproducible against listed targets.

Maintenance

  • Weekly canary runs (Mondays, GitHub Actions)
  • docs/known-targets.md is community-maintained
  • PRs welcome with new bypass recipes

@kevinnft