PHPackages                             norzechowicz/md-link-linter - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. norzechowicz/md-link-linter

Abandoned → [norberttech/md-link-linter](/?search=norberttech%2Fmd-link-linter)Library[Parsing &amp; Serialization](/categories/parsing)

norzechowicz/md-link-linter
===========================

Markdown link linter

0.3.0(1y ago)12173[2 PRs](https://github.com/norberttech/md-link-linter/pulls)MITPHPPHP ~8.1.0CI passing

Since Oct 26Pushed 1y ago1 watchersCompare

[ Source](https://github.com/norberttech/md-link-linter)[ Packagist](https://packagist.org/packages/norzechowicz/md-link-linter)[ RSS](/packages/norzechowicz-md-link-linter/feed)WikiDiscussions 1.x Synced today

READMEChangelog (10)Dependencies (7)Versions (19)Used By (0)

Markdown Link Linter
====================

[](#markdown-link-linter)

Simple command line tool that aims to detect invalid links in markdown files.

Currently following types of links are being validated:

- relative links
- anchor links
- mention links

```
bin/mdlinklint path --exclude=vendor --exclude=node_modules
```

Use with Docker:

```
docker run -t --rm -v $PWD:/app norberttech/md-link-linter --exclude=vendor --exclude=node_modules .
```

First argument `path` can be skipped or overwritten by environment variable `MD_LINTER_SCAN_DIR`

```
MD_LINTER_SCAN_DIR=path bin/mdlinklint --exclude=vendor --exclude=node_modules
```

When both, argument path and environment variable are present, environment variable takes priority.

```
./mdlinklint --help

Usage:
  run [options] [--] []

Arguments:
  path                     Path in which md link linter should validate all markdown files

Options:
      --dry-run               Scan path and output md files
      --exclude=EXCLUDE       Exclude folders with this name (multiple values allowed)
      --mention=MENTION       Mentions whitelist (can include all team members or groups), if empty mentions are not validated (multiple values allowed)
  -h, --help                  Display help for the given command. When no command is given display help for the run command
  -q, --quiet                 Do not output any message
  -V, --version               Display this application version
      --ansi                  Force ANSI output
      --no-ansi               Disable ANSI output
  -n, --no-interaction        Do not ask any interactive question
  -bf, --break-on-failure     Break the inspection on first failure
  -rp, --root-path=ROOT-PATH  Root path used to assert absolute links. Link: [link](/nested/file.php) will check if file /nested/file.php exists from this path
  -v|vv|vvv, --verbose        Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
```

[![Preview](/docs/preview.png)](/docs/preview.png)

### Validating mentions

[](#validating-mentions)

Using `--mention` option you can set allowed mentions

```
bin/mdlinklint path --mentions=norberttech --mention=team_name
```

If not used, mention link assertion will always pass.

Installation
------------

[](#installation)

### Docker

[](#docker)

**Recommended** - md-link-linter is not a type of tool you want to put into your project as a dependency because it comes with it own dependencies that might overlaps with yours.

[Docker Hub - norberttech/md-link-linter](https://hub.docker.com/r/norberttech/md-link-linter)

### Composer

[](#composer)

```
composer global require norberttech/md-link-linter
```

### Phive

[](#phive)

Since md-link-linter relay on `\realpath` function which does not work in Phar environment (explanation below) there are no plans for now to make it available through phive.

> The function realpath() will not work for a file which is inside a Phar as such path would be a virtual path, not a real one.

[php.net realpath documentation](https://www.php.net/manual/en/function.realpath.php)

Development
-----------

[](#development)

### Install dependencies

[](#install-dependencies)

```
composer install
```

### Run tests

[](#run-tests)

```
composer tests
```

### Codding standards

[](#codding-standards)

This command might change your code!

```
composer cs:php:fix
```

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance40

Moderate activity, may be stable

Popularity15

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 53% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~139 days

Recently: every ~379 days

Total

15

Last Release

433d ago

Major Versions

0.3.0 → 1.x-dev2025-03-05

PHP version history (5 changes)0.0.1PHP ^7.3

0.0.9PHP &gt;=7.3

0.0.10PHP ~7.3.0 || ~7.4.2 || 8.0.0

0.0.11PHP ~7.3.0 || ~7.4.2 || ~8.0.0

0.1.0PHP ~8.1.0

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/52325810?v=4)[norbert-tech](/maintainers/norbert-tech)[@norbert-tech](https://github.com/norbert-tech)

---

Top Contributors

[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (267 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (130 commits)")[![aeon-automation](https://avatars.githubusercontent.com/u/77585774?v=4)](https://github.com/aeon-automation "aeon-automation (58 commits)")[![norberttech](https://avatars.githubusercontent.com/u/1921950?v=4)](https://github.com/norberttech "norberttech (46 commits)")[![stloyd](https://avatars.githubusercontent.com/u/67402?v=4)](https://github.com/stloyd "stloyd (2 commits)")[![peter279k](https://avatars.githubusercontent.com/u/9021747?v=4)](https://github.com/peter279k "peter279k (1 commits)")

---

Tags

lintermarkdownlinkmarkdownlinter

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/norzechowicz-md-link-linter/health.svg)

```
[![Health](https://phpackages.com/badges/norzechowicz-md-link-linter/health.svg)](https://phpackages.com/packages/norzechowicz-md-link-linter)
```

###  Alternatives

[erusev/parsedown-extra

An extension of Parsedown that adds support for Markdown Extra.

84314.8M192](/packages/erusev-parsedown-extra)[justinwalsh/daux.io

Documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly

4.6k38.1k1](/packages/justinwalsh-dauxio)[daux/daux.io

Documentation generator that uses a simple folder structure and Markdown files to create custom documentation on the fly

825191.0k1](/packages/daux-dauxio)[dragon-code/codestyler

A tool to automatically fix Coding Style Standards issues by The Dragon Code.

291.8M16](/packages/dragon-code-codestyler)[benjaminhoegh/parsedown-extended

An extension for Parsedown.

5022.6k1](/packages/benjaminhoegh-parsedown-extended)[bookdown/bookdown

Provides DocBook-like rendering of Markdown files.

8257.6k16](/packages/bookdown-bookdown)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
