Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Markdownlint-github

This repository provides GitHub's recommended markdownlint configurations, and additional rules for use on GitHub open source and internal projects.

Opinions

In addition to defaults defined by markdownlint, we use this repository to enforce rules not defined by default, including our own custom rules.

See opinions codified in index.js.

Rules

The following are custom rules defined in this plugin.

See markdownlint rules for documentation on rules pulled in from markdownlint.

Usage

Important: We support the use of markdownlint through markdownlint-cli2 instead of markdownlint-cli for compatibility with the vscode-markdownlint plugin.

  1. Create a .markdownlint-cli2.mjs file in the root of your repository.

    touch .markdownlint-cli2.mjs
  2. Install packages.

    npm install -D markdownlint-cli2 # if updating existing package, check for updates
    npm install -D @github/markdownlint-github [--@github:registry=https://registry.npmjs.org]
    npm install -D markdownlint-cli2-formatter-pretty
  3. Add/modify your linting script in package.json.

    "scripts": {
    "lint:markdown": "markdownlint-cli2 \"**/*.{md,mdx}\"\"!node_modules\""
    }
  4. Edit .markdownlint-cli2.mjs file to suit your needs. Start with

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: init(),customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]// ensures the error message includes a link to the rule documentation]}exportdefaultoptions

    Or, you can also pass in configuration options that you wish to override the default. Read more at Customizing configurations. This looks like:

    importmarkdownItfrom"markdown-it"importconfigOptions,{init}from"@github/markdownlint-github"constoverriddenOptions=init({'fenced-code-language': false,// Custom overrides})constmarkdownItFactory=()=>markdownIt({html: true})constoptions={config: overriddenOptions,customRules: ["@github/markdownlint-github"],
    markdownItFactory,outputFormatters: [["markdownlint-cli2-formatter-pretty",{"appendLink": true}]]}exportdefaultoptions
  5. Install the vscode-markdownlint plugin to ensure markdownlint violations are surfaced in the file. This plugin should flag rules based off your .markdownlint-cli2.mjs configuration. When you make edits to your configuration, you will need to reload the VSCode window (Ctrl+Shift+P -> Reload Window) to ensure the extension syncs. If your project runs on Codespaces, consider adding this extension to your .devcontainer/devcontainer.json so that this extension is installed to new Codespaces by default.

Customizing configurations

You may determine that the defaults set by this plugin are not suitable for your project.

This plugin will pull in the the defaults defined by markdownlint, several of which pertain to stylistic practices. You may choose to disable these rules if you determine it doesn't provide value for your project.

However, others of these rules should NOT be disabled because they encourage best accessibility practices. Disabling these rules will negatively impact accessibility. These rules are defined in accessibility.json.

To review configurations supported by markdownlint, see markdownlint-cli2 configuration.

Advanced: Adding custom rules in your codebase

You may write custom rules within your repository. Follow the custom rules guide in markdownlint to write your rule.

The rule will need to be enabled in the configuration. For instance, if you introduce some-rule.js with the name "some-rule", you must set the path of the custom rule in the .markdownlint-cli2.mjs file:

importconfigOptions,{init}from"@github/markdownlint-github"importmarkdownItfrom"markdown-it"constmarkdownItFactory=()=>markdownIt({html: true})constoptions=init({"some-rule": true,customRules: ["@github/markdownlint-github","some-rule.js"],
markdownItFactory
})exportdefaultoptions

See markdownlint-cli2 configuration.

Consider upstreaming any rules you find useful as proposals to this repository.

License

This project is licensed under the terms of the MIT open source license. Please refer to the MIT license for the full terms.

Maintainers

See CODEOWNERS.

Contributing

Please read Contributing Guide for more information.

About

An opinionated collection of markdownlint rules used by GitHub.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

102 stars

Watchers

167 watching

Forks

Releases

Packages

Used by

Contributors

Languages