- Migrate to
httpx2. - Support following
Retry-Afterheaders for rate-limited requests. - Adds granular URL check outcomes with warning-level issues for rate-limited URLs instead of treating them as broken.
- Treat 401 and 403 responses as unverifiable with appropriate issue messages instead of flagging as broken.
- Relax pinned dependencies to allow for patch updates:
click>=8.3.3,httpx>=0.28.1.
- Add positional
SRCargument as alternative to--dir, allowing users to pass individual files or directories directly. - Replace spinner with Click's built-in progress bar for checking progress.
- Update default timeout from 15s to 20s for better reliability.
- Add check registry system with pluggable
BaseCheckclasses (BrokenPathsCheck,BrokenURLsCheck,URLsTrackingCheck,PathsTrackingCheck,URLsLocaleCheck). - Add
Configfrozen dataclass unifying all runtime options. - Add
CheckResultstructured result type withissuesandlinks_checkedfields. - Add fenced code block detection to skip links inside code blocks during extraction.
- Add handling for unsupported protocol redirects, for example
vscode://, treated as alive instead of broken. - Add
format_issues_table()for formatting per-file issues into a complete markdown table. - Add
openai.comas a built-in skip domain that is always skipped during URL checks. - Add lazy template loading for report generation.
- Add encoding error handling with
errors="replace"for file reading. - Add
OSErrorhandling for path existence checks. - Add max redirect limit (10) for HTTP requests.
- Add exponential backoff for URL retry logic (
0.5 * 2^attempt). - Increase default timeout from 15s to 20s for URL checks.
- Replace
requestswithhttpxfor all HTTP operations, using connection pooling and per-thread clients. - Raise minimum Python version from 3.9 to 3.10.
- Pin dependencies:
click==8.3.2,httpx==0.28.1. - Restructure package modules:
markdown_checker.markdown_link_base->markdown_checker.models.basemarkdown_checker.paths->markdown_checker.models.pathmarkdown_checker.urls->markdown_checker.models.urlmarkdown_checker.utils.format_output->markdown_checker.reports.format_outputmarkdown_checker.reports.generator_base->markdown_checker.reports.basemarkdown_checker.reports.md_reports.generator->markdown_checker.reports.markdown- CLI logic extracted to
markdown_checker.cli - Check logic extracted to
markdown_checker.checker
- Remove
markdown_checker.utils.loggingmodule. - Clear default skip domains from CLI options. Built-in skip domains are still applied internally.
- Fix mutation bugs and improve code safety.
- Fix substring check logic in URL validation.
- Migrate from pip/setuptools to uv for dependency management.
- Replace single test file (~135 lines) with 16 dedicated test files (~1,500+ lines).
- Add separate unit test CI workflow (
python-unit-tests.yaml) across Python 3.10-3.13. - Migrate CI workflows to
astral-sh/setup-uv@v5withuv syncanduv run. - Update pre-commit hooks:
pre-commit-hooksv6.0.0,mirrors-mypyv1.20.0,ruff-pre-commitv0.15.10. - Add
slots=TruetoMarkdownPathandMarkdownURLdataclasses for memory efficiency. - Pre-compile regex patterns at module level for performance.
- Update API docs to reflect new module structure.
- Add
advanced.mddocumentation page.
- Disable GitHub.com URL checks (skipping until fixed).
- Increase timeout for requests to check web URLs alive or not. Defaults to 15 seconds.
- Consider status codes between 2xx and 3xx as valid URLs.
- Add
AcceptandUser-Agentheaders to the requests, which are required by some websites.
- Skip another domain by @IsuminI.
- Change broken URL flagging to always try HEAD and GET on any URL before flagging it as broken.
- Fix command line
list[str]type issue and useClick.IntRangefor retries and timeout.
- Redesign the package.
- Port to using Click instead of
arg_parser. - Expose options for external users to allow for more customization.
- Increase coverage for paths by including paths that start with
/or nothing. - Add retires for URLs before flagging them as broken.
- Perform HEAD request on URL which falls back to GET. If both do not work, flag as broken after the retries count finishes.
- Analyze all web URLs except the ones in the
skip_domainslist. - Change syntax of terminal comments to improve readability.
- Add spinner to indicate that the tool is working (not compatible with all terminals).
- Add documentation for the new features.
- Use multiprocessing for checking broken URLs, reducing the execution time by 50%.
- Add support for GitHub automatic annotations.
- Increase timeout for requests to check web URLs alive or not. #52
- Improve Dev Experience. #28
- Better Typing. #37
- Add ruff, black, mypy, and workflows to check them on all supported Python versions.
- Add pre-commit.
- Change packaging strategy to setuptools with
pyproject.toml. - Add docs in Read the Docs: https://markdown-checker.readthedocs.io/en/latest/
- Change lessons to files.
- Remove IDs from the end of relative paths.
- Improve-package by @john0isaac in #21
- Skip VS Code redirect URLs.
- Fix typos.
- Fix: add requests to required packages by @john0isaac in #19
- Add development requirements and install in devcontainer by @john0isaac in #13
- Format with ruff and black by @john0isaac in #14
- Improve output of checker by @john0isaac in #15
- Feat: broken URLs by @john0isaac in #16
- Skip Microsoft security blog by @john0isaac in #17
- Fix: skip video URLs.
- Feat: add devcontainer.
- Feat: separate into modules.
- Feat: generate markdown file.
- Define tests to execute functions.
- Docs: add instructions for local development.
- Rename
get_input_argstoinputsmodule with no change. - Improve paths reading using recursion.
- Improve script output format.
- Add description to package.
- Improve package metadata.
- Configure GitHub Actions on release.
- Add contributing guidance, code of conduct, and templates for issues and pull requests.
- Initial release.