Author high-quality Markdown documentation with deterministic structure, lint compliance, and CI integration. Use when writing README files, creating docs pages, fixing markdownlint failures, defining style rules, or wiring markdown checks into pre-commit and pipelines. Keywords: markdown, markdownlint, readme, docs, headings, lists, code fences, links, images, lint config, ci, documentation style.
Overall
score
100%
Does it follow best practices?
Validation for skill structure
# npm
npm install -D markdownlint-cli2
# pnpm
pnpm add -D markdownlint-cli2
# yarn
yarn add -D markdownlint-cli2Basic JSON configuration:
{
"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json",
"default": true,
"MD003": { "style": "atx" },
"MD004": { "style": "dash" },
"MD007": { "indent": 2 },
"MD013": {
"line_length": 120,
"code_blocks": false,
"tables": false
},
"MD033": {
"allowed_elements": ["br", "img", "details", "summary"]
},
"MD041": true
}JSONC allows comments:
{
"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json",
// Enable all rules by default
"default": true,
// Use ATX-style headings (# Heading)
"MD003": { "style": "atx" },
// Use dashes for unordered lists
"MD004": { "style": "dash" },
// Allow longer lines for code blocks
"MD013": {
"line_length": 120,
"code_blocks": false
}
}YAML configuration:
# Enable all rules by default
default: true
# Heading style
MD003:
style: atx
# Unordered list style
MD004:
style: dash
# Line length
MD013:
line_length: 120
code_blocks: false
tables: false
# Allowed HTML elements
MD033:
allowed_elements:
- br
- img
- details
- summarymodule.exports = {
default: true,
MD003: { style: 'atx' },
MD004: { style: 'dash' },
MD013: {
line_length: 120,
code_blocks: false,
tables: false
},
MD033: {
allowed_elements: ['br', 'img', 'details', 'summary']
}
};Markdownlint searches for configuration in this order:
.markdownlint-cli2.jsonc (CLI-specific).markdownlint-cli2.yaml.markdownlint-cli2.cjs.markdownlint.jsonc (markdownlint rules).markdownlint.json.markdownlint.yaml.markdownlint.yml.markdownlint.cjs{
"extends": "../.markdownlint.json",
"MD013": false
}{
"extends": "markdownlint-config-standard"
}{
"config": {
// Markdownlint rules configuration
"default": true,
"MD013": { "line_length": 120 }
},
"globs": [
"**/*.md"
],
"ignores": [
"**/node_modules/**",
"**/dist/**",
"CHANGELOG.md"
],
"fix": false,
"outputFormatters": [
[
"markdownlint-cli2-formatter-default"
]
]
}<!-- markdownlint-disable-file -->
# This file is not linted<!-- markdownlint-disable MD013 MD033 -->
This line can be very long and contain <span>HTML</span>.
<!-- markdownlint-enable MD013 MD033 -->This is a normal line.
<!-- markdownlint-disable-next-line MD013 -->
This is a very long line that would normally trigger MD013 but is explicitly allowed.Or:
This is a very long line that would normally trigger MD013 but is explicitly allowed. <!-- markdownlint-disable-line MD013 --><!-- markdownlint-capture -->
<!-- markdownlint-disable MD013 -->
Long content here...
<!-- markdownlint-restore -->
Normal linting resumes.<!-- markdownlint-configure-file { "MD013": { "line_length": 150 } } -->
# Rest of file uses 150 character line length{
"default": true,
"MD013": {
"line_length": 80,
"code_blocks": false
},
"MD033": false,
"MD041": true,
"MD046": { "style": "fenced" },
"MD048": { "style": "backtick" }
}{
"default": true,
"MD013": false,
"MD033": {
"allowed_elements": ["br", "img", "iframe", "div", "span"]
},
"MD041": false
}{
"default": true,
"MD013": {
"line_length": 120,
"code_blocks": false,
"tables": false
},
"MD033": {
"allowed_elements": ["br", "details", "summary", "img"]
},
"MD024": { "siblings_only": true },
"MD041": true
}Root .markdownlint.json:
{
"default": true,
"MD013": { "line_length": 100 }
}packages/docs/.markdownlint.json:
{
"extends": "../../.markdownlint.json",
"MD013": { "line_length": 120 }
}project/
├── .markdownlint.json # Base config
├── docs/
│ ├── .markdownlint.json # Overrides for docs
│ └── api.md
└── blog/
├── .markdownlint.json # Overrides for blog
└── post.mdAlways include the schema for IDE support:
{
"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json",
"default": true
}This enables:
"default": true and disable specific rules$schema for IDE supportextends for shared configurationsextends paths are correctInstall with Tessl CLI
npx tessl i pantheon-ai/markdown-authoring@0.1.1