Changes

[v1.0.3]

  • Migrate to httpx2.

  • Support following Retry-After headers 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.

[v1.0.2] 4 May 2026

  • Relax pinned dependencies to allow for patch updates: click>=8.3.3, httpx>=0.28.1.

[v1.0.1] 18 April 2026

  • Add positional SRC argument 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.

[v1.0.0] 13 April 2026

Features Added

  • Add check registry system with pluggable BaseCheck classes (BrokenPathsCheck, BrokenURLsCheck, URLsTrackingCheck, PathsTrackingCheck, URLsLocaleCheck).

  • Add Config frozen dataclass unifying all runtime options.

  • Add CheckResult structured result type with issues and links_checked fields.

  • 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.com as 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 OSError handling 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.

Breaking Changes

  • Replace requests with httpx for 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.base

    • markdown_checker.paths -> markdown_checker.models.path

    • markdown_checker.urls -> markdown_checker.models.url

    • markdown_checker.utils.format_output -> markdown_checker.reports.format_output

    • markdown_checker.reports.generator_base -> markdown_checker.reports.base

    • markdown_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.logging module.

  • Clear default skip domains from CLI options. Built-in skip domains are still applied internally.

Bugs Fixed

  • Fix mutation bugs and improve code safety.

  • Fix substring check logic in URL validation.

Other Changes

  • 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@v5 with uv sync and uv run.

  • Update pre-commit hooks: pre-commit-hooks v6.0.0, mirrors-mypy v1.20.0, ruff-pre-commit v0.15.10.

  • Add slots=True to MarkdownPath and MarkdownURL dataclasses for memory efficiency.

  • Pre-compile regex patterns at module level for performance.

  • Update API docs to reflect new module structure.

  • Add advanced.md documentation page.

[v0.2.5] 5 May 2025

  • Disable GitHub.com URL checks (skipping until fixed).

[v0.2.4] 26 Jan 2025

  • 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 Accept and User-Agent headers to the requests, which are required by some websites.

[v0.2.3] 26 Nov 2024

  • Skip another domain by @IsuminI.

[v0.2.2] 8 Nov 2024

  • Change broken URL flagging to always try HEAD and GET on any URL before flagging it as broken.

[v0.2.1] 7 Aug 2024

  • Fix command line list[str] type issue and use Click.IntRange for retries and timeout.

[v0.2.0] 7 Aug 2024

  • 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_domains list.

  • 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.

[v0.1.5] 8 Jul 2024

[v0.1.4] 6 May 2024

[v0.1.3] 15 March 2024

  • Change lessons to files.

  • Remove IDs from the end of relative paths.

[v0.1.2] 06 March 2024

[v0.1.1] 06 March 2024

[v0.1.0] 06 March 2024

[v0.0.9] 05 March 2024

  • Fix: skip video URLs.

  • Feat: add devcontainer.

[v0.0.8] 30 December 2023

  • Feat: separate into modules.

  • Feat: generate markdown file.

  • Define tests to execute functions.

  • Docs: add instructions for local development.

[v0.0.7] 26 November 2023

  • Rename get_input_args to inputs module with no change.

  • Improve paths reading using recursion.

  • Improve script output format.

[v0.0.5] 22 November 2023

  • 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.

[v0.0.4] 21 November 2023

  • Initial release.