Releases: kevinnft/unblock-web
Release list
v0.2.3 — Version sync fix + CHANGELOG
[0.2.3] — 2026-05-16
Fixed
unblock-web --versionandunblock_web.__version__now match the installed wheel version (previously stuck at0.2.0after apip installof v0.2.2).- Single source of truth: version is now read dynamically from
src/unblock_web/__init__.pyvia Hatch. - Removed stale
dist/wheels from git history (they were already in.gitignore).
Added
CHANGELOG.md(this file).- Repository Homepage field now points to https://pypi.org/project/unblock-web/.
v0.2.2 — First PyPI release 🎉
[0.2.2] — 2026-05-16
Added
- 🎉 First PyPI release.
pip install unblock-webworks worldwide. - GitHub Actions Trusted Publishing flow for PyPI (no API tokens in repo).
Fixed
pypiEnvironment inpublish.ymlnow allows tag pushes via thev*deployment branch policy.
v0.2.1 — One-liner installer + gated PyPI publish
[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 touv, creates an isolated venv at~/.unblock-web, runsheal, 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.ymlPyPI job is now gated onvars.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
🌐 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 URLsmart auto-tier CLI - NEW:
from unblock_web import fetchlibrary API - NEW:
README.id.mdBahasa 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
🎉 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 --verboseSee 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.mdis community-maintained- PRs welcome with new bypass recipes