-
Notifications
You must be signed in to change notification settings - Fork 0
Releases: Oaklight/zerodep
v2026.6.13
New Modules
- jsonx (v1.0.0): renamed from
jsonc, now an extended JSON parser supporting JSONC (comments + trailing commas) and JSONL/NDJSON. New API:loads_lines,load_lines,dumps_lines,dump_lines. Batch fast-path matchesndjsonspeed on clean JSONL. (#95, #99)
New Features
- readability (v0.2.0): Expose best-candidate
scoreinReadabilityResult(#97). Extended score propagation from 2 to 4 ancestor levels for deeply nested SPA pages (#98).
Enhancements
- config: updated internal dependency from
jsonctojsonxwith backward-compatible fallback to legacyjsoncmodule. - CLI: added
replaced_bymechanism —zerodep add jsoncnow installsjsonxwith a migration notice;zerodep outdateddetects localjsonc.pyand suggests upgrading. - CLI: new modules now start at version
0.0.0(sentinel);version-check --strictblocks release if any module is unbumped.
Bug Fixes
- httpserver: use chunked transfer encoding for SSE streaming responses (#101).
- CLI: fixed
cmd_bumpcrash when no modules were bumped (empty rows in table formatting).
Performance
- jsonx:
loads_linesuses batch parsing (join lines into JSON array, singlejson.loadscall) for clean JSONL, achieving ndjson-level performance (10 lines: 5.1 μs vs ndjson 6.6 μs). Falls back to per-line JSONC processing when comments are present.
Infrastructure
- Release workflow: replaced auto-bump with
version-check --strictgate — releases are blocked if any module has content changes without a version bump. - Sync Readability Patterns workflow: fixed to use master branch (readability module is no longer on a feature branch).
Migration
Downstream repos using jsonc module should update:
_vendor/jsonc.py→_vendor/jsonx.pyfrom jsonc import loads→from jsonx import loads- Or simply run
zerodep add jsonc— it now installsjsonxautomatically with a migration notice.
Full Changelog: v2026.6.1...v2026.6.13
Assets 2
v2026.6.1
What's Changed
- bench: add real-world fixture data for parser modules (#83) by @Oaklight in #88
- feat(bench): expose min/max/stddev/P95 in benchmark reports by @Oaklight in #89
- feat(bench): add tracemalloc memory benchmarks for parser modules by @Oaklight in #90
- feat(bench): geometric scale curves for yaml/soup/protobuf/multipart by @Oaklight in #91
- fix(bench): pair scale-curve tests by matching parametrize suffix by @Oaklight in #92
- fix(httpclient): URL-encode dict data without files by @Oaklight in #94
Full Changelog: v2026.5.17...v2026.6.1
Assets 2
v2026.5.17
New Modules
- multipart: zero-dependency multipart/form-data parser and encoder (RFC 7578 / RFC 2046).
parse_multipart(),encode_multipart(),extract_boundary()withPartdataclass. Boundary-split algorithm usingbytes.find()for C-level performance — 3-7x faster than python-multipart. Robust boundary detection, Content-Transfer-Encoding (base64/quoted-printable), RFC 5987filename*support. Security limits: max_part_size (10 MB), max_parts (1000). 57 correctness tests + 11 benchmarks.
Bug Fixes
- httpclient: Remove redundant global
asyncio.Lock()/threading.Lock()fromAsyncClient/Clientthat serialized concurrent requests and could cause deadlocks. Connection pools already provide internal fine-grained locking. (#76)
Infrastructure
- Added docs/changelog update workflow guidance to AGENTS.md.
Full Changelog: v2026.5.5.3...v2026.5.17
Assets 2
v2026.5.5.3
jsonschema: Generic JSON Pointer $ref Resolution (RFC 6901)
resolve_refs() now handles any local JSON Pointer fragment, not just #/$defs/ and #/definitions/. This enables resolving OpenAPI-style references like #/components/schemas/XXX, making it a drop-in replacement for jsonref.replace_refs().
Also adds circular reference protection to prevent infinite recursion on self-referencing schemas.
Module Version Bumps
| Module | Version |
|---|---|
| jsonschema | 0.1.0 → 0.2.0 |
Full Changelog: v2026.5.5.2...v2026.5.5.3
Assets 2
v2026.5.5.2
Module Version Bumps
| Module | Version |
|---|---|
| validate | 0.4.3 → 0.5.0 |
Corrects the version for the FieldValidator and model_validator addition — new feature warrants a minor bump, not patch.
Full Changelog: v2026.5.5.1...v2026.5.5.2
Assets 2
v2026.5.5.1
Highlights
httpclient: SOCKS5 Proxy Support (#72)
Native SOCKS5 proxy support (RFC 1928) with username/password authentication (RFC 1929), implemented directly in the module with zero external dependencies.
from httpclient import get, Client # SOCKS5 proxy r = get("https://api.example.com/data", proxy="socks5://proxy:1080") # With authentication r = get("https://api.example.com/data", proxy="socks5://user:pass@proxy:1080") # Session-level with Client(proxy="socks5://proxy:1080") as c: r = c.get("https://api.example.com/data")
- Both sync (
Client) and async (AsyncClient) supported - HTTPS over SOCKS5 tunnel works out of the box
- Streaming responses work through SOCKS5
- ~6-15x faster than
httpx[socks]in benchmarks
CLI Bug Fixes
_list_release_tags()now filters legacy project-level SemVer tags (v0.x.y) that overlap with per-module SemVer and caused false content-hash comparisons in_find_changed_modules().- Version-change detection uses
!=instead of>so that intentional version reverts are not misclassified as "modified".
Module Version Bumps
| Module | Version |
|---|---|
| httpclient | 0.3.1 → 0.4.0 |
What's Changed
Full Changelog: v2026.5.2.1...v2026.5.5.1
Assets 2
v2026.5.2.1
Hotfix for v2026.5.2.
Fixes
- CLI:
version-checkandbumpno longer incorrectly auto-bump brand-new modules that have no prior release tag. New modules now show "new (initial release)" instead of "new (needs version bump)". - Module versions: Reverted incorrect version bump on 5 new modules — httpserver (0.1.0), websocket (0.1.0), cdp (0.1.0), useragent (0.1.0), synctex (0.2.0).
Assets 2
v2026.5.2
New Modules
- websocket (0.1.0) — Zero-dependency RFC 6455 WebSocket client with sync + async support.
WebSocketClientandAsyncWebSocketClientforws://andwss://connections. Full protocol: upgrade handshake, text frame encoding/decoding with client-side masking, ping/pong auto-response, close frame exchange. TLS with optional cert verification. ~1000 lines, stdlib only. 27 correctness tests + 8 benchmarks (vswebsockets). - cdp (0.1.0) — Zero-dependency Chrome DevTools Protocol client for headless browser automation. High-level API:
get_rendered_text()/get_rendered_html()for one-call SPA content extraction. Low-level API: target management, navigation, JS evaluation, user-agent spoofing. Auto-discovers browser debugger WebSocket URL. Depends on siblingwebsocketmodule. ~900 lines, stdlib only. 18 correctness tests + 10 benchmarks. - httpserver (0.1.0) — Zero-dependency async HTTP server with Flask/Microdot-compatible decorator routing.
@app.route(),@app.get(),@app.post()etc. Path parameters with type conversion. Return value coercion (dict → JSON, str → text, tuple → status/headers).StreamingResponsefor SSE,FileResponsefor static files. Middleware hooks, graceful shutdown. ~1000 lines, stdlib only. 58 correctness tests + 26 benchmarks (vs Flask, microdot, bottle). - useragent (0.1.0) — Lightweight Chrome/Edge User-Agent string generator with Client Hints headers. Realistic UA strings for Windows, macOS, Linux (desktop) and Android (mobile). Deterministic output via
random.seed(). ~470 lines. 47 correctness tests + 8 benchmarks (2-3x faster than ua-generator). - synctex (0.2.0) — Zero-dependency SyncTeX bidirectional search parser (PDF ↔ source mapping).
parse_synctex(),inverse_search(),forward_search(). Supports configurable path prefix stripping for Docker/remote builds. 29 correctness tests.
Enhancements
- CLI:
zerodep new --from FILE— create modules from existing Python source files with automatic frontmatter injection - sparse_search benchmarks: Added bm25s comparison and Zipf-distributed scale tests
- httpserver benchmarks: Concurrent serving (10 simultaneous requests), sync vs async handler overhead, large payload (~30KB JSON); Flask added as 4th benchmark target
Infrastructure
- Automated PyPI publish workflow on GitHub Release
AGENTS.mdfor unified AI coding assistant instructions (Claude Code, Codex, Cursor, Copilot, Gemini CLI)- Live benchmark dashboard badge added to README and docs
Full changelog: https://zerodep.readthedocs.io/en/latest/changelog/
Assets 2
v2026.4.27
Highlights
New Modules
- llmstxt —
llms.txtparser and markdown URL candidate finder, withdiscover()for site-level probing - png — PNG/BMP image codec with matrix compression API
New Features
- markdown 0.4.0 — GFM strikethrough (
~~text~~), task lists (- [ ] / - [x]), extended autolinks - qr 0.3.2 —
qr_to_png()andqr_to_svg()image output (depends on newpngmodule) - validate 0.4.2 —
FieldValidatorfor transform+validate,model_validatorfor cross-field validation - sparse_search 0.4.0 — RRF (Reciprocal Rank Fusion) and MMR (Maximal Marginal Relevance) post-retrieval re-ranking
- soup 0.6.0 — CSS pseudo-selector support
- protobuf 0.4.3 —
byte_size()method for size calculation without serialization
Performance
- protobuf — varint fast-paths, write-to-buffer encoders,
_is_default_valuespecialization, encoder dispatch binding, map entry type caching - png — optimized BMP codec, PNG filters, and mode conversion
Infrastructure
- Refine module categories from 7 to 12 fine-grained groups: network, protocol, serialization, validation, text, config, terminal, crypto, image, process, storage, devtools
- Rename
scripts/→_scripts/(internal convention) - Auto-generate
modules/index.mdduring docs build frommanifest.json+ config - Fix
version-checkfalse positives from old project-level SemVer tag collisions and wrong primary file selection
What's Changed
- perf(protobuf): optimize encode and decode hot paths by @Oaklight in #53
- perf(protobuf): optimize encode/decode hot paths and add byte_size() by @Oaklight in #54
- feat(soup): add CSS pseudo-selector support by @Oaklight in #55
- feat(markdown): add GFM strikethrough, task lists, and extended autolinks by @Oaklight in #56
- feat(png): add PNG/BMP image codec with matrix compression API by @Oaklight in #57
- perf(png): optimize BMP codec, PNG filters, and mode conversion by @Oaklight in #58
- feat(qr): add PNG and SVG image output by @Oaklight in #59
- feat(validate): add FieldValidator and model_validator by @Oaklight in #60
- feat(sparse_search): add RRF and MMR post-retrieval re-ranking by @Oaklight in #61
- feat(llmstxt): add llms.txt parser and markdown URL candidate finder by @Oaklight in #63
- feat(llmstxt): add discover() for site-level llms.txt probing by @Oaklight in #64
Full Changelog: v2026.4.25...v2026.4.27
Assets 2
v2026.4.25
New Modules
- JSON Schema module: zero-dependency JSON Schema flattening & sanitization.
flatten_schema()resolves$ref, mergesallOf(deep-merge with type intersection, numeric constraint tightening, required union), simplifiesanyOf/oneOf(nullable detection, single-variant unwrap), and strips unsupported keywords. Each phase is independently callable:resolve_refs,merge_allof,simplify_unions,sanitize. Benchmarked againstallof-merge(JS) across 5 complexity tiers — 1.7-5.3x faster. 57 unit tests + 13 cross-implementation correctness tests. - Readability module: zero-dependency article content extractor ported from Mozilla Readability.js.
extract()performs full article extraction with metadata (title, author, excerpt, published_time, site_name, lang, dir).is_probably_readable()provides a quick readability heuristic check. Supports JSON-LD and OpenGraph metadata extraction. 2-level retry (ruthless on/off) for robust extraction. 18 Mozilla Readability.js test fixtures for cross-validation. Three-way benchmark: zerodep vs readability-lxml vs Mozilla JS. Depends onsoupmodule (no pip dependencies).
Enhancements
- Soup module: extended with tree mutation and serialization APIs —
append(),insert(),extract(),replace_with(),unwrap()for tree manipulation;to_html()/__str__()for HTML serialization;__setitem__/__delitem__for attribute setting/deletion;Soup.new_tag()factory method for creating detached Tag nodes.
Performance
- A2A module: optimized serialization and deserialization paths — serialization is now 2.2-2.6x faster than a2a-protocol (previously 1.4-2.1x slower). Deserialization narrowed from 1.8-4.1x slower to 1.1-1.7x slower. JSON round-trip is now 1.4-1.5x faster end-to-end.
- Cache module: optimized
TypedKeyconstruction, decorator wrapper path, and LFU eviction. LRU decorator overhead is now 1.2x faster than cachetools. LFU eviction now ~equal (previously 1.4x slower). - PersistDict module: optimized SQLite write performance —
PRAGMA synchronous=NORMAL,commit_everyparameter for batched writes. - QR module: optimized encoding path — short inputs now only 1.1x slower (previously 2.1x). Medium/long inputs now 1.1-1.2x faster (previously 1.7-1.9x slower).
- Readability module: optimized scoring and tree-walking — small pages 2.1x faster, medium pages now 1.2x faster (previously 2x slower). Large pages improved from 2x slower to 1.4x slower vs readability-lxml.
- Semver module: optimized parse, comparison, and property access. Parse ~1.3x faster, sort ~1.4x faster, compare ~1.4x faster, property access ~4.5x faster.
Bug Fixes
- Docs: fixed ReadTheDocs build failure caused by
search→sparse_searchmodule rename. - zerodep CLI: fixed
bumpcommand double-bumping modules whose version was already incremented before tagging.
Full Changelog: v2026.4.15.1...v2026.4.25