English | 日本語
Blazing-fast Markdown linter built in Go — 100,000+ lines in ~170ms. Single binary, no Node.js required, and built-in HTTP link validation.
Quick install (macOS / Linux):
curl -fsSL https://raw.githubusercontent.com/shinagawa-web/gomarklint/main/install.sh | shDownload binary (no Go required):
Download the latest binary for your platform from GitHub Releases.
# macOS / Linux
tar -xzf gomarklint_Darwin_x86_64.tar.gz
sudo mv gomarklint /usr/local/bin/
# or install to user-local directory (no sudo required)
mkdir -p ~/.local/bin && mv gomarklint ~/.local/bin/# Windows (PowerShell)
Expand-Archive -Path gomarklint_Windows_x86_64.zip -DestinationPath "$env:LOCALAPPDATA\Programs\gomarklint"
# Add to PATH (run once)
[Environment]::SetEnvironmentVariable("PATH", $env:PATH + ";$env:LOCALAPPDATA\Programs\gomarklint", "User")Via Homebrew:
brew install shinagawa-web/tap/gomarklintVia npm:
npm install -g @shinagawa-web/gomarklintVia go install:
go install github.com/shinagawa-web/gomarklint/v3@latest- 100,000+ lines in ~170ms — single binary, no JIT warmup, no runtime overhead.
- Catch broken links and headings before your docs ship.
- Enforce predictable structure (no more "why is this H4 under H2?").
- Output that's friendly for both humans and machines (JSON).
name: Lint Markdown
on:
pull_request:
paths:
- '**/*.md'
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: shinagawa-web/gomarklint@v3Without args, the action lints the files listed in the include field of .gomarklint.json. Pass args to override, e.g. args: docs/.
Full options including PR comments: see Marketplace listing
Add to your .pre-commit-config.yaml:
repos:
- repo: https://github.com/shinagawa-web/gomarklint
rev: v3.0.0
hooks:
- id: gomarklintFull documentation is available at shinagawa-web.github.io/gomarklint
- Quick Start
- Rules
- CLI Reference
- Configuration
- GitHub Actions Integration
- Migrating from Other Linters
- FAQ & Troubleshooting
Issues, suggestions, and PRs are welcome!
Requirements: Go 1.22+ (latest stable recommended)
make test # unit tests
make test-e2e # end-to-end tests
make build # build binaryInstall the pre-push hook to run lint and unit tests automatically before pushing:
make install-hooksTo bypass the hook in an emergency:
git push --no-verifyMIT License
