Skip to content

Roadmap

This file provides an overview of the direction this project is heading. It contains both likely and more aspirational changes. For more granular improvements, see the project’s issues backlog.

Planned

Specific, well-scoped changes that have concrete time-bound implementation plans.

Ready

Feasible, near-term improvement ideas that are clear in scope.

Performance regression baselines in CI

Add representative content fixtures and record just benchmark + memray stats per PR to fail builds on slowdowns in string, lxml, and html5lib engines.

Configuration cookbook and compatibility matrix

Expand docs with end-to-end samples for Django/Wagtail and pure Python usage, plus tables covering supported Python versions, optional parser versions, and Draft.js releases.

Release and maintenance automation

Add a tagged-release workflow that builds with uv, publishes to PyPI, updates CHANGELOG, and generates SBOMs; surface renovate rules and dependency review dashboards.

AI-assisted configuration starter kit

Provide a cookbook showing how to prompt LLMs to draft block maps/entity decorators from HTML samples, and scripts to turn that output into typed configs and fixtures.

Better automated code review

Improve our AI code review setup (currently OpenCodeReview in CI) based on false-positive patterns observed on real PRs:

  • Recognize multi-checker setups. Several findings flagged # ty: ignore as a typo of # type: ignore, and X as X re-exports as redundant. Both are intentional: ty is a separate type checker with its own directive, and no_implicit_reexport requires explicit as aliases. The reviewer should read tool config (pyproject.toml, test-module docstrings) before asserting typos.
  • Verify claims against passing tests. Findings that cite a test by name to argue behavior is broken were directly refuted by that same test passing (e.g. _indent_width coverage). Cross-checking a single test name against the suite output would eliminate this class of false positive.
  • Calibrate severity by failure mode. Distinguish "fails safe / cosmetic / hypothetical misuse" from real defects. Several findings acknowledged "no action needed" or suggested exactly the code as written — inline comments should not be posted for non-findings.
  • Deduplicate findings across runs. The same cosmetic nit recurred across review runs. Repeated findings should be grouped into a single comment.
  • Respect project conventions. TypedDict-without-runtime-validation and centralized string validation tuples are established patterns here; flagging them as missing is noise unless the project already violates its own convention.

Experimental

Possible changes that require R&D, and high-risk ideas that could bring large benefits but with likely trade-offs.

Rust-backed DOM engine

Prototype a Rust extension or PyO3 module for DOM construction to outperform the current string/lxml/html5lib engines on large documents.

Streaming and async export

Explore a streaming API that yields HTML incrementally (sync/async) to reduce memory for very long ContentState exports.

Python 3.12+ only refactor

After dropping 3.10/3.11, adopt 3.12+ features (faster f-strings, typing.Self/TypeAliasType, better match exhaustiveness) to simplify Options/State internals and improve runtime speed.

More advanced tests

See:

Backlog

Likely useful but lower-priority or “filler” tasks.

Publish a richer set of showcases (static site and notebooks) covering Wagtail, vanilla Django, Flask, and headless integrations with generated screenshots.

Draft.js export diffing

Diff outputs between engines or configurations or content states.

Security review cadence

Document a quarterly process to update upper bounds for html5lib/bs4/lxml, run CodeQL/SAST reports, and refresh SECURITY.md with any findings.